1 -------------------------------------------------------------------------------
6 -------------------------------------------------------------------------------
9 use ieee.std_logic_1164.
all;
10 use ieee.std_logic_misc.
all;
24 direction : ;
-- on CMX some GTX connected to SFP are TX some are
25 -- RX but never both; controls power state
26 -- and clock source; 1=TX, 0=RX
28 --instantiated and output clocks provided
29 --if '0' then the outside clock will be used
35 local_pll_lock_out :
out ;
39 local_gtx_reset_diag :
out ;
40 local_mmcm_reset_diag :
out ;
85 --signal local_mmcm_reset_undelayed : std_logic;
88 --signal local_gtx_reset_undelayed: std_logic;
99 ------------------------ Loopback and Powerdown Ports ----------------------
102 ------------------- Receive Ports - RX Data Path interface -----------------
107 ------------------ Transmit Ports - TX Data Path interface -----------------
113 --------------- Transmit Ports - TX Driver and OOB signalling --------------
122 signal GTXTEST : (12 downto 0);
--nominal: "1000000000000"
129 -- RX Datapath signals
133 -- TX Datapath signals
139 -- ground and tied_to_vcc_i signals
149 component sfp_clk_manager
156 -- Status and control signals
166 --double reset procedure ug366 v2.6 p137
171 --double_reset_counter_next<=double_reset_counter+1 when double_reset_counter/=to_unsigned(2047,11) else to_unsigned(2047,11);
175 -- if rising_edge(MGTREFCLK) then
176 -- if PLLLKDET_rr/='1' then
177 -- double_reset_counter<=to_unsigned(0,11);
178 -- GTXTEST_DOUBLE_RESET_BIT<='0';
182 -- double_reset_counter<=double_reset_counter_next;
184 -- if (double_reset_counter>to_unsigned(1050,11) and double_reset_counter<=to_unsigned(1350,11))
185 -- or (double_reset_counter>to_unsigned(1650,11) and double_reset_counter<=to_unsigned(1950,11)) then
186 -- GTXTEST_DOUBLE_RESET_BIT<='1';
188 -- GTXTEST_DOUBLE_RESET_BIT<='0';
191 -- if double_reset_counter=to_unsigned(1954,11) then
198 -- PLLLKDET_rr<=PLLLKDET_r;
199 -- PLLLKDET_r<=PLLLKDET;
208 local_gtx_reset_diag<=local_gtx_reset;
209 local_gtx_reset<=gtx_reset;
210 local_mmcm_reset_diag<=local_mmcm_reset;
228 local_mmcm_reset<=not PLLLKDET;
230 gen_connect_mmcm_reset_TX: if direction='1' generate
234 end generate gen_connect_mmcm_reset_TX;
235 gen_connect_mmcm_reset_RX: if direction='0' generate
239 end generate gen_connect_mmcm_reset_RX;
248 -- rxrecclk_bufr_i_div1 : BUFR
251 -- BUFR_DIVIDE => "1",
252 -- SIM_DEVICE => "VIRTEX6"
258 -- I => RXRECCLK_OUT,
263 -- rxrecclk_bufr_i_div3 : BUFR
266 -- BUFR_DIVIDE => "3",
267 -- SIM_DEVICE => "VIRTEX6"
273 -- I => RXRECCLK_OUT,
285 -- Status and control signals
299 end generate gen_BUFR_RX;
305 -- txoutclk_bufr_i_div1 : BUFR
308 -- BUFR_DIVIDE => "1",
309 -- SIM_DEVICE => "VIRTEX6"
315 -- I => TXOUTCLK_OUT,
319 -- txoutclk_bufr_i_div3 : BUFR
322 -- BUFR_DIVIDE => "3",
323 -- SIM_DEVICE => "VIRTEX6"
329 -- I => TXOUTCLK_OUT,
341 -- Status and control signals
350 end generate gen_BUFR_TX;
352 --process(MGTREFCLK, sys_pll_lock)
354 -- if sys_pll_lock/='1' then
355 -- local_gtx_reset_undelayed<='1';
356 -- elsif rising_edge(MGTREFCLK) then
357 -- local_gtx_reset_undelayed<='0';
362 end generate gen_clock_source;
364 local_pll_lock_out<=local_pll_lock;
367 --Delay_local_gtx_reset: entity work.Delay
369 -- del_length => 200)
371 -- undelayed_in => local_gtx_reset_undelayed,
372 -- delayed_out => local_gtx_reset,
373 -- clk => MGTREFCLK);
380 --process(MGTREFCLK, other_sfp_pll_lock)
382 -- if other_sfp_pll_lock/='1' then
383 -- local_gtx_reset_undelayed<='1';
384 -- elsif rising_edge(MGTREFCLK) then
385 -- local_gtx_reset_undelayed<='0';
393 --WTF 2050216 clk40_out<=clk40_sig;
395 end generate gen_sink_RX;
403 end generate gen_sink_TX;
405 end generate gen_clock_sink;
413 --_______________________ Simulation-Only Attributes ___________________
415 SIM_RECEIVER_DETECT_PASS =>
(TRUE
),
417 SIM_GTXRESET_SPEEDUP =>
(0),
419 SIM_TX_ELEC_IDLE_LEVEL =>
("X"
),
421 SIM_VERSION =>
("2.0"
),
422 SIM_TXREFCLK_SOURCE =>
("000"
),
423 SIM_RXREFCLK_SOURCE =>
("000"
),
426 ----------------------------TX PLL----------------------------
427 TX_CLK_SOURCE =>
("TXPLL"
),
428 TX_OVERSAMPLE_MODE =>
(FALSE
),
429 TXPLL_COM_CFG =>
(x"21680a"
),
430 TXPLL_CP_CFG =>
(x"0D"
),
431 TXPLL_DIVSEL_FB =>
(4),
432 TXPLL_DIVSEL_OUT =>
(4),
433 TXPLL_DIVSEL_REF =>
(1),
434 TXPLL_DIVSEL45_FB =>
(4),
435 TXPLL_LKDET_CFG =>
("111"
),
436 TX_CLK25_DIVIDER =>
(5),
437 TXPLL_SATA =>
("00"
),
438 TX_TDCC_CFG =>
("00"
),
439 PMA_CAS_CLK_EN =>
(FALSE
),
440 POWER_SAVE =>
("0000110000"
),
442 -------------------------TX Interface-------------------------
443 GEN_TXUSRCLK =>
(TRUE
),
444 TX_DATA_WIDTH =>
(8),
445 TX_USRCLK_CFG =>
(x"00"
),
446 TXOUTCLK_CTRL =>
("TXOUTCLKPMA_DIV1"
),
447 TXOUTCLK_DLY =>
("0000000000"
),
449 --------------TX Buffering and Phase Alignment----------------
450 TX_PMADATA_OPT =>
('0'
),
451 PMA_TX_CFG =>
(x"80082"
),
452 TX_BUFFER_USE =>
(TRUE
),
453 TX_BYTECLK_CFG =>
(x"00"
),
454 TX_EN_RATE_RESET_BUF =>
(TRUE
),
455 TX_XCLK_SEL =>
("TXOUT"
),
456 TX_DLYALIGN_CTRINC =>
("0100"
),
457 TX_DLYALIGN_LPFINC =>
("0110"
),
458 TX_DLYALIGN_MONSEL =>
("000"
),
459 TX_DLYALIGN_OVRDSETTING =>
("10000000"
),
461 -------------------------TX Gearbox---------------------------
462 GEARBOX_ENDEC =>
("000"
),
463 TXGEARBOX_USE =>
(FALSE
),
465 ----------------TX Driver and OOB Signalling------------------
466 TX_DRIVE_MODE =>
("DIRECT"
),
467 TX_IDLE_ASSERT_DELAY =>
("101"
),
468 TX_IDLE_DEASSERT_DELAY =>
("011"
),
469 TXDRIVE_LOOPBACK_HIZ =>
(FALSE
),
470 TXDRIVE_LOOPBACK_PD =>
(FALSE
),
472 --------------TX Pipe Control for PCI Express/SATA------------
473 COM_BURST_VAL =>
("1111"
),
475 ------------------TX Attributes for PCI Express---------------
476 TX_DEEMPH_0 =>
("11010"
),
477 TX_DEEMPH_1 =>
("10000"
),
478 TX_MARGIN_FULL_0 =>
("1001110"
),
479 TX_MARGIN_FULL_1 =>
("1001001"
),
480 TX_MARGIN_FULL_2 =>
("1000101"
),
481 TX_MARGIN_FULL_3 =>
("1000010"
),
482 TX_MARGIN_FULL_4 =>
("1000000"
),
483 TX_MARGIN_LOW_0 =>
("1000110"
),
484 TX_MARGIN_LOW_1 =>
("1000100"
),
485 TX_MARGIN_LOW_2 =>
("1000010"
),
486 TX_MARGIN_LOW_3 =>
("1000000"
),
487 TX_MARGIN_LOW_4 =>
("1000000"
),
489 ----------------------------RX PLL----------------------------
490 RX_OVERSAMPLE_MODE =>
(FALSE
),
491 RXPLL_COM_CFG =>
(x"21680a"
),
492 RXPLL_CP_CFG =>
(x"0D"
),
493 RXPLL_DIVSEL_FB =>
(4),
494 RXPLL_DIVSEL_OUT =>
(4),
495 RXPLL_DIVSEL_REF =>
(1),
496 RXPLL_DIVSEL45_FB =>
(4),
497 RXPLL_LKDET_CFG =>
("111"
),
498 RX_CLK25_DIVIDER =>
(5),
500 -------------------------RX Interface-------------------------
501 GEN_RXUSRCLK =>
(TRUE
),
502 RX_DATA_WIDTH =>
(8),
503 RXRECCLK_CTRL =>
("RXRECCLKPMA_DIV1"
),
504 RXRECCLK_DLY =>
("0000000000"
),
505 RXUSRCLK_DLY =>
(x"0000"
),
507 ----------RX Driver,OOB signalling,Coupling and Eq.,CDR-------
508 AC_CAP_DIS =>
(FALSE
),
509 CDR_PH_ADJ_TIME =>
("10100"
),
510 OOBDETECT_THRESHOLD =>
("011"
),
511 PMA_CDR_SCAN =>
(x"640404C"
),
512 PMA_RX_CFG =>
(x"05ce008"
),
513 RCV_TERM_GND =>
(FALSE
),
514 RCV_TERM_VTTRX =>
(TRUE
),
515 RX_EN_IDLE_HOLD_CDR =>
(FALSE
),
516 RX_EN_IDLE_RESET_FR =>
(FALSE
),
517 RX_EN_IDLE_RESET_PH =>
(FALSE
),
518 TX_DETECT_RX_CFG =>
(x"1832"
),
519 TERMINATION_CTRL =>
("00000"
),
520 TERMINATION_OVRD =>
(FALSE
),
522 PMA_RXSYNC_CFG =>
(x"00"
),
523 PMA_CFG =>
(x"0040000040000000003"
),
524 BGTEST_CFG =>
("00"
),
525 BIAS_CFG =>
(x"00000"
),
527 --------------RX Decision Feedback Equalizer(DFE)-------------
528 DFE_CAL_TIME =>
("01100"
),
529 DFE_CFG =>
("00011011"
),
530 RX_EN_IDLE_HOLD_DFE =>
(TRUE
),
531 RX_EYE_OFFSET =>
(x"4C"
),
532 RX_EYE_SCANMODE =>
("00"
),
534 -------------------------PRBS Detection-----------------------
535 RXPRBSERR_LOOPBACK =>
('0'
),
537 ------------------Comma Detection and Alignment---------------
538 ALIGN_COMMA_WORD =>
(1),
539 COMMA_10B_ENABLE =>
("1111111111"
),
540 COMMA_DOUBLE =>
(FALSE
),
541 DEC_MCOMMA_DETECT =>
(FALSE
),
542 DEC_PCOMMA_DETECT =>
(FALSE
),
543 DEC_VALID_COMMA_ONLY =>
(FALSE
),
544 MCOMMA_10B_VALUE =>
("1010000011"
),
545 MCOMMA_DETECT =>
(TRUE
),
546 PCOMMA_10B_VALUE =>
("0101111100"
),
547 PCOMMA_DETECT =>
(TRUE
),
548 RX_DECODE_SEQ_MATCH =>
(FALSE
),
549 RX_SLIDE_AUTO_WAIT =>
(5),
550 RX_SLIDE_MODE =>
("OFF"
),
551 SHOW_REALIGN_COMMA =>
(TRUE
),
553 -----------------RX Loss-of-sync State Machine----------------
554 RX_LOS_INVALID_INCR =>
(8),
555 RX_LOS_THRESHOLD =>
(128),
556 RX_LOSS_OF_SYNC_FSM =>
(FALSE
),
558 -------------------------RX Gearbox---------------------------
559 RXGEARBOX_USE =>
(FALSE
),
561 -------------RX Elastic Buffer and Phase alignment------------
562 RX_BUFFER_USE =>
(TRUE
),
563 RX_EN_IDLE_RESET_BUF =>
(FALSE
),
564 RX_EN_MODE_RESET_BUF =>
(TRUE
),
565 RX_EN_RATE_RESET_BUF =>
(TRUE
),
566 RX_EN_REALIGN_RESET_BUF =>
(FALSE
),
567 RX_EN_REALIGN_RESET_BUF2 =>
(FALSE
),
568 RX_FIFO_ADDR_MODE =>
("FAST"
),
569 RX_IDLE_HI_CNT =>
("1000"
),
570 RX_IDLE_LO_CNT =>
("0000"
),
571 RX_XCLK_SEL =>
("RXREC"
),
572 RX_DLYALIGN_CTRINC =>
("1110"
),
573 RX_DLYALIGN_EDGESET =>
("00010"
),
574 RX_DLYALIGN_LPFINC =>
("1110"
),
575 RX_DLYALIGN_MONSEL =>
("000"
),
576 RX_DLYALIGN_OVRDSETTING =>
("10000000"
),
578 ------------------------Clock Correction----------------------
579 CLK_COR_ADJ_LEN =>
(1),
580 CLK_COR_DET_LEN =>
(1),
581 CLK_COR_INSERT_IDLE_FLAG =>
(FALSE
),
582 CLK_COR_KEEP_IDLE =>
(FALSE
),
583 CLK_COR_MAX_LAT =>
(16),
584 CLK_COR_MIN_LAT =>
(14),
585 CLK_COR_PRECEDENCE =>
(TRUE
),
586 CLK_COR_REPEAT_WAIT =>
(0),
587 CLK_COR_SEQ_1_1 =>
("0000000000"
),
588 CLK_COR_SEQ_1_2 =>
("0000000000"
),
589 CLK_COR_SEQ_1_3 =>
("0000000000"
),
590 CLK_COR_SEQ_1_4 =>
("0000000000"
),
591 CLK_COR_SEQ_1_ENABLE =>
("1111"
),
592 CLK_COR_SEQ_2_1 =>
("0000000000"
),
593 CLK_COR_SEQ_2_2 =>
("0000000000"
),
594 CLK_COR_SEQ_2_3 =>
("0000000000"
),
595 CLK_COR_SEQ_2_4 =>
("0000000000"
),
596 CLK_COR_SEQ_2_ENABLE =>
("1111"
),
597 CLK_COR_SEQ_2_USE =>
(FALSE
),
598 CLK_CORRECT_USE =>
(FALSE
),
600 ------------------------Channel Bonding----------------------
601 CHAN_BOND_1_MAX_SKEW =>
(1),
602 CHAN_BOND_2_MAX_SKEW =>
(1),
603 CHAN_BOND_KEEP_ALIGN =>
(FALSE
),
604 CHAN_BOND_SEQ_1_1 =>
("0000000000"
),
605 CHAN_BOND_SEQ_1_2 =>
("0000000000"
),
606 CHAN_BOND_SEQ_1_3 =>
("0000000000"
),
607 CHAN_BOND_SEQ_1_4 =>
("0000000000"
),
608 CHAN_BOND_SEQ_1_ENABLE =>
("1111"
),
609 CHAN_BOND_SEQ_2_1 =>
("0000000000"
),
610 CHAN_BOND_SEQ_2_2 =>
("0000000000"
),
611 CHAN_BOND_SEQ_2_3 =>
("0000000000"
),
612 CHAN_BOND_SEQ_2_4 =>
("0000000000"
),
613 CHAN_BOND_SEQ_2_CFG =>
("00000"
),
614 CHAN_BOND_SEQ_2_ENABLE =>
("1111"
),
615 CHAN_BOND_SEQ_2_USE =>
(FALSE
),
616 CHAN_BOND_SEQ_LEN =>
(1),
617 PCI_EXPRESS_MODE =>
(FALSE
),
619 -------------RX Attributes for PCI Express/SATA/SAS----------
620 SAS_MAX_COMSAS =>
(52),
621 SAS_MIN_COMSAS =>
(40),
622 SATA_BURST_VAL =>
("100"
),
623 SATA_IDLE_VAL =>
("100"
),
624 SATA_MAX_BURST =>
(9),
625 SATA_MAX_INIT =>
(26),
626 SATA_MAX_WAKE =>
(9),
627 SATA_MIN_BURST =>
(5),
628 SATA_MIN_INIT =>
(14),
629 SATA_MIN_WAKE =>
(5),
630 TRANS_TIME_FROM_P2 =>
(x"03c"
),
631 TRANS_TIME_NON_P2 =>
(x"19"
),
632 TRANS_TIME_RATE =>
(x"ff"
),
633 TRANS_TIME_TO_P2 =>
(x"064"
)
639 ------------------------ Loopback and Powerdown Ports ----------------------
643 -------------- Receive Ports - 64b66b and 64b67b Gearbox Ports -------------
647 RXHEADERVALID =>
open,
648 RXSTARTOFSEQ =>
open,
649 ----------------------- Receive Ports - 8b10b Decoder ----------------------
650 RXCHARISCOMMA =>
open,
654 RXNOTINTABLE =>
open,
657 ------------------- Receive Ports - Channel Bonding Ports ------------------
658 RXCHANBONDSEQ =>
open,
665 ------------------- Receive Ports - Clock Correction Ports -----------------
667 --------------- Receive Ports - Comma Detection and Alignment --------------
668 RXBYTEISALIGNED =>
open,
669 RXBYTEREALIGN =>
open,
675 ----------------------- Receive Ports - PRBS Detection ---------------------
679 ------------------- Receive Ports - RX Data Path interface -----------------
686 ------------ Receive Ports - RX Decision Feedback Equalizer(DFE) -----------
701 ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------
710 -------- Receive Ports - RX Elastic Buffer and Phase Alignment Ports -------
713 RXCHANISALIGNED =>
open,
714 RXCHANREALIGN =>
open,
717 RXDLYALIGNMONITOR =>
open,
725 --------------- Receive Ports - RX Loss-of-sync State Machine --------------
726 RXLOSSOFSYNC =>
open,
727 ---------------------- Receive Ports - RX Oversampling ---------------------
729 RXOVERSAMPLEERR =>
open,
730 ------------------------ Receive Ports - RX PLL Ports ----------------------
745 -------------- Receive Ports - RX Pipe Control for PCI Express -------------
748 ----------------- Receive Ports - RX Polarity Control Ports ----------------
750 --------------------- Receive Ports - RX Ports for SATA --------------------
754 ------------- Shared Ports - Dynamic Reconfiguration Port (DRP) ------------
762 -------------- Transmit Ports - 64b66b and 64b67b Gearbox Ports ------------
763 TXGEARBOXREADY =>
open,
767 ---------------- Transmit Ports - 8b10b Encoder Control Ports --------------
775 ------------------------- Transmit Ports - GTX Ports -----------------------
777 MGTREFCLKFAB =>
open,
780 TSTIN => "
11111111111111111111" ,
782 ------------------ Transmit Ports - TX Data Path interface -----------------
789 ---------------- Transmit Ports - TX Driver and OOB signaling --------------
790 TXBUFDIFFCTRL => "
100",
796 --------------- Transmit Ports - TX Driver and OOB signalling --------------
798 ----------- Transmit Ports - TX Elastic Buffer and Phase Alignment ---------
800 -------- Transmit Ports - TX Elastic Buffer and Phase Alignment Ports ------
803 TXDLYALIGNMONITOR =>
open,
809 ----------------------- Transmit Ports - TX PLL Ports ----------------------
824 --------------------- Transmit Ports - TX PRBS Generator -------------------
827 -------------------- Transmit Ports - TX Polarity Control ------------------
829 ----------------- Transmit Ports - TX Ports for PCI Express ----------------
836 --------------------- Transmit Ports - TX Ports for SATA -------------------
std_logic_vector (12 downto 0) GTXTEST
std_logic rxrec_pll_locked
std_logic_vector (31 downto 0) rxdata_i
std_logic_vector (1 downto 0) TXPOWERDOWN_IN
out DFETAP2MONITORstd_logic_vector (4 downto 0)
std_logic_vector (31 downto 0) txdata_i
sfp_clk_manager rxrecclk_irxrecclk_i
in DFETAP4std_logic_vector (3 downto 0)
unsigned (10 downto 0) double_reset_counter_next
in TXDIFFCTRL_INstd_logic_vector (3 downto 0)
std_logic TXRESETDONE_OUT
in TXPREEMPHASIS_INstd_logic_vector (3 downto 0)
out DFECLKDLYADJMONstd_logic_vector (5 downto 0)
std_logic txrec_pll_locked
out GTXTEST_diagstd_logic
unsigned (10 downto 0) double_reset_counter
in DFETAP3std_logic_vector (3 downto 0)
out DFEEYEDACMONstd_logic_vector (4 downto 0)
in DFECLKDLYADJstd_logic_vector (5 downto 0)
in TXPOSTEMPHASIS_INstd_logic_vector (4 downto 0)
std_logic tied_to_ground_i
std_logic_vector (1 downto 0) MGTREFCLK_IN
sfp_clk_manager txrecclk_itxrecclk_i
out DFETAP3MONITORstd_logic_vector (3 downto 0)
out GTX_RX_READY_OUTstd_logic
in DFETAP1std_logic_vector (4 downto 0)
out DFETAP4MONITORstd_logic_vector (3 downto 0)
std_logic_vector (7 downto 0) TXDATA_IN
std_logic GTXTEST_DOUBLE_RESET_BIT
in RXEQMIX_INstd_logic_vector (2 downto 0)
std_logic RXRESETDONE_OUT
in indatastd_logic_vector (7 downto 0)
out odatastd_logic_vector (7 downto 0)
out GTX_TX_READY_OUTstd_logic
std_logic_vector (63 downto 0) tied_to_ground_vec_i
out DFETAP1MONITORstd_logic_vector (4 downto 0)
in DFETAP2std_logic_vector (4 downto 0)
std_logic_vector (7 downto 0) RXDATA_OUT
out PLLLKDET_diagstd_logic
std_logic local_gtx_reset
out DFESENSCALstd_logic_vector (2 downto 0)
std_logic_vector (1 downto 0) RXPOWERDOWN_IN
std_logic local_mmcm_reset