3 use IEEE.STD_LOGIC_1164.
ALL;
4 use ieee.std_logic_unsigned.
all;
10 use UNISIM.VComponents.
all;
13 Port ( sys_reset : in ;
-- active high reset of all logic but GTX
17 LinkWe : in (1 downto 0);
18 LinkCtrl : in (1 downto 0);
19 LinkData : in array2x64;
21 LinkDown : out (1 downto 0);
22 LinkFull : out (1 downto 0);
24 -- ack_cnt : out (2 downto 0); --
1 ck pulse (txusrclk) indicating a received acknowledge
25 -- pckt_cnt : out (2 downto 0); --
1 ck pulse (txusrclk) indicating a transmit packet
26 -- retransmit_cnt : out (2 downto 0); --
1 ck pulse (txusrclk) indicating a retransmit packet
27 -- event_cnt : out (2 downto 0); --
1 ck pulse (sys_clk) indicating a sent event
28 sync_loss : out (1 downto 0);
-- goes to '1' (rxusrclk) when SERDES is out of synch
29 status_ce : in (1 downto 0);
-- not implemented yet
30 status_addr : in (15 downto 0);
-- not implemented yet
31 status_port : out array2x64;
-- first 32 bits are hard-wired
33 txusrclk_o : out ;
-- reconstructed tx clock, to be used to clock sending circuitry
34 rxusrclk_o : out ;
-- reconstructed rx clock, to be used to clock receiving circuitry
36 gtx_reset : in ;
-- full reset of GTX only
37 gtx_refclk_p : in ;
-- iob for refclk neg
38 gtx_refclk_n : in ;
-- iob for refclk neg
39 sfp_rxn : in (1 downto 0);
-- sfp iobs
40 sfp_rxp : in (1 downto 0);
41 sfp_txn : out (1 downto 0);
42 sfp_txp : out (1 downto 0)
46 architecture Behavioral
of DaqLSCXG is
54 LINKData :
in (
63 downto 0);
55 src_ID :
in (
15 downto 0);
56 inject_err :
in (
17 downto 0);
58 Addr :
in (
15 downto 0);
59 status_data :
out (
63 downto 0);
66 SD_Data_o :
out (
63 downto 0);
67 SD_Kb_o :
out (
7 downto 0);
69 SD_Data_i :
in (
63 downto 0);
70 SD_Kb_i :
in (
7 downto 0);
72 Serdes_status :
in (
31 downto 0)
87 xgmii_txd :
IN array2x64;
88 xgmii_txc :
IN array2x8;
94 PCS_lock :
OUT (
1 downto 0);
95 gtx_rxresetdone :
OUT (
1 downto 0);
96 xgmii_rxd :
OUT array2x64;
97 xgmii_rxc :
OUT array2x8
103 signal sys_reset_bar : ;
104 signal serdes_core_clk156_out : ;
105 signal txdata, rxdata : array2x64;
106 signal rxcharisk, txcharisk, rxchariscomma, gtx_rxnotintable : array2x8;
107 signal gtx_rxresetdone : (1 downto 0);
108 signal PCS_lock : (1 downto 0);
109 signal serdes_status : array2x32 := (others => (others => '0'));
111 txusrclk_o <= serdes_core_clk156_out;
112 rxusrclk_o <= serdes_core_clk156_out;
113 sync_loss <= not PCS_lock;
114 g_SLINK_opt : for i in 0 to 1 generate
118 reset => sys_reset_bar,
-- needs an active low reset
120 -- DATA interface from FED
121 LINKWe =>
not LinkWe
(i
),
122 LINKCtrl => LinkCtrl
(i
),
123 LINKData => LinkData
(i
),
125 inject_err =>
(others =>'0'
),
128 status_data => status_port
(i
),
129 serdes_status => serdes_status
(i
),
130 LINKDown => LinkDown
(i
),
131 LINK_LFF => LinkFull
(i
),
133 clock => serdes_core_clk156_out,
--clk_156_service, -- clk tx from SERDES
134 serdes_init => serdes_status
(i
)(0),
-- status that comes back from GTX
135 SD_Data_o => TXDATA
(i
),
-- data sent to serdes (64 )
136 SD_Kb_o => TXCHARISK
(i
),
-- control K associated to SD_Data_o (8 bits)
137 clock_r => serdes_core_clk156_out,
-- reconstructed clock from SERDES
138 SD_Data_i => RXDATA
(i
),
-- return data from SERDES 64
139 SD_Kb_i => RXCHARISK
(i
) -- return control K associated to SD_Data_i (8 bits)
141 serdes_status(i)(0) <= PCS_lock(i);
142 serdes_status(i)(1) <= gtx_rxresetdone(i);
144 sys_reset_bar <= not(sys_reset);
148 gtx_reset => gtx_reset,
149 SFP0_RXN => sfp_rxn
(0),
150 SFP0_RXP => sfp_rxp
(0),
151 SFP1_RXN => sfp_rxn
(1),
152 SFP1_RXP => sfp_rxp
(1),
153 SFP0_TXN => sfp_txn
(0),
154 SFP0_TXP => sfp_txp
(0),
155 SFP1_TXN => sfp_txn
(1),
156 SFP1_TXP => sfp_txp
(1),
157 SFP_REFCLK_P => gtx_refclk_p ,
158 SFP_REFCLK_N => gtx_refclk_n ,
159 clk156 => serdes_core_clk156_out,
160 PCS_lock => PCS_lock,
161 gtx_rxresetdone => gtx_rxresetdone ,
163 xgmii_txc => TXCHARISK,
165 xgmii_rxc => RXCHARISK