12 use IEEE.STD_LOGIC_1164.
all;
13 use IEEE.NUMERIC_STD.
all;
15 use ipbus_lib.ipbus.
all;
16 library infrastructure_lib;
17 use infrastructure_lib.all;
25 NProcessorFPGA : positive := 4
40 Q_CLK_GTREFCLK_PAD_P_IN : in std_logic_vector(2 downto 0);
42 RXN_IN : in std_logic_vector(11 downto 0);
43 RXP_IN : in std_logic_vector(11 downto 0);
45 TXN_OUT : out std_logic_vector(11 downto 0);
46 TXP_OUT : out std_logic_vector(11 downto 0);
92 signal probe0 : std_logic_vector(67 downto 0);
93 signal gt_rxpd : mgt_rxpd_array(2 downto 0);
94 signal gt_txpd : mgt_txpd_array(2 downto 0);
95 signal mgt_DATA_VALID_IN : std_logic_vector(5 downto 0);
96 signal MGT_RXN_in, MGT_RXP_in : mgt_rx_array(2 downto 0);
97 signal MGT_TXN_in, MGT_TXP_in : mgt_tx_array(2 downto 0);
98 signal mgt_TXUSRCLK_OUT, mgt_RXUSRCLK_OUT, mgt_tx_fsm_resetdone, mgt_rx_fsm_resetdone, MGT_Commadet_int : std_logic_vector(11 downto 0);
99 signal mgt_QPLLREFCLKLOST_OUT_i, mgt_QPLLLOCK_OUT_i : std_logic_vector(1 downto 0);
100 signal rxdata_quad_array : mgt_rxdata_array (2 downto 0);
101 signal mgt_txdata : mgt_txdata_array(2 downto 0);
102 signal mgt_loopback_reg : std_logic_vector (14 downto 0);
103 signal mgt_txbufstatus : mgt_txbufstatus_array(2 downto 0);
104 signal mgt_rxcommadet : mgt_rxcommadet_array (2 downto 0);
105 signal mgt_rxbyterealign : mgt_rxbyterealign_array(2 downto 0);
106 signal mgt_rx_resetdone : mgt_rxresetdone_array (2 downto 0);
107 signal mgt_rxbyteisaligned : mgt_rxbyteisaligned_array (2 downto 0);
108 signal mgt_tx_resetdone : mgt_txresetdone_array (2 downto 0);
109 signal mgt_txcharisk : mgt_txcharisk_array (2 downto 0);
110 signal mgt_loopback_in : mgt_loopback_array (2 downto 0);
111 signal mgt_rxchariscomma : mgt_rxchariskcomm_array(2 downto 0);
112 signal mgt_rxcharisk : mgt_rxcharisk_array(2 downto 0);
113 signal mgt_rxdisperr : mgt_rxdisperr_array(11 downto 0);
114 signal mgt_rxnotintable : mgt_rxnotintable_array(11 downto 0);
115 signal rxbyteisaligned : std_logic_vector(11 downto 0);
116 signal mgt_rxcharisk_reg, txcharisk : std_logic_vector(47 downto 0);
117 signal reset : std_logic;
118 signal rx_resetdone_i : std_logic_vector(11 downto 0);
119 signal rx_disperr_i, encode_error_i : std_logic_vector (47 downto 0);
120 signal gt0_cpllfbclklost_out, gt0_cplllock_out : std_logic_vector(0 downto 0);
121 signal gt1_cpllfbclklost_out, gt1_cplllock_out : std_logic_vector(0 downto 0);
122 signal gt2_cpllfbclklost_out, gt2_cplllock_out : std_logic_vector(0 downto 0);
123 signal gt3_cpllfbclklost_out, gt3_cplllock_out : std_logic_vector(0 downto 0);
143 rx_pwr_on_gen : for i in 0 to 2
148 gt_rxpd(i).gt0_rxpd <= "00";
149 gt_rxpd(i).gt1_rxpd <= "00";
150 gt_rxpd(i).gt2_rxpd <= "00";
151 gt_rxpd(i).gt3_rxpd <= "00";
152 gt_txpd(i).gt0_txpd <= "11";
153 gt_txpd(i).gt1_txpd <= "11";
154 gt_txpd(i).gt2_txpd <= "11";
155 gt_txpd(i).gt3_txpd <= "11";
173 rx_clk160 <= mgt_RXUSRCLK_OUT(11 downto 8);
174 rx_clk280 <= mgt_RXUSRCLK_OUT(7 downto 0);
177 Processor_1_TOB :
process(mgt_RXUSRCLK_OUT(
0))
179 if rising_edge(mgt_RXUSRCLK_OUT(0)) then
182 if (mgt_rxdisperr(0).gt0_rxdisperr = "0000") and (mgt_rxnotintable(0).gt0_rxnotintable = "0000") then
188 end process Processor_1_TOB;
190 Processor_1_Raw :
process(mgt_RXUSRCLK_OUT(
1))
192 if rising_edge(mgt_RXUSRCLK_OUT(1)) then
195 if (mgt_rxdisperr(0).gt1_rxdisperr = "0000") and (mgt_rxnotintable(0).gt1_rxnotintable = "0000") then
201 end process Processor_1_Raw;
203 Processor_2_TOB :
process(mgt_RXUSRCLK_OUT(
2))
205 if rising_edge(mgt_RXUSRCLK_OUT(2)) then
208 if (mgt_rxdisperr(0).gt2_rxdisperr = "0000") and (mgt_rxnotintable(0).gt2_rxnotintable = "0000") then
214 end process Processor_2_TOB;
216 Processor_2_Raw :
process(mgt_RXUSRCLK_OUT(
3))
218 if rising_edge(mgt_RXUSRCLK_OUT(3)) then
221 if (mgt_rxdisperr(0).gt3_rxdisperr = "0000") and (mgt_rxnotintable(0).gt3_rxnotintable = "0000") then
227 end process Processor_2_Raw;
230 Processor_3_TOB :
process(mgt_RXUSRCLK_OUT(
4))
232 if rising_edge(mgt_RXUSRCLK_OUT(4)) then
235 if (mgt_rxdisperr(1).gt0_rxdisperr = "0000") and (mgt_rxnotintable(1).gt0_rxnotintable = "0000") then
241 end process Processor_3_TOB;
243 Processor_3_Raw :
process(mgt_RXUSRCLK_OUT(
5))
245 if rising_edge(mgt_RXUSRCLK_OUT(5)) then
248 if (mgt_rxdisperr(1).gt1_rxdisperr = "0000") and (mgt_rxnotintable(1).gt1_rxnotintable = "0000") then
254 end process Processor_3_Raw;
257 Processor_4_TOB :
process(mgt_RXUSRCLK_OUT(
6))
259 if rising_edge(mgt_RXUSRCLK_OUT(6)) then
262 if (mgt_rxdisperr(1).gt2_rxdisperr = "0000") and (mgt_rxnotintable(1).gt2_rxnotintable = "0000") then
268 end process Processor_4_TOB;
270 Processor_4_Raw :
process(mgt_RXUSRCLK_OUT(
7))
272 if rising_edge(mgt_RXUSRCLK_OUT(7)) then
275 if (mgt_rxdisperr(1).gt3_rxdisperr = "0000") and (mgt_rxnotintable(1).gt3_rxnotintable = "0000") then
281 end process Processor_4_Raw;
295 generic map (num_quad_tx_rx =>
1)
300 MGT_CLK_GTREFCLK_PAD_P_IN => Q_CLK_GTREFCLK_PAD_P_IN
(2 downto 2),
301 mgt_TXUSRCLK_OUT => mgt_TXUSRCLK_OUT
(11 downto 8),
302 mgt_RXUSRCLK_OUT => mgt_RXUSRCLK_OUT
(11 downto 8),
306 RXN_IN => MGT_RXN_IN
(2 downto 2),
307 RXP_IN => MGT_RXP_IN
(2 downto 2),
308 TXN_IN => MGT_TXN_IN
(2 downto 2),
309 TXP_IN => MGT_TXP_IN
(2 downto 2),
310 rxdata_quad_array => rxdata_quad_array
(2 downto 2),
311 txdata_quad_array => mgt_txdata
(2 downto 2),
313 gt_rxpd_array => gt_rxpd
(2 downto 2),
314 gt_txpd_array => gt_txpd
(2 downto 2),
315 mgt_TX_FSM_RESET_DONE => mgt_tx_fsm_resetdone
(11 downto 8),
316 mgt_RX_FSM_RESET_DONE => mgt_rx_fsm_resetdone
(11 downto 8),
317 rxbyteisaligned_quad_array => mgt_rxbyteisaligned
(2 downto 2),
318 rxresetdone_quad_array => mgt_rx_resetdone
(2 downto 2),
319 txresetdone_quad_array => mgt_tx_resetdone
(2 downto 2),
320 loopback_quad_array => mgt_loopback_in
(2 downto 2),
321 rxchariscomma_quad_array => mgt_rxchariscomma
(2 downto 2),
322 rxcharisk_quad_array => mgt_rxcharisk
(2 downto 2),
323 txcharisk_quad_array => mgt_txcharisk
(2 downto 2),
324 txbufstatus_quad_array => mgt_txbufstatus
(2 downto 2),
325 rxbyterealign_quad_array => mgt_rxbyterealign
(2 downto 2),
326 rxcommadet_quad_array => mgt_rxcommadet
(2 downto 2),
327 rxdisperr_quad_array => mgt_rxdisperr
(2 downto 2),
328 rxnotintable_quad_array => mgt_rxnotintable
(2 downto 2),
331 gt0_cpllfbclklost_out => gt0_cpllfbclklost_out
(0 downto 0),
332 gt0_cplllock_out => gt0_cplllock_out
(0 downto 0),
333 gt1_cpllfbclklost_out => gt1_cpllfbclklost_out
(0 downto 0),
334 gt1_cplllock_out => gt1_cplllock_out
(0 downto 0),
335 gt2_cpllfbclklost_out => gt2_cpllfbclklost_out
(0 downto 0),
336 gt2_cplllock_out => gt2_cplllock_out
(0 downto 0),
337 gt3_cpllfbclklost_out => gt3_cpllfbclklost_out
(0 downto 0),
338 gt3_cplllock_out => gt3_cplllock_out
(0 downto 0)
347 generic map(num_quad_tx_rx =>
2)
352 MGT_CLK_GTREFCLK_PAD_P_IN => Q_CLK_GTREFCLK_PAD_P_IN
(1 downto 0),
353 mgt_TXUSRCLK_OUT => mgt_TXUSRCLK_OUT
(7 downto 0),
354 mgt_RXUSRCLK_OUT => mgt_RXUSRCLK_OUT
(7 downto 0),
358 RXN_IN => MGT_RXN_IN
(1 downto 0),
359 RXP_IN => MGT_RXP_IN
(1 downto 0),
360 TXN_IN => MGT_TXN_IN
(1 downto 0),
361 TXP_IN => MGT_TXP_IN
(1 downto 0),
362 rxdata_quad_array => rxdata_quad_array
(1 downto 0),
363 txdata_quad_array => mgt_txdata
(1 downto 0),
365 mgt_DATA_VALID_IN => "
11111111",
366 gt_rxpd_array => gt_rxpd
(1 downto 0),
367 gt_txpd_array => gt_txpd
(1 downto 0),
368 mgt_TX_FSM_RESET_DONE => mgt_tx_fsm_resetdone
(7 downto 0),
369 mgt_RX_FSM_RESET_DONE => mgt_rx_fsm_resetdone
(7 downto 0),
370 rxbyteisaligned_quad_array => mgt_rxbyteisaligned
(1 downto 0),
371 rxresetdone_quad_array => mgt_rx_resetdone
(1 downto 0),
372 txresetdone_quad_array => mgt_tx_resetdone
(1 downto 0),
374 rxchariscomma_quad_array => mgt_rxchariscomma
(1 downto 0),
375 rxcharisk_quad_array => mgt_rxcharisk
(1 downto 0),
376 txcharisk_quad_array => mgt_txcharisk
(1 downto 0),
377 txbufstatus_quad_array => mgt_txbufstatus
(1 downto 0),
378 rxbyterealign_quad_array => mgt_rxbyterealign
(1 downto 0),
379 rxcommadet_quad_array => mgt_rxcommadet
(1 downto 0),
380 rxdisperr_quad_array => mgt_rxdisperr
(1 downto 0),
381 rxnotintable_quad_array => mgt_rxnotintable
(1 downto 0),
382 mgt_QPLLREFCLKLOST_OUT => mgt_QPLLREFCLKLOST_OUT_i
(1 downto 0),
383 mgt_QPLLLOCK_OUT => mgt_QPLLLOCK_OUT_i
(1 downto 0)
389 mgt_gen : for i in 0 to 2
393 MGT_Commadet_int(i+3*i downto i+3*i) <= mgt_rxchariscomma(i).gt0_rxchariscomma_out(0 downto 0);
394 MGT_Commadet_int(i+1+3*i downto i+1+3*i) <= mgt_rxchariscomma(i).gt1_rxchariscomma_out(0 downto 0);
395 MGT_Commadet_int(i+2+3*i downto i+2+3*i) <= mgt_rxchariscomma(i).gt2_rxchariscomma_out(0 downto 0);
396 MGT_Commadet_int(i+3+3*i downto i+3+3*i) <= mgt_rxchariscomma(i).gt3_rxchariscomma_out(0 downto 0);
398 rx_realign (i+3*i) <= mgt_rxbyterealign(i).gt0_rxbyterealign;
399 rx_realign(i+1+3*i) <= mgt_rxbyterealign(i).gt1_rxbyterealign;
400 rx_realign(i+2+3*i) <= mgt_rxbyterealign(i).gt2_rxbyterealign;
401 rx_realign(i+3+3*i) <= mgt_rxbyterealign(i).gt3_rxbyterealign;
403 rx_resetdone_i (i+3*i) <= mgt_rx_resetdone(i).gt0_rxresetdone;
404 rx_resetdone_i(i+1+3*i) <= mgt_rx_resetdone(i).gt1_rxresetdone;
405 rx_resetdone_i(i+2+3*i) <= mgt_rx_resetdone(i).gt2_rxresetdone;
406 rx_resetdone_i(i+3+3*i) <= mgt_rx_resetdone(i).gt3_rxresetdone;
408 tx_resetdone (i+3*i) <= mgt_tx_resetdone(i).gt0_txresetdone;
409 tx_resetdone(i+1+3*i) <= mgt_tx_resetdone(i).gt1_txresetdone;
410 tx_resetdone(i+2+3*i) <= mgt_tx_resetdone(i).gt2_txresetdone;
411 tx_resetdone(i+3+3*i) <= mgt_tx_resetdone(i).gt3_txresetdone;
417 rxbyteisaligned (i+3*i) <= mgt_rxbyteisaligned(i).gt0_rxbyteisaligned;
418 rxbyteisaligned(i+1+3*i) <= mgt_rxbyteisaligned(i).gt1_rxbyteisaligned;
419 rxbyteisaligned(i+2+3*i) <= mgt_rxbyteisaligned(i).gt2_rxbyteisaligned;
420 rxbyteisaligned(i+3+3*i) <= mgt_rxbyteisaligned(i).gt3_rxbyteisaligned;
422 mgt_rxcharisk_reg(i+3+15*i downto i+15*i) <= mgt_rxcharisk(i).gt0_rxcharisk_out;
423 mgt_rxcharisk_reg(i+7+15*i downto i+4+15*i) <= mgt_rxcharisk(i).gt1_rxcharisk_out;
424 mgt_rxcharisk_reg(i+11+15*i downto i+8+15*i) <= mgt_rxcharisk(i).gt2_rxcharisk_out;
425 mgt_rxcharisk_reg(i+15+15*i downto i+12+15*i) <= mgt_rxcharisk(i).gt3_rxcharisk_out;
428 rx_disperr_i(i+3+15*i downto i+15*i) <= mgt_rxdisperr(i).gt0_rxdisperr;
429 rx_disperr_i(i+7+15*i downto i+4+15*i) <= mgt_rxdisperr(i).gt1_rxdisperr;
430 rx_disperr_i(i+11+15*i downto i+8+15*i) <= mgt_rxdisperr(i).gt2_rxdisperr;
431 rx_disperr_i(i+15+15*i downto i+12+15*i) <= mgt_rxdisperr(i).gt3_rxdisperr;
433 encode_error_i(i+3+15*i downto i+15*i) <= mgt_rxnotintable(i).gt0_rxnotintable;
434 encode_error_i(i+7+15*i downto i+4+15*i) <= mgt_rxnotintable(i).gt1_rxnotintable;
435 encode_error_i(i+11+15*i downto i+8+15*i) <= mgt_rxnotintable(i).gt2_rxnotintable;
436 encode_error_i(i+15+15*i downto i+12+15*i) <= mgt_rxnotintable(i).gt3_rxnotintable;
439 MGT_RXP_IN(i).RXP_IN <= RXP_IN(i+3+3*i downto i+3*i);
443 TXP_OUT(i+3+3*i downto i+3*i) <= MGT_TXP_IN(i).TXP_OUT;
446 end generate mgt_gen;
out hub1_rx_data std_logic_vector( 31 downto 0)
rx data from ttc information gt0
out rx_resetdone std_logic_vector( 11 downto 0)
rx reset done of the all of the MGTs
in clk40 std_logic
clk40 generatred from ttc clock
out rx_disperr std_logic_vector( 47 downto 0)
rx_disperr of the all of the MGTs
out rx_clk160 std_logic_vector( 3 downto 0)
rx clock 160MHz
out tx_fsm_resetdone std_logic_vector( 11 downto 0)
tx fsm reset done of the all of the MGTs
out error_from_mgt_bus std_logic_vector( NProcessorFPGA* 2- 1 downto 0)
error from the MGT links of 11.2Gbps
out rx_fsm_resetdone std_logic_vector( 11 downto 0)
rx fsm reset done of the all of the MGTs
out char_is_k_bus std_logic_vector( NProcessorFPGA* 2- 1 downto 0)
k char from process fpgas
out encode_error std_logic_vector( 47 downto 0)
encode_error of the all of the MGTs
out mgt_QPLLLOCK_OUT std_logic_vector( 2 downto 0)
mgt_QPLLLOCK_OUT
out mgt_QPLLREFCLKLOST_OUT std_logic_vector( 2 downto 0)
mgt_QPLLREFCLKLOST_OUT
out hub2_rx_data std_logic_vector( 31 downto 0)
rx data from gt1
in clk160 std_logic
clk160 generatred from ttc clock
out tx_resetdone std_logic_vector( 11 downto 0)
tx reset done of the all of the MGTs
in loopback std_logic_vector( 5 downto 0)
loopback
in mgt_SOFT_RESET_TX_IN std_logic_vector( 2 downto 0)
soft reset of tx quad
in Q_CLK_GTREFCLK_PAD_N_IN std_logic_vector( 2 downto 0)
clock input to the quad
in RXN_IN std_logic_vector( 11 downto 0)
rx quad input
in mgt_SOFT_RESET_RX_IN std_logic_vector( 2 downto 0)
soft reset of rx quad
out rx_realign std_logic_vector( 11 downto 0)
rx_realign of the all of the MGTs
out data_from_mgt_bus mgt_data_array( NProcessorFPGA* 2- 1 downto 0)
rx data from process fpgas
out rx_clk280 std_logic_vector( 7 downto 0)
rx clock 280MHz
out TXN_OUT std_logic_vector( 11 downto 0)
tx quad input
out tx_bufstatus std_logic_vector( 23 downto 0)
tx_bufstatus of the all of the MGTs
out mgt_commadret std_logic_vector( 1 downto 0)
mgt_commadret
out rx_byteisaligned std_logic_vector( 11 downto 0)
rx_byteisaligned of the all of the MGTs