1 ------------------------------------------------------------------------------- 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2012-12-17 5 -- Last update: 2017-05-08 6 ------------------------------------------------------------------------------- 7 -- Description: G-Link wrapper for GTX7 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;
24 use UNISIM.VCOMPONENTS.
all;
27 --! @ingroup protocols_glink_gtx7 52 PMA_RSV_G : := X"00018480";
-- Use X"00018480" when RXPLL=CPLL 53 -- Use X"001E7080" when RXPLL=QPLL and QPLL > 6.6GHz 58 -- Configure PLL sources 62 -- Configure Data widths 71 -- Configure Buffer usage 82 RX_DDIEN_G : sl := '0';
-- Supposed to be '1' when bypassing rx buffer 85 -- Configure RX comma alignment 99 -- Fixed Latency comma alignment (If RX_ALIGN_MODE_G = "FIXED_LAT") 106 -- Configure RX 8B10B decoding (If RX_8B10B_EN_G = true) 112 -- Configure Clock Correction 133 -- Configure Channel Bonding 154 -- RX Equalizer Attributes-------------------------- 175 -- reference clock to check if recovered clock is stable 183 -- Rx Clock related signals 191 -- Rx User Reset Signals 195 -- Manual Comma Align signals 199 -- Rx Data and decode signals 207 -- Rx Channel Bonding 212 -- Tx Clock Related Signals 220 -- Tx User Reset signals 233 end entity GLinkGtx7Core;
237 function getOutClkSelVal (OUT_CLK_SRC : )
return is 239 if (OUT_CLK_SRC = "PLLREFCLK") then 241 elsif (OUT_CLK_SRC = "OUTCLKPMA") then 243 elsif (OUT_CLK_SRC = "PLLDV2CLK") then 248 end function getOutClkSelVal;
250 function getDataWidth (USE_8B10B : ; EXT_DATA_WIDTH : )
return is 252 if (USE_8B10B = false) then 253 return EXT_DATA_WIDTH;
255 return (EXT_DATA_WIDTH / 8) * 10;
259 -------------------------------------------------------------------------------------------------- 261 -------------------------------------------------------------------------------------------------- 262 constant RX_SYSCLK_SEL_C : slv := ite(RX_PLL_G = "CPLL", "00", "11");
263 constant TX_SYSCLK_SEL_C : slv := ite(TX_PLL_G = "CPLL", "00", "11");
265 constant RX_XCLK_SEL_C : := ite(RX_BUF_EN_G, "RXREC", "RXUSR");
266 constant TX_XCLK_SEL_C : := ite(TX_BUF_EN_G, "TXOUT", "TXUSR");
279 -------------------------------------------------------------------------------------------------- 281 -------------------------------------------------------------------------------------------------- 284 signal cPllLock : sl;
285 signal cPllReset : sl;
286 signal cPllRefClkLost : sl;
288 -- Gtx CPLL Input Clocks 289 signal gtGRefClk : sl;
290 signal gtNorthRefClk0 : sl;
291 signal gtNorthRefClk1 : sl;
292 signal gtRefClk0 : sl;
293 signal gtRefClk1 : sl;
294 signal gtSouthRefClk0 : sl;
295 signal gtSouthRefClk1 : sl;
297 ---------------------------- 299 signal rxOutClk : sl;
300 signal rxOutClkBufg : sl;
302 signal rxPllLock : sl;
303 signal rxPllReset : sl;
304 signal rxPllRefClkLost : sl;
306 signal gtRxReset : sl;
-- GT GTRXRESET 307 signal rxResetDone : sl;
-- GT RXRESETDONE 308 signal rxUserRdyInt : sl;
-- GT RXUSERRDY 310 signal rxUserResetInt : sl;
311 signal rxFsmResetDone : sl;
312 signal rxRstTxUserRdy : sl;
-- 314 signal rxRecClkStable : sl;
315 signal rxRecClkMonitorRestart : sl;
316 signal rxCdrLockCnt : range 0 to WAIT_TIME_CDRLOCK_C := 0;
318 signal rxRunPhAlignment : sl;
319 signal rxPhaseAlignmentDone : sl;
320 signal rxAlignReset : sl;
321 signal rxDlySReset : sl;
-- GT RXDLYSRESET 322 signal rxDlySResetDone : sl;
-- GT RXDLYSRESETDONE 323 signal rxPhAlignDone : sl;
-- GT RXPHALIGNDONE 324 signal rxSlide : sl;
-- GT RXSLIDE 325 signal rxCdrLock : sl;
-- GT RXCDRLOCK 327 signal rxDfeAgcHold : sl;
328 signal rxDfeLfHold : sl;
329 signal rxLpmLfHold : sl;
330 signal rxLpmHfHold : sl;
334 signal rxDataFull : slv(63 downto 0);
-- GT RXDATA 335 signal rxCharIsKFull : slv(7 downto 0);
-- GT RXCHARISK 336 signal rxDispErrFull : slv(7 downto 0);
-- GT RXDISPERR 337 signal rxDecErrFull : slv(7 downto 0);
340 ---------------------------- 342 signal txPllLock : sl;
343 signal txPllReset : sl;
344 signal txPllRefClkLost : sl;
346 signal gtTxReset : sl;
-- GT GTTXRESET 347 signal txResetDone : sl;
-- GT TXRESETDONE 348 signal txUserRdyInt : sl;
-- GT TXUSERRDY 350 signal txFsmResetDone : sl;
352 signal txResetPhAlignment : sl;
353 signal txRunPhAlignment : sl;
354 signal txPhaseAlignmentDone : sl;
355 signal txPhAlignEn : sl;
-- GT TXPHALIGNEN 356 signal txDlySReset : sl;
-- GT TXDLYSRESET 357 signal txDlySResetDone : sl;
-- GT TXDLYSRESETDONE 358 signal txPhInit : sl;
-- GT TXPHINIT 359 signal txPhInitDone : sl;
-- GT TXPHINITDONE 360 signal txPhAlign : sl;
-- GT TXPHALIGN 361 signal txPhAlignDone : sl;
-- GT TXPHALIGNDONE 362 signal txDlyEn : sl;
-- GT TXDLYEN 365 signal txDataFull : slv(63 downto 0) := (others => '0');
366 signal txCharIsKFull, 368 txCharDispVal : slv(7 downto 0) := (others => '0');
370 -- attribute KEEP_HIERARCHY : string; 371 -- attribute KEEP_HIERARCHY of 373 -- RstSync_RxResetDone, 374 -- Gtx7RecClkMonitor_Inst, 375 -- Gtx7AutoPhaseAligner_Rx, 376 -- Gtx7RxFixedLatPhaseAligner_Inst, 380 -- Gtx7TxManualPhaseAligner_1 : label is "TRUE"; 388 -------------------------------------------------------------------------------------------------- 389 -- PLL Resets. Driven from TX Rst if both use same PLL 390 -------------------------------------------------------------------------------------------------- 391 cPllReset <= txPllReset when (TX_PLL_G = "CPLL") else rxPllReset when (RX_PLL_G = "CPLL") else '0';
394 -------------------------------------------------------------------------------------------------- 395 -- CPLL clock select. Only ever use 1 clock to drive cpll. Never switch clocks. 396 -- This may be unnecessary. Vivado does this for you now. 397 -------------------------------------------------------------------------------------------------- 406 -------------------------------------------------------------------------------------------------- 408 -------------------------------------------------------------------------------------------------- 409 -- Fit GTX port sizes to selected rx external interface size 411 RX_DATA_8B10B_GLUE :
process (rxCharIsKFull, rxDataFull, rxDecErrFull,
421 if ((i-9) mod 10 = 0) then 422 rxDataInt(i) <= rxDispErrFull((i-9)/10);
423 elsif ((i-8) mod 10 = 0) then 424 rxDataInt(i) <= rxCharIsKFull((i-8)/10);
426 rxDataInt(i) <= rxDataFull(i-2*(i/10));
433 end process RX_DATA_8B10B_GLUE;
435 -- Mux proper PLL Lock signal onto rxPllLock 438 -- Mux proper PLL RefClkLost signal on rxPllRefClkLost 441 rxAlignReset <= '0';
-- Unused?!? 443 rxRstTxUserRdy <= txUserRdyInt when RX_USRCLK_SRC_G = "TXOUTCLK" else '1';
445 -- Drive outputs that have internal use 448 -------------------------------------------------------------------------------------------------- 452 -- 3. Wait recclk_stable 455 -- 6. Assert gtRxUserRdy (gtRxUsrClk now usable) 456 -- 7. Wait gtRxResetDone 457 -- 8. Do phase alignment if necessary 458 -- 9. Wait DATA_VALID (aligned) - 100 us 459 --10. Wait 1 us, Set rxFsmResetDone. 460 -------------------------------------------------------------------------------------------------- 477 RECCLK_STABLE => rxRecClkStable,
-- Asserted after 50,000 UI as per DS183 480 TXUSERRDY => rxRstTxUserRdy,
-- Need to know when txUserRdy 489 RXDFEAGCHOLD => rxDfeAgcHold,
-- Explore using these later 495 -------------------------------------------------------------------------------------------------- 496 -- Synchronize rxFsmResetDone to rxUsrClk to use as reset for external logic. 497 -------------------------------------------------------------------------------------------------- 498 RstSync_RxResetDone :
entity work.
RstSync 508 ------------------------------------------------------------------------------------------------- 509 -- Recovered clock monitor 510 ------------------------------------------------------------------------------------------------- 511 BUFG_RX_OUT_CLK : BUFG
516 GTX7_RX_REC_CLK_MONITOR_GEN : if (RX_BUF_EN_G = false) generate 526 RX_REC_CLK0 => rxOutClkBufg,
-- Only works if rxOutClkOut fed back on rxUsrClkIn through bufg 534 rxRecClkMonitorRestart <= '0';
538 if gtRxReset = '1' then 539 rxRecClkStable <= '0' after TPD_G;
540 rxCdrLockCnt <= 0 after TPD_G;
541 elsif rxRecClkStable = '0' then 542 if rxCdrLockCnt = WAIT_TIME_CDRLOCK_C then 543 rxRecClkStable <= '1' after TPD_G;
544 rxCdrLockCnt <= rxCdrLockCnt after TPD_G;
546 rxCdrLockCnt <= rxCdrLockCnt + 1 after TPD_G;
551 end generate RX_NO_RECCLK_MON_GEN;
553 ------------------------------------------------------------------------------------------------- 554 -- Phase alignment needed when rx buffer is disabled 555 -- Use normal Auto Phase Align module when RX_BUF_EN_G=false and RX_ALIGN_FIXED_LAT_G=false 556 -- Use special fixed latency aligner when RX_BUF_EN_G=false and RX_ALIGN_FIXED_LAT_G=true 557 ------------------------------------------------------------------------------------------------- 570 rxSlide <= rxSlideIn;
-- User controlled rxSlide 594 rxPhaseAlignmentDone <= '1';
599 -------------------------------------------------------------------------------------------------- 601 -------------------------------------------------------------------------------------------------- 606 txDataFull <= (others => '0');
608 txCharIsKFull <= (others => '0');
610 txCharDispMode <= (others => '0');
611 txCharDispVal <= (others => '0');
614 if ((i-9) mod 10 = 0) then 615 txCharDispMode((i-9)/10) <= txDataIn(i);
616 elsif ((i-8) mod 10 = 0) then 617 txCharDispVal((i-8)/10) <= txDataIn(i);
619 txDataFull(i-2*(i/10)) <= txDataIn(i);
622 txCharIsKFull <= (others => '0');
624 end process TX_DATA_8B10B_GLUE;
626 -- Mux proper PLL Lock signal onto txPllLock 629 -- Mux proper PLL RefClkLost signal on txPllRefClkLost 632 -- Drive outputs that have internal use 635 -------------------------------------------------------------------------------------------------- 637 -------------------------------------------------------------------------------------------------- 662 -------------------------------------------------------------------------------------------------- 663 -- Synchronize rxFsmResetDone to rxUsrClk to use as reset for external logic. 664 -------------------------------------------------------------------------------------------------- 665 RstSync_Tx :
entity work.
RstSync 675 ------------------------------------------------------------------------------------------------- 677 -- Only used when bypassing buffer 678 ------------------------------------------------------------------------------------------------- 692 txPhAlignEn <= '0';
-- Auto Mode 696 end generate TxAutoPhaseAlignGen;
715 end generate TxManualPhaseAlignGen;
718 txPhaseAlignmentDone <= '1';
724 end generate NoTxPhaseAlignGen;
726 -------------------------------------------------------------------------------------------------- 728 -------------------------------------------------------------------------------------------------- 733 --_______________________ Simulation-Only Attributes ___________________ 735 SIM_RECEIVER_DETECT_PASS =>
("TRUE"
),
737 SIM_TX_EIDLE_DRIVE_LEVEL =>
("X"
),
742 ------------------RX Byte and Word Alignment Attributes--------------- 751 RXSLIDE_AUTO_WAIT =>
7,
753 RX_SIG_VALID_DLY =>
10,
755 ------------------RX 8B/10B Decoder Attributes--------------- 756 -- These don't really matter since RX 8B10B is disabled 762 ------------------------RX Clock Correction Attributes---------------------- 783 ------------------------RX Channel Bonding Attributes---------------------- 802 ---------------------------RX Margin Analysis Attributes---------------------------- 803 ES_CONTROL =>
("000000"
),
804 ES_ERRDET_EN =>
("FALSE"
),
805 ES_EYE_SCAN_EN =>
("TRUE"
),
806 ES_HORZ_OFFSET =>
(x"000"
),
807 ES_PMA_CFG =>
("0000000000"
),
808 ES_PRESCALE =>
("00000"
),
809 ES_QUALIFIER =>
(x"00000000000000000000"
),
810 ES_QUAL_MASK =>
(x"00000000000000000000"
),
811 ES_SDATA_MASK =>
(x"00000000000000000000"
),
812 ES_VERT_OFFSET =>
("000000000"
),
814 -------------------------FPGA RX Interface Attributes------------------------- 815 RX_DATA_WIDTH =>
(RX_DATA_WIDTH_C
),
817 ---------------------------PMA Attributes---------------------------- 818 OUTREFCLK_SEL_INV =>
("11"
),
-- ?? 820 PMA_RSV2 =>
(x"2050"
),
822 PMA_RSV4 =>
(x"00000000"
),
823 RX_BIAS_CFG =>
("000000000100"
),
824 DMONITOR_CFG =>
(x"000A00"
),
827 RX_DEBUG_CFG =>
("000000000000"
),
829 TERM_RCAL_CFG =>
("10000"
),
830 TERM_RCAL_OVRD =>
('0'
),
831 TST_RSV =>
(x"00000000"
),
834 UCODEER_CLR =>
('0'
),
836 ---------------------------PCI Express Attributes---------------------------- 837 PCS_PCIE_EN =>
("FALSE"
),
839 ---------------------------PCS Attributes---------------------------- 840 PCS_RSVD_ATTR => ite
(RX_ALIGN_MODE_G="FIXED_LAT", X"000000000002", X"000000000000"
),
--UG476 pg 241 842 -------------RX Buffer Attributes------------ 844 RXBUF_EIDLE_HI_CNT =>
("1000"
),
845 RXBUF_EIDLE_LO_CNT =>
("0000"
),
847 RX_BUFFER_CFG =>
("000000"
),
848 RXBUF_RESET_ON_CB_CHANGE =>
("TRUE"
),
849 RXBUF_RESET_ON_COMMAALIGN =>
("FALSE"
),
850 RXBUF_RESET_ON_EIDLE =>
("FALSE"
),
851 RXBUF_RESET_ON_RATE_CHANGE =>
("TRUE"
),
852 RXBUFRESET_TIME =>
("00001"
),
853 RXBUF_THRESH_OVFLW =>
(61),
854 RXBUF_THRESH_OVRD =>
("FALSE"
),
855 RXBUF_THRESH_UNDFLW =>
(4),
856 RXDLY_CFG =>
(x"001F"
),
857 RXDLY_LCFG =>
(x"030"
),
858 RXDLY_TAP_CFG =>
(x"0000"
),
859 RXPH_CFG =>
(x"000000"
),
860 RXPHDLY_CFG =>
(x"084020"
),
861 RXPH_MONITOR_SEL =>
("00000"
),
862 RX_XCLK_SEL => RX_XCLK_SEL_C,
863 RX_DDI_SEL =>
("000000"
),
864 RX_DEFER_RESET_BUF_EN =>
("TRUE"
),
866 -----------------------CDR Attributes------------------------- 868 RXCDR_FR_RESET_ON_EIDLE =>
('0'
),
869 RXCDR_HOLD_DURING_EIDLE =>
('0'
),
870 RXCDR_PH_RESET_ON_EIDLE =>
('0'
),
871 RXCDR_LOCK_CFG =>
("010101"
),
873 -------------------RX Initialization and Reset Attributes------------------- 874 RXCDRFREQRESET_TIME =>
("00001"
),
875 RXCDRPHRESET_TIME =>
("00001"
),
876 RXISCANRESET_TIME =>
("00001"
),
877 RXPCSRESET_TIME =>
("00001"
),
878 RXPMARESET_TIME =>
("00011"
),
-- ! Check this 880 -------------------RX OOB Signaling Attributes------------------- 881 RXOOB_CFG =>
("0000110"
),
883 -------------------------RX Gearbox Attributes--------------------------- 884 RXGEARBOX_EN =>
("FALSE"
),
885 GEARBOX_MODE =>
("000"
),
887 -------------------------PRBS Detection Attribute----------------------- 888 RXPRBS_ERR_LOOPBACK =>
('0'
),
890 -------------Power-Down Attributes---------- 891 PD_TRANS_TIME_FROM_P2 =>
(x"03c"
),
892 PD_TRANS_TIME_NONE_P2 =>
(x"3c"
),
893 PD_TRANS_TIME_TO_P2 =>
(x"64"
),
895 -------------RX OOB Signaling Attributes---------- 898 SATA_BURST_SEQ_LEN =>
("1111"
),
899 SATA_BURST_VAL =>
("100"
),
900 SATA_EIDLE_VAL =>
("100"
),
901 SATA_MAX_BURST =>
(8),
902 SATA_MAX_INIT =>
(21),
903 SATA_MAX_WAKE =>
(7),
904 SATA_MIN_BURST =>
(4),
905 SATA_MIN_INIT =>
(12),
906 SATA_MIN_WAKE =>
(4),
908 -------------RX Fabric Clock Output Control Attributes---------- 909 TRANS_TIME_RATE =>
(x"0E"
),
911 --------------TX Buffer Attributes---------------- 913 TXBUF_RESET_ON_RATE_CHANGE =>
("TRUE"
),
914 TXDLY_CFG =>
(x"001F"
),
915 TXDLY_LCFG =>
(x"030"
),
916 TXDLY_TAP_CFG =>
(x"0000"
),
917 TXPH_CFG =>
(x"0780"
),
918 TXPHDLY_CFG =>
(x"084020"
),
919 TXPH_MONITOR_SEL =>
("00000"
),
920 TX_XCLK_SEL => TX_XCLK_SEL_C,
922 -------------------------FPGA TX Interface Attributes------------------------- 923 TX_DATA_WIDTH =>
(TX_DATA_WIDTH_C
),
925 -------------------------TX Configurable Driver Attributes------------------------- 926 TX_DEEMPH0 =>
("00000"
),
927 TX_DEEMPH1 =>
("00000"
),
928 TX_EIDLE_ASSERT_DELAY =>
("110"
),
929 TX_EIDLE_DEASSERT_DELAY =>
("100"
),
930 TX_LOOPBACK_DRIVE_HIZ =>
("FALSE"
),
931 TX_MAINCURSOR_SEL =>
('0'
),
932 TX_DRIVE_MODE =>
("DIRECT"
),
933 TX_MARGIN_FULL_0 =>
("1001110"
),
934 TX_MARGIN_FULL_1 =>
("1001001"
),
935 TX_MARGIN_FULL_2 =>
("1000101"
),
936 TX_MARGIN_FULL_3 =>
("1000010"
),
937 TX_MARGIN_FULL_4 =>
("1000000"
),
938 TX_MARGIN_LOW_0 =>
("1000110"
),
939 TX_MARGIN_LOW_1 =>
("1000100"
),
940 TX_MARGIN_LOW_2 =>
("1000010"
),
941 TX_MARGIN_LOW_3 =>
("1000000"
),
942 TX_MARGIN_LOW_4 =>
("1000000"
),
944 -------------------------TX Gearbox Attributes-------------------------- 945 TXGEARBOX_EN =>
("FALSE"
),
947 -------------------------TX Initialization and Reset Attributes-------------------------- 948 TXPCSRESET_TIME =>
("00001"
),
949 TXPMARESET_TIME =>
("00001"
),
951 -------------------------TX Receiver Detection Attributes-------------------------- 952 TX_RXDETECT_CFG =>
(x"1832"
),
953 TX_RXDETECT_REF =>
("100"
),
955 ----------------------------CPLL Attributes---------------------------- 956 CPLL_CFG =>
(x"BC07DC"
),
959 CPLL_INIT_CFG =>
(x"00001E"
),
960 CPLL_LOCK_CFG =>
(x"01E8"
),
964 SATA_CPLL_CFG =>
("VCO_3000MHZ"
),
966 --------------RX Initialization and Reset Attributes------------- 967 RXDFELPMRESET_TIME =>
("0001111"
),
969 --------------RX Equalizer Attributes------------- 970 RXLPM_HF_CFG =>
("00000011110000"
),
971 RXLPM_LF_CFG =>
("00000011110000"
),
972 RX_DFE_GAIN_CFG =>
(x"020FEA"
),
973 RX_DFE_H2_CFG =>
("000000000000"
),
974 RX_DFE_H3_CFG =>
("000001000000"
),
975 RX_DFE_H4_CFG =>
("00011110000"
),
976 RX_DFE_H5_CFG =>
("00011100000"
),
977 RX_DFE_KL_CFG =>
("0000011111110"
),
979 RX_DFE_LPM_HOLD_DURING_EIDLE =>
('0'
),
980 RX_DFE_UT_CFG =>
("10001111000000000"
),
981 RX_DFE_VP_CFG =>
("00011111100000011"
),
983 -------------------------Power-Down Attributes------------------------- 984 RX_CLKMUX_PD =>
('1'
),
985 TX_CLKMUX_PD =>
('1'
),
987 -------------------------FPGA RX Interface Attribute------------------------- 988 RX_INT_DATAWIDTH => RX_INT_DATAWIDTH_C,
990 -------------------------FPGA TX Interface Attribute------------------------- 991 TX_INT_DATAWIDTH => TX_INT_DATAWIDTH_C,
993 ------------------TX Configurable Driver Attributes--------------- 994 TX_QPI_STATUS_EN =>
('0'
),
996 -------------------------RX Equalizer Attributes-------------------------- 998 RX_DFE_XYD_CFG =>
("0000000000000"
),
1000 -------------------------TX Configurable Driver Attributes-------------------------- 1001 TX_PREDRIVER_MODE =>
('0'
) 1007 ---------------------------------- Channel --------------------------------- 1010 DMONITOROUT =>
open,
1011 GTRESETSEL => '0',
-- Sequential Mode 1012 GTRSVD => "
0000000000000000",
1016 ---------------- Channel - Dynamic Reconfiguration Port (DRP) -------------- 1017 DRPADDR =>
(others => '0'
),
1024 ------------------------- Channel - Ref Clock Ports ------------------------ 1025 GTGREFCLK => gtGRefClk,
1026 GTNORTHREFCLK0 => gtNorthRefClk0,
1027 GTNORTHREFCLK1 => gtNorthRefClk1,
1028 GTREFCLK0 => gtRefClk0,
1029 GTREFCLK1 => gtRefClk1,
1030 GTREFCLKMONITOR =>
open,
1031 GTSOUTHREFCLK0 => gtSouthRefClk0,
1032 GTSOUTHREFCLK1 => gtSouthRefClk1,
1033 -------------------------------- Channel PLL ------------------------------- 1034 CPLLFBCLKLOST =>
open,
1035 CPLLLOCK => cPllLock,
1039 CPLLREFCLKLOST => cPllRefClkLost,
1041 CPLLRESET => cPllReset,
1042 ------------------------------- Eye Scan Ports ----------------------------- 1043 EYESCANDATAERROR =>
open,
1045 EYESCANRESET => '0',
1046 EYESCANTRIGGER => '0',
1047 ------------------------ Loopback and Powerdown Ports ---------------------- 1051 ----------------------------- PCS Reserved Ports --------------------------- 1052 PCSRSVDIN => "
0000000000000000",
1053 PCSRSVDIN2 => "
00000",
1055 ----------------------------- PMA Reserved Ports --------------------------- 1056 PMARSVDIN => "
00000",
1057 PMARSVDIN2 => "
00000",
1058 ------------------------------- Receive Ports ------------------------------ 1062 RXSYSCLKSEL => RX_SYSCLK_SEL_C,
1063 RXUSERRDY => rxUserRdyInt,
1064 -------------- Receive Ports - 64b66b and 64b67b Gearbox Ports ------------- 1065 RXDATAVALID =>
open,
1066 RXGEARBOXSLIP => '0',
1068 RXHEADERVALID =>
open,
1069 RXSTARTOFSEQ =>
open,
1070 ----------------------- Receive Ports - 8b10b Decoder ---------------------- 1072 RXCHARISCOMMA =>
open,
1073 RXCHARISK => rxCharIsKFull,
1074 RXDISPERR => rxDispErrFull,
1075 RXNOTINTABLE => rxDecErrFull,
1076 ------------------- Receive Ports - Channel Bonding Ports ------------------ 1077 RXCHANBONDSEQ =>
open,
1084 ------------------- Receive Ports - Channel Bonding Ports ----------------- 1085 RXCHANISALIGNED =>
open,
1086 RXCHANREALIGN =>
open,
1087 ------------------- Receive Ports - Clock Correction Ports ----------------- 1088 RXCLKCORCNT =>
open,
1089 --------------- Receive Ports - Comma Detection and Alignment -------------- 1090 RXBYTEISALIGNED =>
open,
1091 RXBYTEREALIGN =>
open,
1097 ----------------------- Receive Ports - PRBS Detection --------------------- 1098 RXPRBSCNTRESET => '0',
1101 ------------------- Receive Ports - RX Data Path interface ----------------- 1102 GTRXRESET => gtRxReset,
1103 RXDATA => rxDataFull,
1104 RXOUTCLK => rxOutClk,
1105 RXOUTCLKFABRIC =>
open,
1106 RXOUTCLKPCS =>
open,
1107 RXOUTCLKSEL => to_stdlogicvector
(RX_OUTCLK_SEL_C
),
-- Selects rx recovered clk for rxoutclk 1108 RXPCSRESET => '0',
-- Don't bother with component level resets 1112 ------------ Receive Ports - RX Decision Feedback Equalizer(DFE) ----------- 1113 RXDFEAGCHOLD => rxDfeAgcHold,
1114 RXDFEAGCOVRDEN => '0',
1116 RXDFELFHOLD => rxDfeLfHold,
1118 RXDFELPMRESET => '0',
1119 RXDFETAP2HOLD => '0',
1120 RXDFETAP2OVRDEN => '0',
1121 RXDFETAP3HOLD => '0',
1122 RXDFETAP3OVRDEN => '0',
1123 RXDFETAP4HOLD => '0',
1124 RXDFETAP4OVRDEN => '0',
1125 RXDFETAP5HOLD => '0',
1126 RXDFETAP5OVRDEN => '0',
1128 RXDFEUTOVRDEN => '0',
1130 RXDFEVPOVRDEN => '0',
1133 RXDFEXYDHOLD => '0',
1134 RXDFEXYDOVRDEN => '0',
1135 RXMONITOROUT =>
open,
1136 RXMONITORSEL => "
00",
1139 ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------ 1142 RXCDRFREQRESET => '0',
1144 RXCDRLOCK => rxCdrLock,
1147 RXCDRRESETRSV => '0',
1149 RXELECIDLEMODE => "
11",
1151 RXLPMHFHOLD => rxLpmHfHold,
1152 RXLPMHFOVRDEN => '0',
1153 RXLPMLFHOLD => rxLpmLfHold,
1154 RXLPMLFKLOVRDEN => '0',
1156 -------- Receive Ports - RX Elastic Buffer and Phase Alignment Ports ------- 1159 RXDDIEN =>
RX_DDIEN_G,
-- Don't insert delay in deserializer. Might be wrong. 1161 RXDLYEN => '0',
-- Used for manual phase align 1163 RXDLYSRESET => rxDlySReset,
1164 RXDLYSRESETDONE => rxDlySResetDone,
1166 RXPHALIGNDONE => rxPhAlignDone,
1169 RXPHDLYRESET => '0',
1170 RXPHMONITOR =>
open,
1172 RXPHSLIPMONITOR =>
open,
1174 ------------------------ Receive Ports - RX PLL Ports ---------------------- 1177 RXRESETDONE => rxResetDone,
1178 -------------- Receive Ports - RX Pipe Control for PCI Express ------------- 1181 ----------------- Receive Ports - RX Polarity Control Ports ---------------- 1183 --------------------- Receive Ports - RX Ports for SATA -------------------- 1184 RXCOMINITDET =>
open,
1185 RXCOMSASDET =>
open,
1186 RXCOMWAKEDET =>
open,
1187 ------------------------------- Transmit Ports ----------------------------- 1188 SETERRSTATUS => '0',
1189 TSTIN => "
11111111111111111111",
1191 TXPHDLYTSTCLK => '0',
1192 TXPOSTCURSOR => "
00000",
1193 TXPOSTCURSORINV => '0',
1194 TXPRECURSOR => "
00000",
1195 TXPRECURSORINV => '0',
1199 TXQPISTRONGPDOWN => '0',
1200 TXQPIWEAKPUP => '0',
1201 TXSYSCLKSEL => TX_SYSCLK_SEL_C,
1202 TXUSERRDY => txUserRdyInt,
1203 -------------- Transmit Ports - 64b66b and 64b67b Gearbox Ports ------------ 1204 TXGEARBOXREADY =>
open,
1206 TXSEQUENCE => "
0000000",
1208 ---------------- Transmit Ports - 8b10b Encoder Control Ports -------------- 1209 TX8B10BBYPASS => X"00",
1211 TXCHARDISPMODE => txCharDispMode,
1212 TXCHARDISPVAL => txCharDispVal,
1213 TXCHARISK => txCharIsKFull,
1214 ------------ Transmit Ports - TX Buffer and Phase Alignment Ports ---------- 1217 TXDLYEN => txDlyEn,
-- Manual Align 1220 TXDLYSRESET => txDlySReset,
1221 TXDLYSRESETDONE => txDlySResetDone,
1223 TXPHALIGN => txPhAlign,
-- Manual Align 1224 TXPHALIGNDONE => txPhAlignDone,
1225 TXPHALIGNEN => txPhAlignEn,
-- Enables manual align 1227 TXPHDLYRESET => '0',
-- Use SReset instead 1228 TXPHINIT => txPhInit,
-- Manual Align 1229 TXPHINITDONE => txPhInitDone,
1231 ------------------ Transmit Ports - TX Data Path interface ----------------- 1232 GTTXRESET => gtTxReset,
1233 TXDATA => txDataFull,
1235 TXOUTCLKFABRIC =>
open,
--txGtRefClk, 1236 TXOUTCLKPCS =>
open,
--txOutClkPcsOut, 1237 TXOUTCLKSEL => to_stdlogicvector
(TX_OUTCLK_SEL_C
),
1238 TXPCSRESET => '0',
-- Don't bother with individual resets 1242 ---------------- Transmit Ports - TX Driver and OOB signaling -------------- 1245 TXBUFDIFFCTRL => "
100",
1246 TXDIFFCTRL => "
1000",
1249 TXMAINCURSOR => "
0000000",
1250 TXPDELECIDLEMODE => '0',
1252 ----------------------- Transmit Ports - TX PLL Ports ---------------------- 1255 TXRESETDONE => txResetDone,
1256 --------------------- Transmit Ports - TX PRBS Generator ------------------- 1257 TXPRBSFORCEERR => '0',
1259 -------------------- Transmit Ports - TX Polarity Control ------------------ 1261 ----------------- Transmit Ports - TX Ports for PCI Express ---------------- 1267 --------------------- Transmit Ports - TX Ports for SATA ------------------- 1268 TXCOMFINISH =>
open,
1276 end architecture rtl;
RX_DFE_KL_CFG2_Gbit_vector := x"3008E56A"
TX_EXT_DATA_WIDTH_Ginteger := 16
CPLL_REFCLK_DIV_Ginteger := 1
out RESET_PHALIGNMENTstd_logic := '0'
RX_EXT_DATA_WIDTH_Ginteger := 16
out rxChBondOutslv( 4 downto 0)
out RXDFEAGCHOLDstd_logic
ALIGN_PCOMMA_VALUE_Gbit_vector := "0101111100"
RXSLIDE_MODE_Gstring := "PCS"
CHAN_BOND_SEQ_1_3_Gbit_vector := "0000000000"
CHAN_BOND_SEQ_2_2_Gbit_vector := "0000000000"
ALIGN_COMMA_WORD_Ginteger := 2
in qPllRefClkLostInsl := '0'
out RECCLK_STABLEstd_logic
out rxPhaseAlignmentDonesl
in rxChBondLevelInslv( 2 downto 0) := "000"
CLK_COR_SEQ_1_1_Gbit_vector := "0100000000"
RX_CHAN_BOND_MASTER_Gboolean := false
PMA_RSV_Gbit_vector := X"00018480"
CHAN_BOND_SEQ_1_1_Gbit_vector := "0000000000"
in txPowerDownslv( 1 downto 0) := "00"
CLK_COR_SEQ_2_1_Gbit_vector := "0100000000"
in rxPowerDownslv( 1 downto 0) := "00"
FTS_LANE_DESKEW_CFG_Gbit_vector := "1111"
RX_DFE_LPM_CFG_Gbit_vector := x"0954"
CHAN_BOND_SEQ_2_ENABLE_Gbit_vector := "0000"
TX_8B10B_EN_Gboolean := true
out EXEC_RESTARTstd_logic
out MMCM_RESETstd_logic := '1'
in rxMmcmLockedInsl := '1'
CLK_COR_SEQ_1_ENABLE_Gbit_vector := "1111"
EXAMPLE_SIMULATIONinteger := 0
in PLLREFCLKLOSTstd_logic
COMMA_EN_Gslv( 3 downto 0) := "0011"
COMMA_3_Gslv := "XXXXXXXXXXXXXXXXXXXX"
in RECCLK_STABLEstd_logic
CHAN_BOND_SEQ_1_2_Gbit_vector := "0000000000"
out rxDataOutslv( RX_EXT_DATA_WIDTH_G- 1 downto 0)
CHAN_BOND_SEQ_2_1_Gbit_vector := "0000000000"
DEC_PCOMMA_DETECT_Gstring := "TRUE"
CLK_COR_SEQ_1_3_Gbit_vector := "0000000000"
CLK_COR_SEQ_2_ENABLE_Gbit_vector := "0000"
RX_DISPERR_SEQ_MATCH_Gstring := "TRUE"
FIXED_ALIGN_COMMA_3_Gslv := "XXXXXXXXXXXXXXXXXXXX"
RX_BUF_ADDR_MODE_Gstring := "FAST"
TX_BUF_ADDR_MODE_Gstring := "FAST"
in gtRxRefClkBufgsl := '0'
STABLE_CLOCK_PERIODinteger range 4 to 20:= 8
SIM_GTRESET_SPEEDUP_Gstring := "FALSE"
RX_USRCLK_SRC_Gstring := "RXOUTCLK"
ALIGN_COMMA_ENABLE_Gbit_vector := "1111111111"
out TXUSERRDYstd_logic := '0'
ALIGN_PCOMMA_EN_Gsl := '0'
RXCDR_CFG_Gbit_vector := x"03000023ff40200020"
CLK_COR_MIN_LAT_Ginteger := 7
RETRY_COUNTER_BITWIDTHinteger range 2 to 8:= 8
SIM_VERSION_Gstring := "4.0"
TX_OUTCLK_SRC_Gstring := "PLLREFCLK"
CPLL_REFCLK_SEL_Gbit_vector := "001"
CHAN_BOND_SEQ_2_USE_Gstring := "FALSE"
RX_CLK25_DIV_Ginteger := 5
in rxDataslv( WORD_SIZE_G- 1 downto 0)
CLK_COR_SEQ_1_4_Gbit_vector := "0000000000"
CHAN_BOND_SEQ_1_4_Gbit_vector := "0000000000"
RETRY_COUNTER_BITWIDTHinteger range 2 to 8:= 8
in RECCLK_MONITOR_RESTARTstd_logic := '0'
CLK_COR_SEQ_2_4_Gbit_vector := "0000000000"
CLK_COR_SEQ_2_3_Gbit_vector := "0000000000"
CHAN_BOND_SEQ_2_3_Gbit_vector := "0000000000"
in PHALIGNMENT_DONEstd_logic
in loopbackInslv( 2 downto 0) := "000"
CBCC_DATA_SOURCE_SEL_Gstring := "DECODED"
in txCharIsKInslv(( TX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
ALIGN_PCOMMA_DET_Gstring := "FALSE"
DEC_VALID_COMMA_ONLY_Gstring := "FALSE"
out RETRY_COUNTERstd_logic_vector( RETRY_COUNTER_BITWIDTH- 1 downto 0) :=( others => '0')
out RUN_PHALIGNMENTstd_logic := '0'
STABLE_CLOCK_PERIOD_Greal := 4.0E-9
STABLE_CLOCK_PERIODinteger range 4 to 20:= 8
CLK_COR_KEEP_IDLE_Gstring := "FALSE"
GCLK_COUNTER_UPPER_VALUEinteger := 20
CHAN_BOND_SEQ_2_4_Gbit_vector := "0000000000"
CLK_COR_PRECEDENCE_Gstring := "TRUE"
out rxBufStatusOutslv( 2 downto 0)
FTS_DESKEW_SEQ_ENABLE_Gbit_vector := "1111"
COMMA_2_Gslv := "XXXXXXXXXXXXXXXXXXXX"
COMMA_1_Gslv := "----------1010000011"
out rxCharIsKOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
CHAN_BOND_SEQ_1_ENABLE_Gbit_vector := "1111"
RX_OUTCLK_SRC_Gstring := "PLLREFCLK"
RX_CHAN_BOND_EN_Gboolean := false
COMMA_0_Gslv := "----------0101111100"
out txBufStatusOutslv( 1 downto 0)
out rxDispErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
out PHASE_ALIGNMENT_DONESTD_LOGIC := '0'
RX_INT_DATA_WIDTH_Ginteger := 20
out RESET_PHALIGNMENTstd_logic := '0'
TX_INT_DATA_WIDTH_Ginteger := 20
in rxDataValidInsl := '1'
out RX_FSM_RESET_DONEstd_logic
TX_PHASE_ALIGN_Gstring := "AUTO"
COUNTER_UPPER_VALUEinteger := 20
CLK_CORRECT_USE_Gstring := "FALSE"
RX_BUF_EN_Gboolean := true
FIXED_ALIGN_COMMA_1_Gslv := "----------1010000011"
SIMULATION_Gboolean := false
CHAN_BOND_KEEP_ALIGN_Gstring := "FALSE"
FTS_LANE_DESKEW_EN_Gstring := "FALSE"
FIXED_ALIGN_COMMA_0_Gslv := "----------0101111100"
CLK_COR_SEQ_2_2_Gbit_vector := "0000000000"
in rxChBondInslv( 4 downto 0) := "00000"
out PLL_RESETstd_logic := '0'
TX_CLK25_DIV_Ginteger := 5
RX_ALIGN_MODE_Gstring := "GT"
out MMCM_RESETstd_logic := '1'
CLK_COR_REPEAT_WAIT_Ginteger := 0
FIXED_ALIGN_COMMA_2_Gslv := "XXXXXXXXXXXXXXXXXXXX"
out GTRXRESETstd_logic := '0'
in txDataInslv( TX_EXT_DATA_WIDTH_G- 1 downto 0)
CPLL_FBDIV_45_Ginteger := 5
CLOCK_PULSESinteger := 5000
out RXUSERRDYstd_logic := '0'
out GTTXRESETstd_logic := '0'
in txMmcmLockedInsl := '1'
CLK_COR_MAX_LAT_Ginteger := 9
RX_8B10B_EN_Gboolean := true
ALIGN_MCOMMA_DET_Gstring := "FALSE"
TX_BUF_EN_Gboolean := true
FIXED_COMMA_EN_Gslv( 3 downto 0) := "0011"
ALIGN_COMMA_DOUBLE_Gstring := "FALSE"
in PHALIGNMENT_DONEstd_logic
out rxDecErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
in PLLREFCLKLOSTstd_logic
CLK_COR_SEQ_2_USE_Gstring := "FALSE"
in RUN_PHALIGNMENTSTD_LOGIC
DEC_MCOMMA_DETECT_Gstring := "TRUE"
SHOW_REALIGN_COMMA_Gstring := "FALSE"
CLK_COR_SEQ_1_2_Gbit_vector := "0000000000"
out TX_FSM_RESET_DONEstd_logic
EXAMPLE_SIMULATIONinteger := 0
CLK_COR_SEQ_LEN_Ginteger := 1
ALIGN_MCOMMA_EN_Gsl := '0'
out RUN_PHALIGNMENTstd_logic
out PLL_RESETstd_logic := '0'
gtxe2_channel gtxe2_igtxe2_i
CHAN_BOND_SEQ_LEN_Ginteger := 1
out RETRY_COUNTERstd_logic_vector( RETRY_COUNTER_BITWIDTH- 1 downto 0) :=( others => '0')
RX_CM_TRIM_Gbit_vector := "010"
RX_OS_CFG_Gbit_vector := "0000010000000"
CHAN_BOND_MAX_SKEW_Ginteger := 1
in DLYSRESETDONESTD_LOGIC
ALIGN_MCOMMA_VALUE_Gbit_vector := "1010000011"