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)
77 COMPONENT ten_gig_eth_pcs_pma_0_example_design
82 core_clk156_out :
out ;
84 sim_speedup_control:
in := '
0';
85 xgmii_txd :
in (
63 downto 0);
86 xgmii_txc :
in (
7 downto 0);
87 xgmii_rxd :
out (
63 downto 0);
88 xgmii_rxc :
out (
7 downto 0);
96 global_tx_disable:
in ;
99 test_patt_a_b :
in (
57 downto 0);
102 rx_test_patt_en :
in ;
103 tx_test_patt_en :
in ;
106 set_pma_link_status :
in ;
107 set_pcs_link_status :
in ;
108 clear_pcs_status2 :
in ;
109 clear_test_patt_err_count:
in ;
111 pma_link_status :
out ;
113 pcs_rx_link_status :
out ;
114 pcs_rx_locked :
out ;
116 teng_pcs_rx_link_status :
out ;
117 pcs_err_block_count :
out (
7 downto 0);
118 pcs_ber_count :
out (
5 downto 0);
119 pcs_rx_hiber_lh :
out ;
120 pcs_rx_locked_ll :
out ;
121 pcs_test_patt_err_count :
out (
15 downto 0);
122 core_status :
out (
7 downto 0);
131 signal sys_reset_bar : ;
132 signal serdes_core_clk156_out : ;
133 signal txdata, rxdata : array3x64;
134 signal rxcharisk, txcharisk, rxchariscomma, gtx_rxnotintable : array3x8;
135 signal gtx_rxresetdone : (2 downto 0);
136 signal PCS_lock : (2 downto 0);
137 signal serdes_status : array3x32 := (others => (others => '0'));
139 txusrclk_o <= serdes_core_clk156_out;
140 rxusrclk_o <= serdes_core_clk156_out;
141 sync_loss <= not PCS_lock;
142 g_SLINK_opt : for i in 0 to 2 generate
146 reset => sys_reset_bar,
-- needs an active low reset
148 -- DATA interface from FED
149 LINKWe =>
not LinkWe
(i
),
150 LINKCtrl => LinkCtrl
(i
),
151 LINKData => LinkData
(i
),
153 inject_err =>
(others =>'0'
),
156 status_data => status_port
(i
),
157 serdes_status => serdes_status
(i
),
158 LINKDown => LinkDown
(i
),
159 LINK_LFF => LinkFull
(i
),
161 clock => serdes_core_clk156_out,
--clk_156_service, -- clk tx from SERDES
162 serdes_init => serdes_status
(i
)(0),
-- status that comes back from GTX
163 SD_Data_o => TXDATA
(i
),
-- data sent to serdes (64 )
164 SD_Kb_o => TXCHARISK
(i
),
-- control K associated to SD_Data_o (8 bits)
165 clock_r => serdes_core_clk156_out,
-- reconstructed clock from SERDES
166 SD_Data_i => RXDATA
(i
),
-- return data from SERDES 64
167 SD_Kb_i => RXCHARISK
(i
) -- return control K associated to SD_Data_i (8 bits)
169 serdes_status(i)(0) <= PCS_lock(i);
170 serdes_status(i)(1) <= gtx_rxresetdone(i);
172 sys_reset_bar <= not(sys_reset);
173 g_XGMII_serdes: if (N_SFP = 1) generate
174 XGMII_serdes: ten_gig_eth_pcs_pma_0_example_design
176 refclk_p => gtx_refclk_p,
177 refclk_n => gtx_refclk_n,
178 dclk => serdes_core_clk156_out,
--clk_156_service,
179 core_clk156_out => serdes_core_clk156_out,
181 sim_speedup_control => '0',
182 xgmii_txd => TXDATA
(0),
183 xgmii_txc => TXCHARISK
(0),
184 xgmii_rxd => RXDATA
(0),
185 xgmii_rxc => RXCHARISK
(0),
186 xgmii_rx_clk => rxusrclk_o,
193 global_tx_disable => '0',
196 test_patt_a_b =>
(others => '0'
),
197 data_patt_sel => '0',
198 test_patt_sel => '0',
199 rx_test_patt_en => '0',
200 tx_test_patt_en => '0',
203 set_pma_link_status => '0',
204 set_pcs_link_status => '0',
205 clear_pcs_status2 => '0',
206 clear_test_patt_err_count => '0',
208 pma_link_status =>
open,
210 pcs_rx_link_status =>
open,
211 pcs_rx_locked =>
open,
213 teng_pcs_rx_link_status =>
open,
214 pcs_err_block_count =>
open,
215 pcs_ber_count =>
open,
216 pcs_rx_hiber_lh =>
open,
217 pcs_rx_locked_ll =>
open,
218 pcs_test_patt_err_count =>
open,
219 core_status
(0) => PCS_lock
(0),
-- goes to 1 when PCS
block lock aquired
220 core_status
(7 downto 1) =>
open,
221 resetdone => gtx_rxresetdone
(0),
222 signal_detect => '1',