3 use IEEE.STD_LOGIC_1164.
ALL;
4 use ieee.std_logic_unsigned.
all;
10 use UNISIM.VComponents.
all;
13 generic(N_SFP : := 1);
14 Port ( sys_reset : in ;
-- active high reset of all logic but GTX
18 LinkWe : in (2 downto 0);
19 LinkCtrl : in (2 downto 0);
20 LinkData : in array3x64;
22 LinkDown : out (2 downto 0);
23 LinkFull : out (2 downto 0);
25 -- ack_cnt : out (2 downto 0); --
1 ck pulse (txusrclk) indicating a received acknowledge
26 -- pckt_cnt : out (2 downto 0); --
1 ck pulse (txusrclk) indicating a transmit packet
27 -- retransmit_cnt : out (2 downto 0); --
1 ck pulse (txusrclk) indicating a retransmit packet
28 -- event_cnt : out (2 downto 0); --
1 ck pulse (sys_clk) indicating a sent event
29 sync_loss : out (2 downto 0);
-- goes to '1' (rxusrclk) when SERDES is out of synch
30 status_ce : in (2 downto 0);
-- not implemented yet
31 status_addr : in (15 downto 0);
-- not implemented yet
32 status_port : out array3x64;
-- first 32 bits are hard-wired
34 txusrclk_o : out ;
-- reconstructed tx clock, to be used to clock sending circuitry
35 rxusrclk_o : out ;
-- reconstructed rx clock, to be used to clock receiving circuitry
37 gtx_reset : in ;
-- full reset of GTX only
38 gtx_refclk_p : in ;
-- iob for refclk neg
39 gtx_refclk_n : in ;
-- iob for refclk neg
40 sfp_rxn : in (2 downto 0);
-- sfp iobs
41 sfp_rxp : in (2 downto 0);
42 sfp_txn : out (2 downto 0);
43 sfp_txp : out (2 downto 0)
47 architecture Behavioral
of DaqLSCXG is
55 LINKData :
in (
63 downto 0);
56 src_ID :
in (
15 downto 0);
57 inject_err :
in (
17 downto 0);
59 Addr :
in (
15 downto 0);
60 status_data :
out (
63 downto 0);
67 SD_Data_o :
out (
63 downto 0);
68 SD_Kb_o :
out (
7 downto 0);
70 SD_Data_i :
in (
63 downto 0);
71 SD_Kb_i :
in (
7 downto 0);
73 Serdes_status :
in (
31 downto 0)
90 xgmii_txd :
IN array3x64;
91 xgmii_txc :
IN array3x8;
99 PCS_lock :
OUT (
2 downto 0);
100 gtx_rxresetdone :
OUT (
2 downto 0);
101 xgmii_rxd :
OUT array3x64;
102 xgmii_rxc :
OUT array3x8
105 COMPONENT ten_gig_eth_pcs_pma_0_example_design
110 core_clk156_out :
out ;
112 sim_speedup_control:
in := '
0';
113 xgmii_txd :
in (
63 downto 0);
114 xgmii_txc :
in (
7 downto 0);
115 xgmii_rxd :
out (
63 downto 0);
116 xgmii_rxc :
out (
7 downto 0);
124 global_tx_disable:
in ;
127 test_patt_a_b :
in (
57 downto 0);
130 rx_test_patt_en :
in ;
131 tx_test_patt_en :
in ;
134 set_pma_link_status :
in ;
135 set_pcs_link_status :
in ;
136 clear_pcs_status2 :
in ;
137 clear_test_patt_err_count:
in ;
139 pma_link_status :
out ;
141 pcs_rx_link_status :
out ;
142 pcs_rx_locked :
out ;
144 teng_pcs_rx_link_status :
out ;
145 pcs_err_block_count :
out (
7 downto 0);
146 pcs_ber_count :
out (
5 downto 0);
147 pcs_rx_hiber_lh :
out ;
148 pcs_rx_locked_ll :
out ;
149 pcs_test_patt_err_count :
out (
15 downto 0);
150 core_status :
out (
7 downto 0);
159 signal sys_reset_bar : ;
160 signal serdes_core_clk156_out : ;
161 signal txdata, rxdata : array3x64;
162 signal rxcharisk, txcharisk, rxchariscomma, gtx_rxnotintable : array3x8;
163 signal gtx_rxresetdone : (2 downto 0);
164 signal PCS_lock : (2 downto 0);
165 signal serdes_status : array3x32 := (others => (others => '0'));
167 txusrclk_o <= serdes_core_clk156_out;
168 rxusrclk_o <= serdes_core_clk156_out;
169 sync_loss <= not PCS_lock;
170 g_SLINK_opt : for i in 0 to 2 generate
174 reset => sys_reset_bar,
-- needs an active low reset
176 -- DATA interface from FED
177 LINKWe =>
not LinkWe
(i
),
178 LINKCtrl => LinkCtrl
(i
),
179 LINKData => LinkData
(i
),
181 inject_err =>
(others =>'0'
),
184 status_data => status_port
(i
),
185 serdes_status => serdes_status
(i
),
186 LINKDown => LinkDown
(i
),
187 LINK_LFF => LinkFull
(i
),
189 clock => serdes_core_clk156_out,
--clk_156_service, -- clk tx from SERDES
190 serdes_init => serdes_status
(i
)(0),
-- status that comes back from GTX
191 SD_Data_o => TXDATA
(i
),
-- data sent to serdes (64 )
192 SD_Kb_o => TXCHARISK
(i
),
-- control K associated to SD_Data_o (8 bits)
193 clock_r => serdes_core_clk156_out,
-- reconstructed clock from SERDES
194 SD_Data_i => RXDATA
(i
),
-- return data from SERDES 64
195 SD_Kb_i => RXCHARISK
(i
) -- return control K associated to SD_Data_i (8 bits)
197 serdes_status(i)(0) <= PCS_lock(i);
198 serdes_status(i)(1) <= gtx_rxresetdone(i);
200 sys_reset_bar <= not(sys_reset);
201 g_XGMII_serdes: if (N_SFP = 1) generate
202 XGMII_serdes: ten_gig_eth_pcs_pma_0_example_design
204 refclk_p => gtx_refclk_p,
205 refclk_n => gtx_refclk_n,
206 dclk => serdes_core_clk156_out,
--clk_156_service,
207 core_clk156_out => serdes_core_clk156_out,
209 sim_speedup_control => '0',
210 xgmii_txd => TXDATA
(0),
211 xgmii_txc => TXCHARISK
(0),
212 xgmii_rxd => RXDATA
(0),
213 xgmii_rxc => RXCHARISK
(0),
214 xgmii_rx_clk => rxusrclk_o,
221 global_tx_disable => '0',
224 test_patt_a_b =>
(others => '0'
),
225 data_patt_sel => '0',
226 test_patt_sel => '0',
227 rx_test_patt_en => '0',
228 tx_test_patt_en => '0',
231 set_pma_link_status => '0',
232 set_pcs_link_status => '0',
233 clear_pcs_status2 => '0',
234 clear_test_patt_err_count => '0',
236 pma_link_status =>
open,
238 pcs_rx_link_status =>
open,
239 pcs_rx_locked =>
open,
241 teng_pcs_rx_link_status =>
open,
242 pcs_err_block_count =>
open,
243 pcs_ber_count =>
open,
244 pcs_rx_hiber_lh =>
open,
245 pcs_rx_locked_ll =>
open,
246 pcs_test_patt_err_count =>
open,
247 core_status
(0) => PCS_lock
(0),
-- goes to 1 when PCS
block lock aquired
248 core_status
(7 downto 1) =>
open,
249 resetdone => gtx_rxresetdone
(0),
250 signal_detect => '1',
255 g_XGMII_serdes_wapper: if (N_SFP > 1) generate
259 gtx_reset => gtx_reset,
260 SFP0_RXN => sfp_rxn
(0),
261 SFP0_RXP => sfp_rxp
(0),
262 SFP1_RXN => sfp_rxn
(1),
263 SFP1_RXP => sfp_rxp
(1),
264 SFP2_RXN => sfp_rxn
(2),
265 SFP2_RXP => sfp_rxp
(2),
266 SFP0_TXN => sfp_txn
(0),
267 SFP0_TXP => sfp_txp
(0),
268 SFP1_TXN => sfp_txn
(1),
269 SFP1_TXP => sfp_txp
(1),
270 SFP2_TXN => sfp_txn
(2),
271 SFP2_TXP => sfp_txp
(2),
272 SFP_REFCLK_P => gtx_refclk_p,
273 SFP_REFCLK_N => gtx_refclk_n,
274 clk156 => serdes_core_clk156_out,
275 PCS_lock => PCS_lock,
276 gtx_rxresetdone => gtx_rxresetdone,
278 xgmii_txc => TXCHARISK,
280 xgmii_rxc => RXCHARISK