1 ------------------------------------------------------------------------------- 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2012-12-17 5 -- Last update: 2016-10-27 6 ------------------------------------------------------------------------------- 7 -- Description: Wrapper for Xilinx 7-series GTX primitive 8 ------------------------------------------------------------------------------- 9 -- This file is part of 'SLAC Firmware Standard Library'. 10 -- It is subject to the license terms in the LICENSE.txt file found in the 11 -- top-level directory of this distribution and at: 12 -- https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. 13 -- No part of 'SLAC Firmware Standard Library', including this file, 14 -- may be copied, modified, propagated, or distributed except according to 15 -- the terms contained in the LICENSE.txt file. 16 ------------------------------------------------------------------------------- 19 use ieee.std_logic_1164.
all;
20 use ieee.math_real.
all;
25 use UNISIM.VCOMPONENTS.
all;
28 --! @ingroup xilinx_7Series_gtx7 53 PMA_RSV_G : := X"00018480";
-- Use X"00018480" when RXPLL=CPLL 54 -- Use X"001E7080" when RXPLL=QPLL and QPLL > 6.6GHz 59 -- Configure PLL sources 63 -- Configure Data widths 72 -- Configure Buffer usage 83 RX_DDIEN_G : sl := '0';
-- Supposed to be '1' when bypassing rx buffer 86 -- Configure RX comma alignment 100 -- Fixed Latency comma alignment (If RX_ALIGN_MODE_G = "FIXED_LAT") 107 -- Configure RX 8B10B decoding (If RX_8B10B_EN_G = true) 113 -- Configure Clock Correction 134 -- Configure Channel Bonding 155 -- RX Equalizer Attributes-------------------------- 176 -- reference clock to check if recovered clock is stable 184 -- Rx Clock related signals 192 -- Rx User Reset Signals 196 -- Manual Comma Align signals 200 -- Rx Data and decode signals 208 -- Rx Channel Bonding 213 -- Tx Clock Related Signals 221 -- Tx User Reset signals 237 -- DRP Interface (drpClk Domain) 250 function getOutClkSelVal (OUT_CLK_SRC : )
return is 252 if (OUT_CLK_SRC = "PLLREFCLK") then 254 elsif (OUT_CLK_SRC = "OUTCLKPMA") then 256 elsif (OUT_CLK_SRC = "PLLDV2CLK") then 261 end function getOutClkSelVal;
263 function getDataWidth (USE_8B10B : ; EXT_DATA_WIDTH : )
return is 265 if (USE_8B10B = false) then 266 return EXT_DATA_WIDTH;
268 return (EXT_DATA_WIDTH / 8) * 10;
272 -------------------------------------------------------------------------------------------------- 274 -------------------------------------------------------------------------------------------------- 275 constant RX_SYSCLK_SEL_C : slv := ite(RX_PLL_G = "CPLL", "00", "11");
276 constant TX_SYSCLK_SEL_C : slv := ite(TX_PLL_G = "CPLL", "00", "11");
278 constant RX_XCLK_SEL_C : := ite(RX_BUF_EN_G, "RXREC", "RXUSR");
279 constant TX_XCLK_SEL_C : := ite(TX_BUF_EN_G, "TXOUT", "TXUSR");
294 -------------------------------------------------------------------------------------------------- 296 -------------------------------------------------------------------------------------------------- 299 signal cPllLock : sl;
300 signal cPllReset : sl;
301 signal cPllRefClkLost : sl;
303 -- Gtx CPLL Input Clocks 304 signal gtGRefClk : sl;
305 signal gtNorthRefClk0 : sl;
306 signal gtNorthRefClk1 : sl;
307 signal gtRefClk0 : sl;
308 signal gtRefClk1 : sl;
309 signal gtSouthRefClk0 : sl;
310 signal gtSouthRefClk1 : sl;
312 ---------------------------- 314 signal rxOutClk : sl;
315 signal rxOutClkBufg : sl;
317 signal rxPllLock : sl;
318 signal rxPllReset : sl;
319 signal rxPllRefClkLost : sl;
321 signal gtRxReset : sl;
-- GT GTRXRESET 322 signal rxResetDone : sl;
-- GT RXRESETDONE 323 signal rxUserRdyInt : sl;
-- GT RXUSERRDY 325 signal rxUserResetInt : sl;
326 signal rxFsmResetDone : sl;
327 signal rxRstTxUserRdy : sl;
-- 329 signal rxRecClkStable : sl;
330 signal rxRecClkMonitorRestart : sl;
331 signal rxCdrLockCnt : range 0 to WAIT_TIME_CDRLOCK_C := 0;
333 signal rxRunPhAlignment : sl;
334 signal rxPhaseAlignmentDone : sl;
335 signal rxAlignReset : sl := '0';
336 signal rxDlySReset : sl;
-- GT RXDLYSRESET 337 signal rxDlySResetDone : sl;
-- GT RXDLYSRESETDONE 338 signal rxPhAlignDone : sl;
-- GT RXPHALIGNDONE 339 signal rxSlide : sl;
-- GT RXSLIDE 340 signal rxCdrLock : sl;
-- GT RXCDRLOCK 342 signal rxDfeAgcHold : sl;
343 signal rxDfeLfHold : sl;
344 signal rxLpmLfHold : sl;
345 signal rxLpmHfHold : sl;
349 signal rxDataFull : slv(63 downto 0);
-- GT RXDATA 350 signal rxCharIsKFull : slv(7 downto 0);
-- GT RXCHARISK 351 signal rxDispErrFull : slv(7 downto 0);
-- GT RXDISPERR 352 signal rxDecErrFull : slv(7 downto 0);
355 ---------------------------- 357 signal txPllLock : sl;
358 signal txPllReset : sl;
359 signal txPllRefClkLost : sl;
361 signal gtTxReset : sl;
-- GT GTTXRESET 362 signal txResetDone : sl;
-- GT TXRESETDONE 363 signal txUserRdyInt : sl;
-- GT TXUSERRDY 365 signal txFsmResetDone : sl;
367 signal txResetPhAlignment : sl;
368 signal txRunPhAlignment : sl;
369 signal txPhaseAlignmentDone : sl;
370 signal txPhAlignEn : sl;
-- GT TXPHALIGNEN 371 signal txDlySReset : sl;
-- GT TXDLYSRESET 372 signal txDlySResetDone : sl;
-- GT TXDLYSRESETDONE 373 signal txPhInit : sl;
-- GT TXPHINIT 374 signal txPhInitDone : sl;
-- GT TXPHINITDONE 375 signal txPhAlign : sl;
-- GT TXPHALIGN 376 signal txPhAlignDone : sl;
-- GT TXPHALIGNDONE 377 signal txDlyEn : sl;
-- GT TXDLYEN 380 signal txDataFull : slv(63 downto 0) := (others => '0');
381 signal txCharIsKFull : slv(7 downto 0) := (others => '0');
382 signal txCharDispMode : slv(7 downto 0) := (others => '0');
383 signal txCharDispVal : slv(7 downto 0) := (others => '0');
385 -- attribute KEEP_HIERARCHY : string; 386 -- attribute KEEP_HIERARCHY of 388 -- RstSync_RxResetDone, 389 -- Gtx7AutoPhaseAligner_Rx, 390 -- Gtx7RxFixedLatPhaseAligner_Inst, 394 -- Gtx7TxManualPhaseAligner_1 : label is "TRUE"; 402 -------------------------------------------------------------------------------------------------- 403 -- PLL Resets. Driven from TX Rst if both use same PLL 404 -------------------------------------------------------------------------------------------------- 405 cPllReset <= txPllReset when (TX_PLL_G = "CPLL") else rxPllReset when (RX_PLL_G = "CPLL") else '0';
408 -------------------------------------------------------------------------------------------------- 409 -- CPLL clock select. Only ever use 1 clock to drive cpll. Never switch clocks. 410 -- This may be unnecessary. Vivado does this for you now. 411 -------------------------------------------------------------------------------------------------- 420 -------------------------------------------------------------------------------------------------- 422 -------------------------------------------------------------------------------------------------- 423 -- Fit GTX port sizes to selected rx external interface size 425 RX_DATA_8B10B_GLUE :
process (rxCharIsKFull, rxDataFull, rxDecErrFull,
435 if ((i-9) mod 10 = 0) then 436 rxDataInt(i) <= rxDispErrFull((i-9)/10);
437 elsif ((i-8) mod 10 = 0) then 438 rxDataInt(i) <= rxCharIsKFull((i-8)/10);
440 rxDataInt(i) <= rxDataFull(i-2*(i/10));
447 end process RX_DATA_8B10B_GLUE;
449 -- Mux proper PLL Lock signal onto rxPllLock 452 -- Mux proper PLL RefClkLost signal on rxPllRefClkLost 456 rxRstTxUserRdy <= txUserRdyInt when RX_USRCLK_SRC_G = "TXOUTCLK" else '1';
458 -- Drive outputs that have internal use 461 -------------------------------------------------------------------------------------------------- 465 -- 3. Wait recclk_stable 468 -- 6. Assert gtRxUserRdy (gtRxUsrClk now usable) 469 -- 7. Wait gtRxResetDone 470 -- 8. Do phase alignment if necessary 471 -- 9. Wait DATA_VALID (aligned) - 100 us 472 --10. Wait 1 us, Set rxFsmResetDone. 473 -------------------------------------------------------------------------------------------------- 490 RECCLK_STABLE => rxRecClkStable,
-- Asserted after 50,000 UI as per DS183 493 TXUSERRDY => rxRstTxUserRdy,
-- Need to know when txUserRdy 502 RXDFEAGCHOLD => rxDfeAgcHold,
-- Explore using these later 508 -------------------------------------------------------------------------------------------------- 509 -- Synchronize rxFsmResetDone to rxUsrClk to use as reset for external logic. 510 -------------------------------------------------------------------------------------------------- 511 RstSync_RxResetDone :
entity work.
RstSync 521 ------------------------------------------------------------------------------------------------- 522 -- Recovered clock monitor 523 ------------------------------------------------------------------------------------------------- 524 BUFG_RX_OUT_CLK : BUFG
529 -- GTX7_RX_REC_CLK_MONITOR_GEN : if (RX_BUF_EN_G = false) generate 530 -- Gtx7RecClkMonitor_Inst : entity work.Gtx7RecClkMonitor 532 -- COUNTER_UPPER_VALUE => 15, 533 -- GCLK_COUNTER_UPPER_VALUE => 15, 534 -- CLOCK_PULSES => 164, 535 -- EXAMPLE_SIMULATION => ite(SIMULATION_G, 1, 0)) 537 -- GT_RST => gtRxReset, 538 -- REF_CLK => gtRxRefClkBufg, 539 -- RX_REC_CLK0 => rxOutClkBufg, -- Only works if rxOutClkOut fed back on rxUsrClkIn through bufg 540 -- SYSTEM_CLK => stableClkIn, 541 -- PLL_LK_DET => rxPllLock, 542 -- RECCLK_STABLE => rxRecClkStable, 543 -- EXEC_RESTART => rxRecClkMonitorRestart); 546 -- RX_NO_RECCLK_MON_GEN : if (RX_BUF_EN_G) generate 547 rxRecClkMonitorRestart <= '0';
551 if gtRxReset = '1' then 552 rxRecClkStable <= '0' after TPD_G;
553 rxCdrLockCnt <= 0 after TPD_G;
554 elsif rxRecClkStable = '0' then 555 if rxCdrLockCnt = WAIT_TIME_CDRLOCK_C then 556 rxRecClkStable <= '1' after TPD_G;
557 rxCdrLockCnt <= rxCdrLockCnt after TPD_G;
559 rxCdrLockCnt <= rxCdrLockCnt + 1 after TPD_G;
564 -- end generate RX_NO_RECCLK_MON_GEN; 566 ------------------------------------------------------------------------------------------------- 567 -- Phase alignment needed when rx buffer is disabled 568 -- Use normal Auto Phase Align module when RX_BUF_EN_G=false and RX_ALIGN_FIXED_LAT_G=false 569 -- Use special fixed latency aligner when RX_BUF_EN_G=false and RX_ALIGN_FIXED_LAT_G=true 570 ------------------------------------------------------------------------------------------------- 583 rxSlide <= rxSlideIn;
-- User controlled rxSlide 608 rxPhaseAlignmentDone <= '1';
614 -------------------------------------------------------------------------------------------------- 616 -------------------------------------------------------------------------------------------------- 621 txDataFull <= (others => '0');
623 txCharIsKFull <= (others => '0');
625 txCharDispMode <= (others => '0');
626 txCharDispVal <= (others => '0');
629 if ((i-9) mod 10 = 0) then 630 txCharDispMode((i-9)/10) <= txDataIn(i);
631 elsif ((i-8) mod 10 = 0) then 632 txCharDispVal((i-8)/10) <= txDataIn(i);
634 txDataFull(i-2*(i/10)) <= txDataIn(i);
637 txCharIsKFull <= (others => '0');
639 end process TX_DATA_8B10B_GLUE;
641 -- Mux proper PLL Lock signal onto txPllLock 644 -- Mux proper PLL RefClkLost signal on txPllRefClkLost 647 -- Drive outputs that have internal use 650 -------------------------------------------------------------------------------------------------- 652 -------------------------------------------------------------------------------------------------- 677 -------------------------------------------------------------------------------------------------- 678 -- Synchronize rxFsmResetDone to rxUsrClk to use as reset for external logic. 679 -------------------------------------------------------------------------------------------------- 680 RstSync_Tx :
entity work.
RstSync 690 ------------------------------------------------------------------------------------------------- 692 -- Only used when bypassing buffer 693 ------------------------------------------------------------------------------------------------- 707 txPhAlignEn <= '0';
-- Auto Mode 711 end generate TxAutoPhaseAlignGen;
730 end generate TxManualPhaseAlignGen;
733 txPhaseAlignmentDone <= '1';
739 end generate NoTxPhaseAlignGen;
741 -------------------------------------------------------------------------------------------------- 743 -------------------------------------------------------------------------------------------------- 748 --_______________________ Simulation-Only Attributes ___________________ 750 SIM_RECEIVER_DETECT_PASS =>
("TRUE"
),
752 SIM_TX_EIDLE_DRIVE_LEVEL =>
("X"
),
757 ------------------RX Byte and Word Alignment Attributes--------------- 766 RXSLIDE_AUTO_WAIT =>
7,
768 RX_SIG_VALID_DLY =>
10,
770 ------------------RX 8B/10B Decoder Attributes--------------- 771 -- These don't really matter since RX 8B10B is disabled 777 ------------------------RX Clock Correction Attributes---------------------- 798 ------------------------RX Channel Bonding Attributes---------------------- 817 ---------------------------RX Margin Analysis Attributes---------------------------- 818 ES_CONTROL =>
("000000"
),
819 ES_ERRDET_EN =>
("FALSE"
),
820 ES_EYE_SCAN_EN =>
("TRUE"
),
821 ES_HORZ_OFFSET =>
(x"000"
),
822 ES_PMA_CFG =>
("0000000000"
),
823 ES_PRESCALE =>
("00000"
),
824 ES_QUALIFIER =>
(x"00000000000000000000"
),
825 ES_QUAL_MASK =>
(x"00000000000000000000"
),
826 ES_SDATA_MASK =>
(x"00000000000000000000"
),
827 ES_VERT_OFFSET =>
("000000000"
),
829 -------------------------FPGA RX Interface Attributes------------------------- 830 RX_DATA_WIDTH =>
(RX_DATA_WIDTH_C
),
832 ---------------------------PMA Attributes---------------------------- 833 OUTREFCLK_SEL_INV =>
("11"
),
-- ?? 835 PMA_RSV2 =>
(x"2070"
),
837 PMA_RSV4 =>
(x"00000000"
),
838 RX_BIAS_CFG =>
("000000000100"
),
839 DMONITOR_CFG =>
(x"000A00"
),
842 RX_DEBUG_CFG =>
("000000000000"
),
844 TERM_RCAL_CFG =>
("10000"
),
845 TERM_RCAL_OVRD =>
('0'
),
846 TST_RSV =>
(x"00000000"
),
849 UCODEER_CLR =>
('0'
),
851 ---------------------------PCI Express Attributes---------------------------- 852 PCS_PCIE_EN =>
("FALSE"
),
854 ---------------------------PCS Attributes---------------------------- 855 PCS_RSVD_ATTR => ite
(RX_ALIGN_MODE_G = "FIXED_LAT", X"000000000002", X"000000000000"
),
--UG476 pg 241 857 -------------RX Buffer Attributes------------ 859 RXBUF_EIDLE_HI_CNT =>
("1000"
),
860 RXBUF_EIDLE_LO_CNT =>
("0000"
),
862 RX_BUFFER_CFG =>
("000000"
),
863 RXBUF_RESET_ON_CB_CHANGE =>
("TRUE"
),
864 RXBUF_RESET_ON_COMMAALIGN =>
("FALSE"
),
865 RXBUF_RESET_ON_EIDLE =>
("FALSE"
),
866 RXBUF_RESET_ON_RATE_CHANGE =>
("TRUE"
),
867 RXBUFRESET_TIME =>
("00001"
),
868 RXBUF_THRESH_OVFLW =>
(61),
869 RXBUF_THRESH_OVRD =>
("FALSE"
),
870 RXBUF_THRESH_UNDFLW =>
(4),
871 RXDLY_CFG =>
(x"001F"
),
872 RXDLY_LCFG =>
(x"030"
),
873 RXDLY_TAP_CFG =>
(x"0000"
),
874 RXPH_CFG =>
(x"000000"
),
875 RXPHDLY_CFG =>
(x"084020"
),
876 RXPH_MONITOR_SEL =>
("00000"
),
877 RX_XCLK_SEL => RX_XCLK_SEL_C,
878 RX_DDI_SEL =>
("000000"
),
879 RX_DEFER_RESET_BUF_EN =>
("TRUE"
),
881 -----------------------CDR Attributes------------------------- 883 RXCDR_FR_RESET_ON_EIDLE =>
('0'
),
884 RXCDR_HOLD_DURING_EIDLE =>
('0'
),
885 RXCDR_PH_RESET_ON_EIDLE =>
('0'
),
886 RXCDR_LOCK_CFG =>
("010101"
),
888 -------------------RX Initialization and Reset Attributes------------------- 889 RXCDRFREQRESET_TIME =>
("00001"
),
890 RXCDRPHRESET_TIME =>
("00001"
),
891 RXISCANRESET_TIME =>
("00001"
),
892 RXPCSRESET_TIME =>
("00001"
),
893 RXPMARESET_TIME =>
("00011"
),
-- ! Check this 895 -------------------RX OOB Signaling Attributes------------------- 896 RXOOB_CFG =>
("0000110"
),
898 -------------------------RX Gearbox Attributes--------------------------- 899 RXGEARBOX_EN =>
("FALSE"
),
900 GEARBOX_MODE =>
("000"
),
902 -------------------------PRBS Detection Attribute----------------------- 903 RXPRBS_ERR_LOOPBACK =>
('0'
),
905 -------------Power-Down Attributes---------- 906 PD_TRANS_TIME_FROM_P2 =>
(x"03c"
),
907 PD_TRANS_TIME_NONE_P2 =>
(x"3c"
),
908 PD_TRANS_TIME_TO_P2 =>
(x"64"
),
910 -------------RX OOB Signaling Attributes---------- 913 SATA_BURST_SEQ_LEN =>
("1111"
),
914 SATA_BURST_VAL =>
("100"
),
915 SATA_EIDLE_VAL =>
("100"
),
916 SATA_MAX_BURST =>
(8),
917 SATA_MAX_INIT =>
(21),
918 SATA_MAX_WAKE =>
(7),
919 SATA_MIN_BURST =>
(4),
920 SATA_MIN_INIT =>
(12),
921 SATA_MIN_WAKE =>
(4),
923 -------------RX Fabric Clock Output Control Attributes---------- 924 TRANS_TIME_RATE =>
(x"0E"
),
926 --------------TX Buffer Attributes---------------- 928 TXBUF_RESET_ON_RATE_CHANGE =>
("TRUE"
),
929 TXDLY_CFG =>
(x"001F"
),
930 TXDLY_LCFG =>
(x"030"
),
931 TXDLY_TAP_CFG =>
(x"0000"
),
932 TXPH_CFG =>
(x"0780"
),
933 TXPHDLY_CFG =>
(x"084020"
),
934 TXPH_MONITOR_SEL =>
("00000"
),
935 TX_XCLK_SEL => TX_XCLK_SEL_C,
937 -------------------------FPGA TX Interface Attributes------------------------- 938 TX_DATA_WIDTH =>
(TX_DATA_WIDTH_C
),
940 -------------------------TX Configurable Driver Attributes------------------------- 941 TX_DEEMPH0 =>
("00000"
),
942 TX_DEEMPH1 =>
("00000"
),
943 TX_EIDLE_ASSERT_DELAY =>
("110"
),
944 TX_EIDLE_DEASSERT_DELAY =>
("100"
),
945 TX_LOOPBACK_DRIVE_HIZ =>
("FALSE"
),
946 TX_MAINCURSOR_SEL =>
('0'
),
947 TX_DRIVE_MODE =>
("DIRECT"
),
948 TX_MARGIN_FULL_0 =>
("1001110"
),
949 TX_MARGIN_FULL_1 =>
("1001001"
),
950 TX_MARGIN_FULL_2 =>
("1000101"
),
951 TX_MARGIN_FULL_3 =>
("1000010"
),
952 TX_MARGIN_FULL_4 =>
("1000000"
),
953 TX_MARGIN_LOW_0 =>
("1000110"
),
954 TX_MARGIN_LOW_1 =>
("1000100"
),
955 TX_MARGIN_LOW_2 =>
("1000010"
),
956 TX_MARGIN_LOW_3 =>
("1000000"
),
957 TX_MARGIN_LOW_4 =>
("1000000"
),
959 -------------------------TX Gearbox Attributes-------------------------- 960 TXGEARBOX_EN =>
("FALSE"
),
962 -------------------------TX Initialization and Reset Attributes-------------------------- 963 TXPCSRESET_TIME =>
("00001"
),
964 TXPMARESET_TIME =>
("00001"
),
966 -------------------------TX Receiver Detection Attributes-------------------------- 967 TX_RXDETECT_CFG =>
(x"1832"
),
968 TX_RXDETECT_REF =>
("100"
),
970 ----------------------------CPLL Attributes---------------------------- 971 CPLL_CFG =>
(x"BC07DC"
),
974 CPLL_INIT_CFG =>
(x"00001E"
),
975 CPLL_LOCK_CFG =>
(x"01E8"
),
979 SATA_CPLL_CFG =>
("VCO_3000MHZ"
),
981 --------------RX Initialization and Reset Attributes------------- 982 RXDFELPMRESET_TIME =>
("0001111"
),
984 --------------RX Equalizer Attributes------------- 985 RXLPM_HF_CFG =>
("00000011110000"
),
986 RXLPM_LF_CFG =>
("00000011110000"
),
987 RX_DFE_GAIN_CFG =>
(x"020FEA"
),
988 RX_DFE_H2_CFG =>
("000000000000"
),
989 RX_DFE_H3_CFG =>
("000001000000"
),
990 RX_DFE_H4_CFG =>
("00011110000"
),
991 RX_DFE_H5_CFG =>
("00011100000"
),
992 RX_DFE_KL_CFG =>
("0000011111110"
),
994 RX_DFE_LPM_HOLD_DURING_EIDLE =>
('0'
),
995 RX_DFE_UT_CFG =>
("10001111000000000"
),
996 RX_DFE_VP_CFG =>
("00011111100000011"
),
998 -------------------------Power-Down Attributes------------------------- 999 RX_CLKMUX_PD =>
('1'
),
1000 TX_CLKMUX_PD =>
('1'
),
1002 -------------------------FPGA RX Interface Attribute------------------------- 1003 RX_INT_DATAWIDTH => RX_INT_DATAWIDTH_C,
1005 -------------------------FPGA TX Interface Attribute------------------------- 1006 TX_INT_DATAWIDTH => TX_INT_DATAWIDTH_C,
1008 ------------------TX Configurable Driver Attributes--------------- 1009 TX_QPI_STATUS_EN =>
('0'
),
1011 -------------------------RX Equalizer Attributes-------------------------- 1013 RX_DFE_XYD_CFG =>
("0000000000000"
),
1015 -------------------------TX Configurable Driver Attributes-------------------------- 1016 TX_PREDRIVER_MODE =>
('0'
) 1022 ---------------------------------- Channel --------------------------------- 1025 DMONITOROUT =>
open,
1026 GTRESETSEL => '0',
-- Sequential Mode 1027 GTRSVD => "
0000000000000000",
1031 ---------------- Channel - Dynamic Reconfiguration Port (DRP) -------------- 1039 ------------------------- Channel - Ref Clock Ports ------------------------ 1040 GTGREFCLK => gtGRefClk,
1041 GTNORTHREFCLK0 => gtNorthRefClk0,
1042 GTNORTHREFCLK1 => gtNorthRefClk1,
1043 GTREFCLK0 => gtRefClk0,
1044 GTREFCLK1 => gtRefClk1,
1045 GTREFCLKMONITOR =>
open,
1046 GTSOUTHREFCLK0 => gtSouthRefClk0,
1047 GTSOUTHREFCLK1 => gtSouthRefClk1,
1048 -------------------------------- Channel PLL ------------------------------- 1049 CPLLFBCLKLOST =>
open,
1050 CPLLLOCK => cPllLock,
1054 CPLLREFCLKLOST => cPllRefClkLost,
1056 CPLLRESET => cPllReset,
1057 ------------------------------- Eye Scan Ports ----------------------------- 1058 EYESCANDATAERROR =>
open,
1060 EYESCANRESET => '0',
1061 EYESCANTRIGGER => '0',
1062 ------------------------ Loopback and Powerdown Ports ---------------------- 1066 ----------------------------- PCS Reserved Ports --------------------------- 1067 PCSRSVDIN => "
0000000000000000",
1068 PCSRSVDIN2 => "
00000",
1070 ----------------------------- PMA Reserved Ports --------------------------- 1071 PMARSVDIN => "
00000",
1072 PMARSVDIN2 => "
00000",
1073 ------------------------------- Receive Ports ------------------------------ 1077 RXSYSCLKSEL => RX_SYSCLK_SEL_C,
1078 RXUSERRDY => rxUserRdyInt,
1079 -------------- Receive Ports - 64b66b and 64b67b Gearbox Ports ------------- 1080 RXDATAVALID =>
open,
1081 RXGEARBOXSLIP => '0',
1083 RXHEADERVALID =>
open,
1084 RXSTARTOFSEQ =>
open,
1085 ----------------------- Receive Ports - 8b10b Decoder ---------------------- 1087 RXCHARISCOMMA =>
open,
1088 RXCHARISK => rxCharIsKFull,
1089 RXDISPERR => rxDispErrFull,
1090 RXNOTINTABLE => rxDecErrFull,
1091 ------------------- Receive Ports - Channel Bonding Ports ------------------ 1092 RXCHANBONDSEQ =>
open,
1099 ------------------- Receive Ports - Channel Bonding Ports ----------------- 1100 RXCHANISALIGNED =>
open,
1101 RXCHANREALIGN =>
open,
1102 ------------------- Receive Ports - Clock Correction Ports ----------------- 1103 RXCLKCORCNT =>
open,
1104 --------------- Receive Ports - Comma Detection and Alignment -------------- 1105 RXBYTEISALIGNED =>
open,
1106 RXBYTEREALIGN =>
open,
1112 ----------------------- Receive Ports - PRBS Detection --------------------- 1113 RXPRBSCNTRESET => '0',
1116 ------------------- Receive Ports - RX Data Path interface ----------------- 1117 GTRXRESET => gtRxReset,
1118 RXDATA => rxDataFull,
1119 RXOUTCLK => rxOutClk,
1120 RXOUTCLKFABRIC =>
open,
1121 RXOUTCLKPCS =>
open,
1122 RXOUTCLKSEL => to_stdlogicvector
(RX_OUTCLK_SEL_C
),
-- Selects rx recovered clk for rxoutclk 1123 RXPCSRESET => '0',
-- Don't bother with component level resets 1127 ------------ Receive Ports - RX Decision Feedback Equalizer(DFE) ----------- 1128 RXDFEAGCHOLD => rxDfeAgcHold,
1129 RXDFEAGCOVRDEN => '0',
1131 RXDFELFHOLD => rxDfeLfHold,
1133 RXDFELPMRESET => '0',
1134 RXDFETAP2HOLD => '0',
1135 RXDFETAP2OVRDEN => '0',
1136 RXDFETAP3HOLD => '0',
1137 RXDFETAP3OVRDEN => '0',
1138 RXDFETAP4HOLD => '0',
1139 RXDFETAP4OVRDEN => '0',
1140 RXDFETAP5HOLD => '0',
1141 RXDFETAP5OVRDEN => '0',
1143 RXDFEUTOVRDEN => '0',
1145 RXDFEVPOVRDEN => '0',
1148 RXDFEXYDHOLD => '0',
1149 RXDFEXYDOVRDEN => '0',
1150 RXMONITOROUT =>
open,
1151 RXMONITORSEL => "
00",
1154 ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------ 1157 RXCDRFREQRESET => '0',
1159 RXCDRLOCK => rxCdrLock,
1162 RXCDRRESETRSV => '0',
1164 RXELECIDLEMODE => "
11",
1165 RXLPMEN => RXLPMEN_C,
1166 RXLPMHFHOLD => rxLpmHfHold,
1167 RXLPMHFOVRDEN => '0',
1168 RXLPMLFHOLD => rxLpmLfHold,
1169 RXLPMLFKLOVRDEN => '0',
1171 -------- Receive Ports - RX Elastic Buffer and Phase Alignment Ports ------- 1174 RXDDIEN =>
RX_DDIEN_G,
-- Don't insert delay in deserializer. Might be wrong. 1176 RXDLYEN => '0',
-- Used for manual phase align 1178 RXDLYSRESET => rxDlySReset,
1179 RXDLYSRESETDONE => rxDlySResetDone,
1181 RXPHALIGNDONE => rxPhAlignDone,
1184 RXPHDLYRESET => '0',
1185 RXPHMONITOR =>
open,
1187 RXPHSLIPMONITOR =>
open,
1189 ------------------------ Receive Ports - RX PLL Ports ---------------------- 1192 RXRESETDONE => rxResetDone,
1193 -------------- Receive Ports - RX Pipe Control for PCI Express ------------- 1196 ----------------- Receive Ports - RX Polarity Control Ports ---------------- 1198 --------------------- Receive Ports - RX Ports for SATA -------------------- 1199 RXCOMINITDET =>
open,
1200 RXCOMSASDET =>
open,
1201 RXCOMWAKEDET =>
open,
1202 ------------------------------- Transmit Ports ----------------------------- 1203 SETERRSTATUS => '0',
1204 TSTIN => "
11111111111111111111",
1206 TXPHDLYTSTCLK => '0',
1208 TXPOSTCURSORINV => '0',
1210 TXPRECURSORINV => '0',
1214 TXQPISTRONGPDOWN => '0',
1215 TXQPIWEAKPUP => '0',
1216 TXSYSCLKSEL => TX_SYSCLK_SEL_C,
1217 TXUSERRDY => txUserRdyInt,
1218 -------------- Transmit Ports - 64b66b and 64b67b Gearbox Ports ------------ 1219 TXGEARBOXREADY =>
open,
1221 TXSEQUENCE => "
0000000",
1223 ---------------- Transmit Ports - 8b10b Encoder Control Ports -------------- 1224 TX8B10BBYPASS => X"00",
1226 TXCHARDISPMODE => txCharDispMode,
1227 TXCHARDISPVAL => txCharDispVal,
1228 TXCHARISK => txCharIsKFull,
1229 ------------ Transmit Ports - TX Buffer and Phase Alignment Ports ---------- 1232 TXDLYEN => txDlyEn,
-- Manual Align 1235 TXDLYSRESET => txDlySReset,
1236 TXDLYSRESETDONE => txDlySResetDone,
1238 TXPHALIGN => txPhAlign,
-- Manual Align 1239 TXPHALIGNDONE => txPhAlignDone,
1240 TXPHALIGNEN => txPhAlignEn,
-- Enables manual align 1242 TXPHDLYRESET => '0',
-- Use SReset instead 1243 TXPHINIT => txPhInit,
-- Manual Align 1244 TXPHINITDONE => txPhInitDone,
1246 ------------------ Transmit Ports - TX Data Path interface ----------------- 1247 GTTXRESET => gtTxReset,
1248 TXDATA => txDataFull,
1250 TXOUTCLKFABRIC =>
open,
--txGtRefClk, 1251 TXOUTCLKPCS =>
open,
--txOutClkPcsOut, 1252 TXOUTCLKSEL => to_stdlogicvector
(TX_OUTCLK_SEL_C
),
1253 TXPCSRESET => '0',
-- Don't bother with individual resets 1257 ---------------- Transmit Ports - TX Driver and OOB signaling -------------- 1260 TXBUFDIFFCTRL => "
100",
1264 TXMAINCURSOR => "
0000000",
1265 TXPDELECIDLEMODE => '0',
1267 ----------------------- Transmit Ports - TX PLL Ports ---------------------- 1270 TXRESETDONE => txResetDone,
1271 --------------------- Transmit Ports - TX PRBS Generator ------------------- 1272 TXPRBSFORCEERR => '0',
1274 -------------------- Transmit Ports - TX Polarity Control ------------------ 1276 ----------------- Transmit Ports - TX Ports for PCI Express ---------------- 1282 --------------------- Transmit Ports - TX Ports for SATA ------------------- 1283 TXCOMFINISH =>
open,
1291 end architecture rtl;
ALIGN_MCOMMA_VALUE_Gbit_vector := "1010000011"
CLK_COR_REPEAT_WAIT_Ginteger := 0
SIMULATION_Gboolean := false
out RUN_PHALIGNMENTstd_logic
TX_OUTCLK_SRC_Gstring := "PLLREFCLK"
TX_PHASE_ALIGN_Gstring := "AUTO"
in txCharIsKInslv(( TX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
CHAN_BOND_SEQ_1_4_Gbit_vector := "0000000000"
FTS_DESKEW_SEQ_ENABLE_Gbit_vector := "1111"
RX_BUF_EN_Gboolean := true
TX_CLK25_DIV_Ginteger := 5
STABLE_CLOCK_PERIOD_Greal := 4.0E-9
in RECCLK_STABLEstd_logic
out rxPhaseAlignmentDonesl
CPLL_FBDIV_45_Ginteger := 5
out RXDFEAGCHOLDstd_logic
ALIGN_MCOMMA_EN_Gsl := '0'
FIXED_ALIGN_COMMA_1_Gslv := "----------1010000011"
RX_INT_DATA_WIDTH_Ginteger := 20
in RECCLK_MONITOR_RESTARTstd_logic := '0'
CHAN_BOND_SEQ_2_3_Gbit_vector := "0000000000"
in txPostCursorslv( 4 downto 0) :=( others => '0')
out MMCM_RESETstd_logic := '1'
out MMCM_RESETstd_logic := '1'
CPLL_REFCLK_SEL_Gbit_vector := "001"
SHOW_REALIGN_COMMA_Gstring := "FALSE"
CBCC_DATA_SOURCE_SEL_Gstring := "DECODED"
out rxBufStatusOutslv( 2 downto 0)
RX_CHAN_BOND_EN_Gboolean := false
ALIGN_PCOMMA_EN_Gsl := '0'
SIM_GTRESET_SPEEDUP_Gstring := "FALSE"
DEC_VALID_COMMA_ONLY_Gstring := "FALSE"
COMMA_EN_Gslv( 3 downto 0) := "0011"
COMMA_3_Gslv := "XXXXXXXXXXXXXXXXXXXX"
RX_DISPERR_SEQ_MATCH_Gstring := "TRUE"
RX_EQUALIZER_Gstring := "DFE"
DEC_PCOMMA_DETECT_Gstring := "TRUE"
ALIGN_COMMA_DOUBLE_Gstring := "FALSE"
CLK_COR_SEQ_2_USE_Gstring := "FALSE"
CHAN_BOND_SEQ_1_3_Gbit_vector := "0000000000"
TX_INT_DATA_WIDTH_Ginteger := 20
in qPllRefClkLostInsl := '0'
gtxe2_channel gtxe2_igtxe2_i
in txPowerDownslv( 1 downto 0) := "00"
CLK_COR_SEQ_2_1_Gbit_vector := "0100000000"
out rxDataOutslv( RX_EXT_DATA_WIDTH_G- 1 downto 0)
FIXED_ALIGN_COMMA_0_Gslv := "----------0101111100"
TX_BUF_EN_Gboolean := true
FIXED_COMMA_EN_Gslv( 3 downto 0) := "0011"
PMA_RSV_Gbit_vector := X"00018480"
in rxChBondInslv( 4 downto 0) := "00000"
out TXUSERRDYstd_logic := '0'
CLK_CORRECT_USE_Gstring := "FALSE"
RX_OUTCLK_SRC_Gstring := "PLLREFCLK"
CLK_COR_MAX_LAT_Ginteger := 9
RX_ALIGN_MODE_Gstring := "GT"
in txDiffCtrlslv( 3 downto 0) := "1000"
CLK_COR_SEQ_1_1_Gbit_vector := "0100000000"
in drpDislv( 15 downto 0) := X"0000"
in rxDataslv( WORD_SIZE_G- 1 downto 0)
RXCDR_CFG_Gbit_vector := x"03000023ff40200020"
out rxCharIsKOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
RETRY_COUNTER_BITWIDTHinteger range 2 to 8:= 8
RETRY_COUNTER_BITWIDTHinteger range 2 to 8:= 8
CLK_COR_SEQ_1_4_Gbit_vector := "0000000000"
in rxChBondLevelInslv( 2 downto 0) := "000"
CLK_COR_SEQ_1_2_Gbit_vector := "0000000000"
CPLL_REFCLK_DIV_Ginteger := 1
out txBufStatusOutslv( 1 downto 0)
in rxPowerDownslv( 1 downto 0) := "00"
CLK_COR_KEEP_IDLE_Gstring := "FALSE"
CHAN_BOND_SEQ_1_1_Gbit_vector := "0000000000"
out RETRY_COUNTERstd_logic_vector( RETRY_COUNTER_BITWIDTH- 1 downto 0) :=( others => '0')
out RETRY_COUNTERstd_logic_vector( RETRY_COUNTER_BITWIDTH- 1 downto 0) :=( others => '0')
CLK_COR_SEQ_2_4_Gbit_vector := "0000000000"
out RUN_PHALIGNMENTstd_logic := '0'
out rxDispErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
CLK_COR_SEQ_2_3_Gbit_vector := "0000000000"
STABLE_CLOCK_PERIODinteger range 4 to 20:= 8
STABLE_CLOCK_PERIODinteger range 4 to 20:= 8
FIXED_ALIGN_COMMA_3_Gslv := "XXXXXXXXXXXXXXXXXXXX"
in loopbackInslv( 2 downto 0) := "000"
in txMmcmLockedInsl := '1'
DEC_MCOMMA_DETECT_Gstring := "TRUE"
CHAN_BOND_SEQ_2_2_Gbit_vector := "0000000000"
CLK_COR_SEQ_LEN_Ginteger := 1
RX_CM_TRIM_Gbit_vector := "010"
EXAMPLE_SIMULATIONinteger := 0
RX_USRCLK_SRC_Gstring := "RXOUTCLK"
CHAN_BOND_MAX_SKEW_Ginteger := 1
COMMA_2_Gslv := "XXXXXXXXXXXXXXXXXXXX"
COMMA_1_Gslv := "----------1010000011"
RX_DFE_KL_CFG2_Gbit_vector := x"3008E56A"
out rxChBondOutslv( 4 downto 0)
in rxDataValidInsl := '1'
COMMA_0_Gslv := "----------0101111100"
CHAN_BOND_SEQ_1_ENABLE_Gbit_vector := "1111"
out PHASE_ALIGNMENT_DONESTD_LOGIC := '0'
CLK_COR_SEQ_2_ENABLE_Gbit_vector := "0000"
FIXED_ALIGN_COMMA_2_Gslv := "XXXXXXXXXXXXXXXXXXXX"
out RESET_PHALIGNMENTstd_logic := '0'
CLK_COR_SEQ_1_3_Gbit_vector := "0000000000"
out RESET_PHALIGNMENTstd_logic := '0'
CHAN_BOND_SEQ_1_2_Gbit_vector := "0000000000"
CHAN_BOND_SEQ_2_USE_Gstring := "FALSE"
CHAN_BOND_SEQ_LEN_Ginteger := 1
in txPreCursorslv( 4 downto 0) :=( others => '0')
in txDataInslv( TX_EXT_DATA_WIDTH_G- 1 downto 0)
TX_8B10B_EN_Gboolean := true
in rxMmcmLockedInsl := '1'
CLK_COR_SEQ_2_2_Gbit_vector := "0000000000"
RX_DFE_LPM_CFG_Gbit_vector := x"0954"
RX_CLK25_DIV_Ginteger := 5
ALIGN_PCOMMA_DET_Gstring := "FALSE"
out GTTXRESETstd_logic := '0'
RX_8B10B_EN_Gboolean := true
in gtRxRefClkBufgsl := '0'
CHAN_BOND_SEQ_2_1_Gbit_vector := "0000000000"
ALIGN_MCOMMA_DET_Gstring := "FALSE"
out RX_FSM_RESET_DONEstd_logic
in PHALIGNMENT_DONEstd_logic
in PHALIGNMENT_DONEstd_logic
in PLLREFCLKLOSTstd_logic
in PLLREFCLKLOSTstd_logic
RX_CHAN_BOND_MASTER_Gboolean := false
in drpAddrslv( 8 downto 0) := "000000000"
TX_EXT_DATA_WIDTH_Ginteger := 16
CLK_COR_MIN_LAT_Ginteger := 7
CLK_COR_SEQ_1_ENABLE_Gbit_vector := "1111"
RX_EXT_DATA_WIDTH_Ginteger := 16
RXSLIDE_MODE_Gstring := "PCS"
CLK_COR_PRECEDENCE_Gstring := "TRUE"
in RUN_PHALIGNMENTSTD_LOGIC
TX_BUF_ADDR_MODE_Gstring := "FAST"
RX_OS_CFG_Gbit_vector := "0000010000000"
CHAN_BOND_SEQ_2_4_Gbit_vector := "0000000000"
FTS_LANE_DESKEW_EN_Gstring := "FALSE"
FTS_LANE_DESKEW_CFG_Gbit_vector := "1111"
out TX_FSM_RESET_DONEstd_logic
out PLL_RESETstd_logic := '0'
ALIGN_PCOMMA_VALUE_Gbit_vector := "0101111100"
out PLL_RESETstd_logic := '0'
CHAN_BOND_KEEP_ALIGN_Gstring := "FALSE"
out rxDecErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
ALIGN_COMMA_WORD_Ginteger := 2
out drpDoslv( 15 downto 0)
RX_BUF_ADDR_MODE_Gstring := "FAST"
CHAN_BOND_SEQ_2_ENABLE_Gbit_vector := "0000"
out RXUSERRDYstd_logic := '0'
ALIGN_COMMA_ENABLE_Gbit_vector := "1111111111"
in DLYSRESETDONESTD_LOGIC
out GTRXRESETstd_logic := '0'
SIM_VERSION_Gstring := "4.0"