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"