1 ------------------------------------------------------------------------------- 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2012-06-29 5 -- Last update: 2016-12-15 6 ------------------------------------------------------------------------------- 7 -- Description: Wrapper for Xilinx 7-series GTP 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 xilinx_7Series_gtp7 53 -- Configure PLL sources 57 -- Configure Data widths 66 -- Configure Buffer usage 77 RX_DDIEN_G : sl := '0';
-- Supposed to be '1' when bypassing rx buffer 80 -- Configure RX comma alignment 94 -- Fixed Latency comma alignment (If RX_ALIGN_MODE_G = "FIXED_LAT") 101 -- Configure RX 8B10B decoding (If RX_8B10B_EN_G = true) 107 -- Configure Clock Correction 128 -- Configure Channel Bonding 157 -- reference clock to check if recovered clock is stable 165 -- Rx Clock related signals 173 -- Rx User Reset Signals 177 -- Manual Comma Align signals 181 -- Rx Data and decode signals 189 -- Rx Channel Bonding 194 -- Tx Clock Related Signals 202 -- Tx User Reset signals 218 -- DRP Interface (stableClkIn Domain) 230 function getOutClkSelVal (OUT_CLK_SRC : )
return is 232 if (OUT_CLK_SRC = "PLLREFCLK") then 234 elsif (OUT_CLK_SRC = "OUTCLKPMA") then 236 elsif (OUT_CLK_SRC = "PLLREFDV2") then 241 end function getOutClkSelVal;
243 function getDataWidth (USE_8B10B : ; EXT_DATA_WIDTH : )
return is 245 if (USE_8B10B = false) then 246 return EXT_DATA_WIDTH;
248 return (EXT_DATA_WIDTH / 8) * 10;
252 -------------------------------------------------------------------------------------------------- 254 -------------------------------------------------------------------------------------------------- 255 constant RX_SYSCLK_SEL_C : slv := ite(RX_PLL_G = "PLL0", "00", "11");
256 constant TX_SYSCLK_SEL_C : slv := ite(TX_PLL_G = "PLL0", "00", "11");
258 constant RX_PLL0_USED_C : := (RX_PLL_G = "PLL0");
259 constant TX_PLL0_USED_C : := (TX_PLL_G = "PLL0");
261 constant RX_XCLK_SEL_C : := ite(RX_BUF_EN_G, "RXREC", "RXUSR");
262 constant TX_XCLK_SEL_C : := ite(TX_BUF_EN_G, "TXOUT", "TXUSR");
270 constant GT_TYPE_C : := "GTP";
274 -------------------------------------------------------------------------------------------------- 276 -------------------------------------------------------------------------------------------------- 278 ---------------------------- 280 signal rxOutClk : sl;
281 signal rxOutClkBufg : sl;
283 signal rxPllResets : slv(1 downto 0);
284 signal rxPllLock : sl;
286 signal gtRxReset : sl;
-- GT GTRXRESET 287 signal rxResetDone : sl;
-- GT RXRESETDONE 288 signal rxUserRdyInt : sl;
-- GT RXUSERRDY 290 signal rxUserResetInt : sl;
291 signal rxFsmResetDone : sl;
292 signal rxRstTxUserRdy : sl;
293 signal rxPmaResetDone : sl;
295 signal rxRecClkStable : sl;
296 signal rxRecClkMonitorRestart : sl;
297 signal rxCdrLockCnt : range 0 to WAIT_TIME_CDRLOCK_C := 0;
299 signal rxRunPhaseAlignment : sl;
300 signal rxPhaseAlignmentDone : sl;
301 signal rxAlignReset : sl;
302 signal rxDlySReset : sl;
-- GT RXDLYSRESET 303 signal rxDlySResetDone : sl;
-- GT RXDLYSRESETDONE 304 signal rxPhAlignDone : sl;
-- GT RXPHALIGNDONE 305 signal rxSlide : sl;
-- GT RXSLIDE 306 signal rxCdrLock : sl;
-- GT RXCDRLOCK 308 signal rxDfeAgcHold : sl := '0';
309 signal rxDfeLfHold : sl := '0';
310 signal rxLpmLfHold : sl := '0';
311 signal rxLpmHfHold : sl := '0';
315 signal rxDataFull : slv(31 downto 0);
-- GT RXDATA 316 signal rxCharIsKFull : slv(3 downto 0);
-- GT RXCHARISK 317 signal rxDispErrFull : slv(3 downto 0);
-- GT RXDISPERR 318 signal rxDecErrFull : slv(3 downto 0);
320 ---------------------------- 322 signal txOutClk : sl;
324 signal txPllResets : slv(1 downto 0);
326 signal gtTxReset : sl;
-- GT GTTXRESET 327 signal txResetDone : sl;
-- GT TXRESETDONE 328 signal txUserRdyInt : sl;
-- GT TXUSERRDY 330 signal txFsmResetDone : sl;
331 signal txPmaResetDone : sl;
334 signal txResetPhaseAlignment : sl;
335 signal txRunPhaseAlignment : sl;
336 signal txPhaseAlignmentDone : sl;
337 signal txPhAlignEn : sl;
-- GT TXPHALIGNEN 338 signal txDlySReset : sl;
-- GT TXDLYSRESET 339 signal txDlySResetDone : sl;
-- GT TXDLYSRESETDONE 340 signal txPhInit : sl;
-- GT TXPHINIT 341 signal txPhInitDone : sl;
-- GT TXPHINITDONE 342 signal txPhAlign : sl;
-- GT TXPHALIGN 343 signal txPhAlignDone : sl;
-- GT TXPHALIGNDONE 344 signal txDlyEn : sl;
-- GT TXDLYEN 347 signal txDataFull : slv(31 downto 0) := (others => '0');
348 signal txCharIsKFull : slv(3 downto 0) := (others => '0');
349 signal txCharDispMode : slv(3 downto 0) := (others => '0');
350 signal txCharDispVal : slv(3 downto 0) := (others => '0');
353 signal drpMuxAddr : slv(8 downto 0);
354 signal drpMuxDo : slv(15 downto 0);
355 signal drpMuxDi : slv(15 downto 0);
356 signal drpMuxRdy : sl;
357 signal drpMuxEn : sl;
358 signal drpMuxWe : sl;
359 signal drpRstAddr : slv(8 downto 0);
360 signal drpRstDo : slv(15 downto 0);
361 signal drpRstDi : slv(15 downto 0);
362 signal drpRstRdy : sl;
363 signal drpRstEn : sl;
364 signal drpRstWe : sl;
365 signal drpRstDone : sl;
378 -------------------------------------------------------------------------------------------------- 380 -------------------------------------------------------------------------------------------------- 381 -- Fit GTP port sizes to selected rx external interface size 383 RX_DATA_8B10B_GLUE :
process (rxCharIsKFull, rxDataFull, rxDecErrFull,
393 if ((i-9) mod 10 = 0) then 394 rxDataInt(i) <= rxDispErrFull((i-9)/10);
395 elsif ((i-8) mod 10 = 0) then 396 rxDataInt(i) <= rxCharIsKFull((i-8)/10);
398 rxDataInt(i) <= rxDataFull(i-2*(i/10));
405 end process RX_DATA_8B10B_GLUE;
408 rxRstTxUserRdy <= txUserRdyInt when RX_USRCLK_SRC_G = "TXOUTCLK" else '1';
410 -- Drive outputs that have internal use 413 -------------------------------------------------------------------------------------------------- 417 -- 3. Wait recclk_stable 420 -- 6. Assert gtRxUserRdy (gtRxUsrClk now usable) 421 -- 7. Wait gtRxResetDone 422 -- 8. Do phase alignment if necessary 423 -- 9. Wait DATA_VALID (aligned) - 100 us 424 --10. Wait 1 us, Set rxFsmResetDone. 425 -------------------------------------------------------------------------------------------------- 446 RECCLK_STABLE => rxRecClkStable,
-- Asserted after 50,000 UI as per DS183 449 TXUSERRDY => rxRstTxUserRdy,
-- Need to know when txUserRdy 459 RXDFEAGCHOLD => rxDfeAgcHold,
-- Explore using these later 465 -------------------------------------------------------------------------------------------------- 466 -- Synchronize rxFsmResetDone to rxUsrClk to use as reset for external logic. 467 -------------------------------------------------------------------------------------------------- 468 RstSync_RxResetDone :
entity work.
RstSync 478 ------------------------------------------------------------------------------------------------- 479 -- Recovered clock monitor 480 ------------------------------------------------------------------------------------------------- 481 BUFG_RX_OUT_CLK : BUFG
486 -- GTX7_RX_REC_CLK_MONITOR_GEN : if (RX_BUF_EN_G = false) generate 487 -- SyncClockFreq_1 : entity work.SyncClockFreq 490 -- REF_CLK_FREQ_G => REF_CLK_FREQ_G, 491 -- REFRESH_RATE_G => 1.0E3, 492 -- CLK_LOWER_LIMIT_G => REF_CLK_FREQ_G * (1.010), 493 -- CLK_UPPER_LIMIT_G => REF_CLK_FREQ_G * (0.990), 494 -- CNT_WIDTH_G => 32) 497 -- freqUpdated => rxRecClkMonitorRestart, 498 -- locked => rxRecClkStable, 501 -- clkIn => rxOutClkBufg, 502 -- locClk => stableClkIn, 503 -- refClk => gtRxRefClkBufg); 507 -- RX_NO_RECCLK_MON_GEN : if (RX_BUF_EN_G) generate 508 rxRecClkMonitorRestart <= '0';
512 if gtRxReset = '1' then 513 rxRecClkStable <= '0' after TPD_G;
514 rxCdrLockCnt <= 0 after TPD_G;
515 elsif rxRecClkStable = '0' then 516 if rxCdrLockCnt = WAIT_TIME_CDRLOCK_C then 517 rxRecClkStable <= '1' after TPD_G;
518 rxCdrLockCnt <= rxCdrLockCnt after TPD_G;
520 rxCdrLockCnt <= rxCdrLockCnt + 1 after TPD_G;
525 -- end generate RX_NO_RECCLK_MON_GEN; 527 ------------------------------------------------------------------------------------------------- 528 -- Phase alignment needed when rx buffer is disabled 529 -- Use normal Auto Phase Align module when RX_BUF_EN_G=false and RX_ALIGN_FIXED_LAT_G=false 530 -- Use special fixed latency aligner when RX_BUF_EN_G=false and RX_ALIGN_FIXED_LAT_G=true 531 ------------------------------------------------------------------------------------------------- 544 rxSlide <= rxSlideIn;
-- User controlled rxSlide 569 rxPhaseAlignmentDone <= '1';
575 -------------------------------------------------------------------------------------------------- 577 -------------------------------------------------------------------------------------------------- 582 txDataFull <= (others => '0');
584 txCharIsKFull <= (others => '0');
586 txCharDispMode <= (others => '0');
587 txCharDispVal <= (others => '0');
590 if ((i-9) mod 10 = 0) then 591 txCharDispMode((i-9)/10) <= txDataIn(i);
592 elsif ((i-8) mod 10 = 0) then 593 txCharDispVal((i-8)/10) <= txDataIn(i);
595 txDataFull(i-2*(i/10)) <= txDataIn(i);
598 txCharIsKFull <= (others => '0');
600 end process TX_DATA_8B10B_GLUE;
602 -- Drive outputs that have internal use 605 -------------------------------------------------------------------------------------------------- 607 -------------------------------------------------------------------------------------------------- 637 -------------------------------------------------------------------------------------------------- 638 -- Synchronize rxFsmResetDone to rxUsrClk to use as reset for external logic. 639 -------------------------------------------------------------------------------------------------- 640 RstSync_Tx :
entity work.
RstSync 650 ------------------------------------------------------------------------------------------------- 652 -- Only used when bypassing buffer 653 ------------------------------------------------------------------------------------------------- 667 txPhAlignEn <= '0';
-- Auto Mode 671 end generate TxAutoPhaseAlignGen;
690 end generate TxManualPhaseAlignGen;
698 txPhaseAlignmentDone <= '1';
699 end generate NoTxPhaseAlignGen;
701 -------------------------------------------------------------------------------------------------- 703 -------------------------------------------------------------------------------------------------- 706 ------------------Simulation-Only Attributes--------------- 707 SIM_RECEIVER_DETECT_PASS =>
("TRUE"
),
709 SIM_TX_EIDLE_DRIVE_LEVEL =>
("X"
),
711 ------------------RX Byte and Word Alignment Attributes--------------- 720 RXSLIDE_AUTO_WAIT =>
7,
722 RX_SIG_VALID_DLY =>
10,
723 ------------------RX 8B/10B Decoder Attributes--------------- 724 -- These don't really matter since RX 8B10B is disabled 729 ------------------------RX Clock Correction Attributes---------------------- 749 ------------------------RX Channel Bonding Attributes---------------------- 767 ---------------------------RX Margin Analysis Attributes---------------------------- 768 ES_CONTROL =>
("000000"
),
769 ES_ERRDET_EN =>
("FALSE"
),
770 ES_EYE_SCAN_EN =>
("FALSE"
),
771 ES_HORZ_OFFSET =>
(x"010"
),
772 ES_PMA_CFG =>
("0000000000"
),
773 ES_PRESCALE =>
("00000"
),
774 ES_QUALIFIER =>
(x"00000000000000000000"
),
775 ES_QUAL_MASK =>
(x"00000000000000000000"
),
776 ES_SDATA_MASK =>
(x"00000000000000000000"
),
777 ES_VERT_OFFSET =>
("000000000"
),
778 -------------------------FPGA RX Interface Attributes------------------------- 779 RX_DATA_WIDTH =>
(RX_DATA_WIDTH_C
),
780 ---------------------------PMA Attributes---------------------------- 781 OUTREFCLK_SEL_INV =>
("11"
),
-- ?? 783 PMA_RSV2 =>
(x"00002040"
),
785 PMA_RSV4 =>
("0000"
),
786 RX_BIAS_CFG =>
("0000111100110011"
),
787 DMONITOR_CFG =>
(x"000A00"
),
789 RX_CM_TRIM =>
("1010"
),
790 RX_DEBUG_CFG =>
("00000000000000"
),
792 TERM_RCAL_CFG =>
("100001000010000"
),
793 TERM_RCAL_OVRD =>
("000"
),
794 TST_RSV =>
(x"00000000"
),
797 UCODEER_CLR =>
('0'
),
798 ---------------------------PCI Express Attributes---------------------------- 799 PCS_PCIE_EN =>
("FALSE"
),
800 ---------------------------PCS Attributes---------------------------- 801 PCS_RSVD_ATTR =>
(x"000000000000"
),
-- From wizard 802 -------------RX Buffer Attributes------------ 804 RXBUF_EIDLE_HI_CNT =>
("1000"
),
805 RXBUF_EIDLE_LO_CNT =>
("0000"
),
807 RX_BUFFER_CFG =>
("000000"
),
808 RXBUF_RESET_ON_CB_CHANGE =>
("TRUE"
),
809 RXBUF_RESET_ON_COMMAALIGN =>
("FALSE"
),
810 RXBUF_RESET_ON_EIDLE =>
("FALSE"
),
811 RXBUF_RESET_ON_RATE_CHANGE =>
("TRUE"
),
812 RXBUFRESET_TIME =>
("00001"
),
813 RXBUF_THRESH_OVFLW =>
(61),
814 RXBUF_THRESH_OVRD =>
("FALSE"
),
815 RXBUF_THRESH_UNDFLW =>
(4),
816 RXDLY_CFG =>
(x"001F"
),
817 RXDLY_LCFG =>
(x"030"
),
818 RXDLY_TAP_CFG =>
(x"0000"
),
819 RXPH_CFG =>
(x"C00002"
),
820 RXPHDLY_CFG =>
(x"084020"
),
821 RXPH_MONITOR_SEL =>
("00000"
),
822 RX_XCLK_SEL => RX_XCLK_SEL_C,
823 RX_DDI_SEL =>
("000000"
),
824 RX_DEFER_RESET_BUF_EN =>
("TRUE"
),
825 -----------------------CDR Attributes------------------------- 827 RXCDR_FR_RESET_ON_EIDLE =>
('0'
),
828 RXCDR_HOLD_DURING_EIDLE =>
('0'
),
829 RXCDR_PH_RESET_ON_EIDLE =>
('0'
),
830 RXCDR_LOCK_CFG =>
("001001"
),
831 -------------------RX Initialization and Reset Attributes------------------- 832 RXCDRFREQRESET_TIME =>
("00001"
),
833 RXCDRPHRESET_TIME =>
("00001"
),
834 RXISCANRESET_TIME =>
("00001"
),
835 RXPCSRESET_TIME =>
("00001"
),
836 RXPMARESET_TIME =>
("00011"
),
-- ! Check this 837 -------------------RX OOB Signaling Attributes------------------- 838 RXOOB_CFG =>
("0000110"
),
839 -------------------------RX Gearbox Attributes--------------------------- 840 RXGEARBOX_EN =>
("FALSE"
),
841 GEARBOX_MODE =>
("000"
),
842 -------------------------PRBS Detection Attribute----------------------- 843 RXPRBS_ERR_LOOPBACK =>
('0'
),
844 -------------Power-Down Attributes---------- 845 PD_TRANS_TIME_FROM_P2 =>
(x"03c"
),
846 PD_TRANS_TIME_NONE_P2 =>
(x"3c"
),
847 PD_TRANS_TIME_TO_P2 =>
(x"64"
),
848 -------------RX OOB Signaling Attributes---------- 851 SATA_BURST_SEQ_LEN =>
("1111"
),
852 SATA_BURST_VAL =>
("100"
),
853 SATA_EIDLE_VAL =>
("100"
),
854 SATA_MAX_BURST =>
(8),
855 SATA_MAX_INIT =>
(21),
856 SATA_MAX_WAKE =>
(7),
857 SATA_MIN_BURST =>
(4),
858 SATA_MIN_INIT =>
(12),
859 SATA_MIN_WAKE =>
(4),
860 -------------RX Fabric Clock Output Control Attributes---------- 861 TRANS_TIME_RATE =>
(x"0E"
),
862 --------------TX Buffer Attributes---------------- 864 TXBUF_RESET_ON_RATE_CHANGE =>
("TRUE"
),
865 TXDLY_CFG =>
(x"001F"
),
866 TXDLY_LCFG =>
(x"030"
),
867 TXDLY_TAP_CFG =>
(x"0000"
),
868 TXPH_CFG =>
(x"0780"
),
869 TXPHDLY_CFG =>
(x"084020"
),
870 TXPH_MONITOR_SEL =>
("00000"
),
871 TX_XCLK_SEL => TX_XCLK_SEL_C,
872 -------------------------FPGA TX Interface Attributes------------------------- 873 TX_DATA_WIDTH => TX_DATA_WIDTH_C,
874 -------------------------TX Configurable Driver Attributes------------------------- 875 TX_DEEMPH0 =>
("000000"
),
876 TX_DEEMPH1 =>
("000000"
),
877 TX_EIDLE_ASSERT_DELAY =>
("110"
),
878 TX_EIDLE_DEASSERT_DELAY =>
("100"
),
879 TX_LOOPBACK_DRIVE_HIZ =>
("FALSE"
),
880 TX_MAINCURSOR_SEL =>
('0'
),
881 TX_DRIVE_MODE =>
("DIRECT"
),
882 TX_MARGIN_FULL_0 =>
("1001110"
),
883 TX_MARGIN_FULL_1 =>
("1001001"
),
884 TX_MARGIN_FULL_2 =>
("1000101"
),
885 TX_MARGIN_FULL_3 =>
("1000010"
),
886 TX_MARGIN_FULL_4 =>
("1000000"
),
887 TX_MARGIN_LOW_0 =>
("1000110"
),
888 TX_MARGIN_LOW_1 =>
("1000100"
),
889 TX_MARGIN_LOW_2 =>
("1000010"
),
890 TX_MARGIN_LOW_3 =>
("1000000"
),
891 TX_MARGIN_LOW_4 =>
("1000000"
),
892 -------------------------TX Gearbox Attributes-------------------------- 893 TXGEARBOX_EN =>
("FALSE"
),
894 -------------------------TX Initialization and Reset Attributes-------------------------- 895 TXPCSRESET_TIME =>
("00001"
),
896 TXPMARESET_TIME =>
("00001"
),
897 -------------------------TX Receiver Detection Attributes-------------------------- 898 TX_RXDETECT_CFG =>
(x"1832"
),
899 TX_RXDETECT_REF =>
("100"
),
900 ------------------ JTAG Attributes --------------- 901 ACJTAG_DEBUG_MODE =>
('0'
),
902 ACJTAG_MODE =>
('0'
),
903 ACJTAG_RESET =>
('0'
),
904 ------------------ CDR Attributes --------------- 905 CFOK_CFG =>
(x"49000040E80"
),
906 CFOK_CFG2 =>
("0100000"
),
907 CFOK_CFG3 =>
("0100000"
),
910 CFOK_CFG6 =>
("0000"
),
911 RXOSCALRESET_TIME =>
("00011"
),
912 RXOSCALRESET_TIMEOUT =>
("00000"
),
913 ------------------ PMA Attributes --------------- 914 CLK_COMMON_SWING =>
('0'
),
915 RX_CLKMUX_EN =>
('1'
),
916 TX_CLKMUX_EN =>
('1'
),
917 ES_CLK_PHASE_SEL =>
('0'
),
918 USE_PCS_CLK_PHASE_SEL =>
('0'
),
921 ------------------ TX Configuration Driver Attributes --------------- 922 TX_PREDRIVER_MODE =>
('0'
),
924 SATA_PLL_CFG =>
("VCO_3000MHZ"
),
925 ------------------ RX Fabric Clock Output Control Attributes --------------- 927 ------------------ TX Fabric Clock Output Control Attributes --------------- 929 ------------------ RX Phase Interpolator Attributes--------------- 930 RXPI_CFG0 =>
("000"
),
933 --------------RX Equalizer Attributes------------- 934 ADAPT_CFG0 =>
(x"00000"
),
935 RXLPMRESET_TIME =>
("0001111"
),
936 RXLPM_BIAS_STARTUP_DISABLE =>
('0'
),
937 RXLPM_CFG =>
("0110"
),
939 RXLPM_CM_CFG =>
('0'
),
940 RXLPM_GC_CFG =>
("111100010"
),
941 RXLPM_GC_CFG2 =>
("001"
),
942 RXLPM_HF_CFG =>
("00001111110000"
),
943 RXLPM_HF_CFG2 =>
("01010"
),
944 RXLPM_HF_CFG3 =>
("0000"
),
945 RXLPM_HOLD_DURING_EIDLE =>
('0'
),
948 RXLPM_LF_CFG =>
("000000001111110000"
),
949 RXLPM_LF_CFG2 =>
("01010"
),
950 RXLPM_OSINT_CFG =>
("000"
),
951 ------------------ TX Phase Interpolator PPM Controller Attributes--------------- 957 TXPI_CFG5 =>
("000"
),
958 TXPI_GREY_SEL =>
('0'
),
959 TXPI_INVSTROBE_SEL =>
('0'
),
960 TXPI_PPMCLK_SEL =>
("TXUSRCLK2"
),
961 TXPI_PPM_CFG =>
(x"00"
),
962 TXPI_SYNFREQ_PPM =>
("000"
),
963 ------------------ LOOPBACK Attributes--------------- 964 LOOPBACK_CFG =>
('0'
),
965 PMA_LOOPBACK_CFG =>
('0'
),
966 ------------------RX OOB Signalling Attributes--------------- 967 RXOOB_CLK_CFG =>
("PMA"
),
968 ------------------TX OOB Signalling Attributes--------------- 970 ------------------RX Buffer Attributes--------------- 971 RXSYNC_MULTILANE =>
('0'
),
972 RXSYNC_OVRD =>
('0'
),
973 RXSYNC_SKIP_DA =>
('0'
),
974 ------------------TX Buffer Attributes--------------- 975 TXSYNC_MULTILANE =>
('0'
),
976 TXSYNC_OVRD =>
('1'
),
977 TXSYNC_SKIP_DA =>
('0'
)) 980 --------------------------------- CPLL Ports ------------------------------- 981 GTRSVD => "
0000000000000000",
982 PCSRSVDIN => "
0000000000000000",
983 TSTIN => "
11111111111111111111",
984 ---------------------------- Channel - DRP Ports -------------------------- 985 DRPADDR => drpMuxAddr,
992 ----------------- FPGA TX Interface Datapath Configuration ---------------- 994 ------------------------ GTPE2_CHANNEL Clocking Ports ---------------------- 999 RXSYSCLKSEL => RX_SYSCLK_SEL_C,
1000 TXSYSCLKSEL => TX_SYSCLK_SEL_C,
1001 ------------------------------- Loopback Ports ----------------------------- 1003 ----------------------------- PCI Express Ports ---------------------------- 1007 ----------------------------- PMA Reserved Ports --------------------------- 1010 ------------------------------ Power-Down Ports ---------------------------- 1013 -------------------------- RX 8B/10B Decoder Ports ------------------------- 1014 SETERRSTATUS => '0',
1015 --------------------- RX Initialization and Reset Ports -------------------- 1016 EYESCANRESET => '0',
1017 RXUSERRDY => rxUserRdyInt,
1018 -------------------------- RX Margin Analysis Ports ------------------------ 1019 EYESCANDATAERROR =>
open,
1021 EYESCANTRIGGER => '0',
1022 ------------------------------- Receive Ports ------------------------------ 1025 DMONFIFORESET => '0',
1027 RXPMARESETDONE => rxPmaResetDone,
1029 ------------------------- Receive Ports - CDR Ports ------------------------ 1030 RXCDRFREQRESET => '0',
1032 RXCDRLOCK => rxCdrLock,
1035 RXCDRRESETRSV => '0',
1036 RXOSCALRESET => '0',
1037 RXOSINTCFG => "
0010",
1038 RXOSINTDONE =>
open,
1040 RXOSINTOVRDEN => '0',
1042 RXOSINTSTARTED =>
open,
1043 RXOSINTSTROBE => '0',
1044 RXOSINTSTROBESTARTED =>
open,
1045 RXOSINTTESTOVRDEN => '0',
1046 ------------------- Receive Ports - Clock Correction Ports ----------------- 1047 RXCLKCORCNT =>
open,
1048 ---------- Receive Ports - FPGA RX Interface Datapath Configuration -------- 1050 ------------------ Receive Ports - FPGA RX Interface Ports ----------------- 1051 RXDATA => rxDataFull,
1054 ------------------- Receive Ports - Pattern Checker Ports ------------------ 1057 ------------------- Receive Ports - Pattern Checker ports ------------------ 1058 RXPRBSCNTRESET => '0',
1059 ------------------ Receive Ports - RX 8B/10B Decoder Ports ----------------- 1060 RXCHARISCOMMA =>
open,
1061 RXCHARISK => rxCharIsKFull,
1062 RXDISPERR => rxDispErrFull,
1063 RXNOTINTABLE => rxDecErrFull,
1064 ------------------------ Receive Ports - RX AFE Ports ---------------------- 1068 PMARSVDOUT0 =>
open,
1069 PMARSVDOUT1 =>
open,
1070 ------------------- Receive Ports - RX Buffer Bypass Ports ----------------- 1073 RXDDIEN =>
RX_DDIEN_G,
-- Don't insert delay in deserializer. Might be wrong. 1075 RXDLYEN => '0',
-- Used for manual phase align 1077 RXDLYSRESET => rxDlySReset,
1078 RXDLYSRESETDONE => rxDlySResetDone,
1080 RXPHALIGNDONE => rxPhAlignDone,
1083 RXPHDLYRESET => '0',
1084 RXPHMONITOR =>
open,
1086 RXPHSLIPMONITOR =>
open,
1093 -------------- Receive Ports - RX Byte and Word Alignment Ports ------------ 1094 RXBYTEISALIGNED =>
open,
1095 RXBYTEREALIGN =>
open,
1101 ------------------ Receive Ports - RX Channel Bonding Ports ---------------- 1102 RXCHANBONDSEQ =>
open,
1109 ----------------- Receive Ports - RX Channel Bonding Ports ---------------- 1110 RXCHANISALIGNED =>
open,
1111 RXCHANREALIGN =>
open,
1112 ------------ Receive Ports - RX Decision Feedback Equalizer(DFE) ----------- 1113 DMONITOROUT =>
open,
1114 RXADAPTSELTEST => "
00000000000000",
1118 RXOSINTNTRLEN => '0',
1119 RXOSINTSTROBEDONE =>
open,
1120 ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------ 1121 RXLPMLFOVRDEN => '0',
1122 RXLPMOSINTNTRLEN => '0',
1123 --------------------- Receive Ports - RX Equalizer Ports ------------------- 1126 --------------------- Receive Ports - RX Equilizer Ports ------------------- 1127 RXLPMHFHOLD => rxLpmHfHold,
1128 RXLPMHFOVRDEN => '0',
1129 RXLPMLFHOLD => rxLpmLfHold,
1130 ------------ Receive Ports - RX Fabric ClocK Output Control Ports ---------- 1132 ----------- Receive Ports - RX Fabric Clock Output Control Ports ---------- 1134 --------------- Receive Ports - RX Fabric Output Control Ports ------------- 1135 RXOUTCLK => rxOutClk,
1136 RXOUTCLKFABRIC =>
open,
--rxGtRefClk, 1137 RXOUTCLKPCS =>
open,
1138 RXOUTCLKSEL => to_stdlogicvector
(RX_OUTCLK_SEL_C
),
-- Selects rx recovered clk for rxoutclk 1139 ---------------------- Receive Ports - RX Gearbox Ports -------------------- 1140 RXDATAVALID =>
open,
1142 RXHEADERVALID =>
open,
1143 RXSTARTOFSEQ =>
open,
1144 --------------------- Receive Ports - RX Gearbox Ports -------------------- 1145 RXGEARBOXSLIP => '0',
1146 ------------- Receive Ports - RX Initialization and Reset Ports ------------ 1147 GTRXRESET => gtRxRst,
1152 ------------------- Receive Ports - RX OOB Signaling ports ----------------- 1153 RXCOMSASDET =>
open,
1154 RXCOMWAKEDET =>
open,
1155 ------------------ Receive Ports - RX OOB Signaling ports ----------------- 1156 RXCOMINITDET =>
open,
1157 ------------------ Receive Ports - RX OOB signalling Ports ----------------- 1159 RXELECIDLEMODE => "
11",
1160 ----------------- Receive Ports - RX Polarity Control Ports ---------------- 1162 -------------- Receive Ports -RX Initialization and Reset Ports ------------ 1163 RXRESETDONE => rxResetDone,
1164 --------------------------- TX Buffer Bypass Ports ------------------------- 1165 TXPHDLYTSTCLK => '0',
1166 ------------------------ TX Configurable Driver Ports ---------------------- 1168 TXPOSTCURSORINV => '0',
1170 TXPRECURSORINV => '0',
1171 -------------------- TX Fabric Clock Output Control Ports ------------------ 1173 --------------------- TX Initialization and Reset Ports -------------------- 1175 GTTXRESET => gtTxReset,
1177 TXUSERRDY => txUserRdyInt,
1178 ----------------- TX Phase Interpolator PPM Controller Ports --------------- 1180 TXPIPPMOVRDEN => '0',
1183 TXPIPPMSTEPSIZE => "
00000",
1184 ---------------------- Transceiver Reset Mode Operation -------------------- 1185 GTRESETSEL => '0',
-- Sequential Mode 1187 ------------------------------- Transmit Ports ----------------------------- 1188 TXPMARESETDONE => txPmaResetDone,
1189 ----------------- Transmit Ports - Configurable Driver Ports --------------- 1192 ------------------ Transmit Ports - FPGA TX Interface Ports ---------------- 1193 TXDATA => txDataFull,
1196 --------------------- Transmit Ports - PCI Express Ports ------------------- 1201 ------------------ Transmit Ports - Pattern Generator Ports ---------------- 1202 TXPRBSFORCEERR => '0',
1203 ------------------ Transmit Ports - TX 8B/10B Encoder Ports ---------------- 1204 TX8B10BBYPASS => x"0",
1205 TXCHARDISPMODE => txCharDispMode,
1206 TXCHARDISPVAL => txCharDispVal,
1207 TXCHARISK => txCharIsKFull,
1208 ------------------ Transmit Ports - TX Buffer Bypass Ports ----------------- 1210 TXDLYEN => txDlyEn,
-- Manual Align 1213 TXDLYSRESET => txDlySReset,
1214 TXDLYSRESETDONE => txDlySResetDone,
1216 TXPHALIGN => txPhAlign,
-- Manual Align 1217 TXPHALIGNDONE => txPhAlignDone,
1218 TXPHALIGNEN => txPhAlignEn,
-- Enables manual align 1220 TXPHDLYRESET => '0',
-- Use SReset instead 1221 TXPHINIT => txPhInit,
-- Manual Align 1222 TXPHINITDONE => txPhInitDone,
1224 ---------------------- Transmit Ports - TX Buffer Ports -------------------- 1226 ------------ Transmit Ports - TX Buffer and Phase Alignment Ports ---------- 1232 --------------- Transmit Ports - TX Configurable Driver Ports -------------- 1235 TXBUFDIFFCTRL => "
100",
1240 TXMAINCURSOR => "
0000000",
1242 ----------- Transmit Ports - TX Fabric Clock Output Control Ports ---------- 1243 TXOUTCLK => txOutClk,
1244 TXOUTCLKFABRIC =>
open,
--txGtRefClk, 1245 TXOUTCLKPCS =>
open,
--txOutClkPcsOut, 1246 TXOUTCLKSEL => to_stdlogicvector
(TX_OUTCLK_SEL_C
),
1248 --------------------- Transmit Ports - TX Gearbox Ports -------------------- 1249 TXGEARBOXREADY =>
open,
1251 TXSEQUENCE => "
0000000",
1253 ------------- Transmit Ports - TX Initialization and Reset Ports ----------- 1256 TXRESETDONE => txResetDone,
1257 ------------------ Transmit Ports - TX OOB signalling Ports ---------------- 1258 TXCOMFINISH =>
open,
1262 TXPDELECIDLEMODE => '0',
1263 ----------------- Transmit Ports - TX Polarity Control Ports --------------- 1265 --------------- Transmit Ports - TX Receiver Detection Ports -------------- 1267 ------------------ Transmit Ports - pattern Generator Ports ---------------- 1268 TXPRBSSEL => "
000"
);
1271 ------------------------- Soft Fix for Production Silicon---------------------- 1288 end generate GEN_RST_SEQ;
1291 gtRxRst <= gtRxReset;
1294 drpRstAddr <= (others => '0');
1296 drpRstDi <= (others => '0');
1297 end generate NO_RST_SEQ;
1300 drpRstRdy <= drpMuxRdy when(drpRstDone = '0') else '0';
1301 drpRdy <= drpMuxRdy when(drpRstDone = '1') else '0';
1302 drpMuxEn <= drpEn when(drpRstDone = '1') else drpRstEn;
1303 drpMuxWe <= drpWe when(drpRstDone = '1') else drpRstWe;
1304 drpMuxAddr <= drpAddr when(drpRstDone = '1') else drpRstAddr;
1305 drpMuxDi <= drpDi when(drpRstDone = '1') else drpRstDi;
1306 drpRstDo <= drpMuxDo;
1309 end architecture rtl;
CHAN_BOND_SEQ_2_1_Gbit_vector := "0000000000"
ALIGN_MCOMMA_DET_Gstring := "FALSE"
DEC_PCOMMA_DETECT_Gstring := "TRUE"
SIM_VERSION_Gstring := "1.0"
out RXDFEAGCHOLDstd_logic := '0'
TX_EXT_DATA_WIDTH_Ginteger := 16
CLK_COR_MIN_LAT_Ginteger := 7
CHAN_BOND_SEQ_1_3_Gbit_vector := "0000000000"
RX_EXT_DATA_WIDTH_Ginteger := 16
TX_INT_DATA_WIDTH_Ginteger := 20
TX_BUF_ADDR_MODE_Gstring := "FAST"
in qPllLockInslv( 1 downto 0)
RX_OS_CFG_Gbit_vector := "0001111110000"
out DRPADDRstd_logic_vector( 8 downto 0)
in txPowerDownslv( 1 downto 0) := "00"
FIXED_ALIGN_COMMA_0_Gslv := "----------0101111100"
FTS_LANE_DESKEW_EN_Gstring := "FALSE"
in qPllRefClkLostInslv( 1 downto 0)
ALIGN_COMMA_WORD_Ginteger := 2
in DRPDOstd_logic_vector( 15 downto 0)
out drpDoslv( 15 downto 0)
RX_BUF_ADDR_MODE_Gstring := "FAST"
CLK_CORRECT_USE_Gstring := "FALSE"
CHAN_BOND_SEQ_2_ENABLE_Gbit_vector := "0000"
ALIGN_COMMA_ENABLE_Gbit_vector := "1111111111"
out TX_FSM_RESET_DONEstd_logic
in drpDislv( 15 downto 0) := X"0000"
in RXPMARESETDONEstd_logic
in rxDataslv( WORD_SIZE_G- 1 downto 0)
out rxCharIsKOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
in rxChBondInslv( 3 downto 0) := "0000"
out RUN_PHALIGNMENTstd_logic := '0'
CLK_COR_SEQ_1_2_Gbit_vector := "0000000000"
TX_PHASE_ALIGN_Gstring := "AUTO"
in txCharIsKInslv(( TX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
out GTRXRESETstd_logic := '0'
out txBufStatusOutslv( 1 downto 0)
in rxPowerDownslv( 1 downto 0) := "00"
FTS_DESKEW_SEQ_ENABLE_Gbit_vector := "1111"
TX_CLK25_DIV_Ginteger := 5
out rxPhaseAlignmentDonesl
CHAN_BOND_SEQ_1_1_Gbit_vector := "0000000000"
out qPllResetOutslv( 1 downto 0)
CLK_COR_SEQ_2_4_Gbit_vector := "0000000000"
ALIGN_MCOMMA_EN_Gsl := '0'
in PLL0REFCLKLOSTstd_logic
FIXED_ALIGN_COMMA_1_Gslv := "----------1010000011"
in PLL0REFCLKLOSTstd_logic
in txMmcmLockedInsl := '1'
CLK_COR_SEQ_LEN_Ginteger := 1
CHAN_BOND_SEQ_2_3_Gbit_vector := "0000000000"
in txPostCursorslv( 4 downto 0) :=( others => '0')
out RESET_PHALIGNMENTstd_logic := '0'
out RESET_PHALIGNMENTstd_logic := '0'
in RUN_PHALIGNMENTstd_logic
CBCC_DATA_SOURCE_SEL_Gstring := "DECODED"
COMMA_1_Gslv := "----------1010000011"
out rxBufStatusOutslv( 2 downto 0)
RX_CHAN_BOND_EN_Gboolean := false
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"
in rxDataValidInsl := '1'
COMMA_0_Gslv := "----------0101111100"
out DRPDIstd_logic_vector( 15 downto 0)
ALIGN_COMMA_DOUBLE_Gstring := "FALSE"
TX_PLL0_USEDboolean := false
CLK_COR_SEQ_2_USE_Gstring := "FALSE"
TX_PLL0_USEDboolean := false
out MMCM_RESETstd_logic := '1'
out MMCM_RESETstd_logic := '1'
CHAN_BOND_SEQ_LEN_Ginteger := 1
CLK_COR_SEQ_2_1_Gbit_vector := "0100000000"
out rxDataOutslv( RX_EXT_DATA_WIDTH_G- 1 downto 0)
TX_BUF_EN_Gboolean := true
FIXED_COMMA_EN_Gslv( 3 downto 0) := "0011"
out GTTXRESETstd_logic := '0'
in txDataInslv( TX_EXT_DATA_WIDTH_G- 1 downto 0)
RXCDR_CFG_Gbit_vector := x"0000107FE206001041010"
in rxMmcmLockedInsl := '1'
in qPllRefClkInslv( 1 downto 0)
out RX_FSM_RESET_DONEstd_logic
in PHALIGNMENT_DONEstd_logic
in PHALIGNMENT_DONEstd_logic
in DLYSRESETDONEstd_logic
ALIGN_PCOMMA_DET_Gstring := "FALSE"
RX_OUTCLK_SRC_Gstring := "PLLREFCLK"
CLK_COR_MAX_LAT_Ginteger := 9
in gtRxRefClkBufgsl := '0'
RX_ALIGN_MODE_Gstring := "GT"
in txDiffCtrlslv( 3 downto 0) := "1000"
out TXUSERRDYstd_logic := '0'
in TXPMARESETDONEstd_logic
CLK_COR_SEQ_1_1_Gbit_vector := "0100000000"
out RXLPMHFHOLDstd_logic := '0'
RX_CHAN_BOND_MASTER_Gboolean := false
in drpAddrslv( 8 downto 0) := "000000000"
CLK_COR_SEQ_1_ENABLE_Gbit_vector := "1111"
RXSLIDE_MODE_Gstring := "PCS"
CLK_COR_PRECEDENCE_Gstring := "TRUE"
CLK_COR_SEQ_1_4_Gbit_vector := "0000000000"
in rxChBondLevelInslv( 2 downto 0) := "000"
CHAN_BOND_SEQ_2_4_Gbit_vector := "0000000000"
RX_PLL0_USEDboolean := false
out RXUSERRDYstd_logic := '0'
FTS_LANE_DESKEW_CFG_Gbit_vector := "1111"
in qPllClkInslv( 1 downto 0)
CLK_COR_KEEP_IDLE_Gstring := "FALSE"
REF_CLK_FREQ_Greal := 125.0E6
RETRY_COUNTER_BITWIDTHinteger range 2 to 8:= 8
ALIGN_PCOMMA_VALUE_Gbit_vector := "0101111100"
RETRY_COUNTER_BITWIDTHinteger range 2 to 8:= 8
RXLPM_INCM_CFG_Gbit := '1'
CHAN_BOND_KEEP_ALIGN_Gstring := "FALSE"
out PLL1_RESETstd_logic := '0'
out PLL1_RESETstd_logic := '0'
out rxDecErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
out rxDispErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
out RUN_PHALIGNMENTstd_logic
CLK_COR_SEQ_2_3_Gbit_vector := "0000000000"
FIXED_ALIGN_COMMA_3_Gslv := "XXXXXXXXXXXXXXXXXXXX"
in loopbackInslv( 2 downto 0) := "000"
DEC_MCOMMA_DETECT_Gstring := "TRUE"
CHAN_BOND_SEQ_2_2_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')
RX_USRCLK_SRC_Gstring := "RXOUTCLK"
CHAN_BOND_MAX_SKEW_Ginteger := 1
out RXLPMLFHOLDstd_logic := '0'
COMMA_2_Gslv := "XXXXXXXXXXXXXXXXXXXX"
ALIGN_MCOMMA_VALUE_Gbit_vector := "1010000011"
CLK_COR_REPEAT_WAIT_Ginteger := 0
SIMULATION_Gboolean := false
in RECCLK_STABLEstd_logic
TX_OUTCLK_SRC_Gstring := "PLLREFCLK"
STABLE_CLOCK_PERIODinteger range 4 to 20:= 8
out rxChBondOutslv( 3 downto 0)
STABLE_CLOCK_PERIODinteger range 4 to 20:= 8
in PLL1REFCLKLOSTstd_logic
out GTRXRESET_OUTstd_logic
in PLL1REFCLKLOSTstd_logic
out PLL0_RESETstd_logic := '0'
out PLL0_RESETstd_logic := '0'
CHAN_BOND_SEQ_1_ENABLE_Gbit_vector := "1111"
CLK_COR_SEQ_2_ENABLE_Gbit_vector := "0000"
FIXED_ALIGN_COMMA_2_Gslv := "XXXXXXXXXXXXXXXXXXXX"
RXLPM_IPCM_CFG_Gbit := '0'
CHAN_BOND_SEQ_1_4_Gbit_vector := "0000000000"
gtpe2_channel gtpe2_igtpe2_i
CLK_COR_SEQ_1_3_Gbit_vector := "0000000000"
RX_BUF_EN_Gboolean := true
STABLE_CLOCK_PERIOD_Greal := 4.0E-9
CHAN_BOND_SEQ_1_2_Gbit_vector := "0000000000"
CHAN_BOND_SEQ_2_USE_Gstring := "FALSE"
SIMULATION_Gboolean := false
in RECCLK_MONITOR_RESTARTstd_logic := '0'
PMA_RSV_Gbit_vector := x"00000333"
out PHASE_ALIGNMENT_DONEstd_logic := '0'
in txPreCursorslv( 4 downto 0) :=( others => '0')
TX_8B10B_EN_Gboolean := true
RX_INT_DATA_WIDTH_Ginteger := 20
CLK_COR_SEQ_2_2_Gbit_vector := "0000000000"
RX_CLK25_DIV_Ginteger := 5
out RXDFELFHOLDstd_logic := '0'
SHOW_REALIGN_COMMA_Gstring := "FALSE"
RX_8B10B_EN_Gboolean := true
ALIGN_PCOMMA_EN_Gsl := '0'
in RXPMARESETDONEstd_logic