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"