1 -------------------------------------------------------------------------------     2 -- File       : Pgp2bGth7MultiLane.vhd     3 -- Company    : SLAC National Accelerator Laboratory     4 -- Created    : 2015-04-01     5 -- Last update: 2016-08-24     6 -------------------------------------------------------------------------------     7 -- Description: Gth7 Variable Latency, multi-lane Module     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;
    28 use UNISIM.VCOMPONENTS.
all;
    31  --! @ingroup protocols_pgp_pgp2b_gth7    35       ----------------------------------------------------------------------------------------------    37       ----------------------------------------------------------------------------------------------    57       -- Configure PLL sources    61       -- Configure Buffer usage    68       -- Configure Number of Lanes    70       ----------------------------------------------------------------------------------------------    72       ----------------------------------------------------------------------------------------------   112       -- Frame Transmit Interface - 1 Lane, Array of 4 VCs   115       -- Frame Receive Interface - 1 Lane, Array of 4 VCs   123       -- AXI-Lite Interface    130 end Pgp2bGth7MultiLane;
   132 -- Define architecture   134    --------------------------------------------------------------------------------------------------   136    --------------------------------------------------------------------------------------------------   144    signal gtRxUserReset   : sl;
   145    signal gtRxUserResetIn : sl;
   149    signal phyRxInit       : sl;
   151    -- Rx Channel Bonding   152    signal rxChBondLevel : slv(2 downto 0);
   160    signal gtTxUserResetIn : sl;
   164    signal stableRst : sl;
   218    --------------------------------------------------------------------------------------------------   219    -- Generate the GTX channels   220    --------------------------------------------------------------------------------------------------   221    GTH7_CORE_GEN : for i in (LANE_CNT_G-1) downto 0 generate   223 --      gtx(i).rxChBondLevel         <= conv_std_logic_vector((LANE_CNT_G-1-i), 3);   224       Bond_Master : if (i = 0) generate   225          rxChBondIn(i) <= "00000";
   226       end generate Bond_Master;
   227       Bond_Slaves : if (i /= 0) generate   228          rxChBondIn(i) <= rxChBondOut(i-1);
   229       end generate Bond_Slaves;
   231       Gth7Core_Inst : 
entity work.
Gth7Core   406    end generate GTH7_CORE_GEN;
   408    U_RstSync : 
entity work.
RstSync RX_OS_CFG_Gbit_vector  :=   "0000010000000"
 
CHAN_BOND_SEQ_1_4_Gbit_vector  :=   "0000000000"
 
CHAN_BOND_SEQ_2_1_Gbit_vector  :=   "0000000000"
 
FTS_DESKEW_SEQ_ENABLE_Gbit_vector  :=   "1111"
 
RX_BUF_EN_Gboolean  :=   true
 
out pgpRxMastersAxiStreamMasterArray( 3 downto  0)  
 
STABLE_CLOCK_PERIOD_Greal  := 4.0E-9
 
ADDR_WIDTH_Gpositive   range  1 to  32:= 16
 
CHAN_BOND_SEQ_2_3_Gbit_vector  :=   "0000000000"
 
array(natural range <> ) of AxiStreamSlaveType   AxiStreamSlaveArray
 
TX_ENABLE_Gboolean  :=   true
 
NUM_VC_EN_Ginteger   range  1 to  4:= 4
 
CBCC_DATA_SOURCE_SEL_Gstring  :=   "DECODED"
 
ALIGN_MCOMMA_VALUE_Gbit_vector  :=   "1010000011"
 
RX_CHAN_BOND_EN_Gboolean  :=   false
 
out rxDecErrOutslv((   RX_EXT_DATA_WIDTH_G/ 8)- 1 downto  0)  
 
in gtRxNslv((   LANE_CNT_G- 1) downto  0)  
 
CLK_COR_KEEP_IDLE_Gstring  :=   "FALSE"
 
TX_ENABLE_Gboolean  :=   true
 
CHAN_BOND_SEQ_1_1_Gbit_vector  :=   "0000000000"
 
in txPreCursorslv( 4 downto  0)  :=( others => '0')
 
CLK_COR_SEQ_2_USE_Gstring  :=   "FALSE"
 
array(natural range <> ) of AxiLiteWriteSlaveType   AxiLiteWriteSlaveArray
 
FTS_LANE_DESKEW_EN_Gstring  :=   "FALSE"
 
out drpAddrslv(   ADDR_WIDTH_G- 1 downto  0)  
 
SIM_VERSION_Gstring  :=   "2.0"
 
TX_8B10B_EN_Gboolean  :=   true
 
in rxMmcmLockedInsl  := '1'
 
CLK_COR_MAX_LAT_Ginteger  := 9
 
out pgpTxSlavesAxiStreamSlaveArray( 3 downto  0)  
 
CHAN_BOND_SEQ_2_2_Gbit_vector  :=   "0000000000"
 
TX_BUF_EN_Gboolean  :=   true
 
RX_CLK25_DIV_Ginteger  := 5
 
EN_ARBITRATION_Gboolean  :=   false
 
DATA_WIDTH_Gpositive   range  1 to  32:= 16
 
AxiStreamMasterType  :=(tValid  => '0',tData  =>( others => '0'),tStrb  =>( others => '1'),tKeep  =>( others => '1'),tLast  => '0',tDest  =>( others => '0'),tId  =>( others => '0'),tUser  =>( others => '0')) AXI_STREAM_MASTER_INIT_C
 
out axilReadSlaveAxiLiteReadSlaveType  
 
TX_PHASE_ALIGN_Gstring  :=   "AUTO"
 
STABLE_CLOCK_PERIOD_Greal  := 4.0E-9
 
in pgpTxMastersAxiStreamMasterArray( 3 downto  0)  :=( others =>   AXI_STREAM_MASTER_INIT_C)
 
in txPostCursorslv( 4 downto  0)  :=( others => '0')
 
CLK_CORRECT_USE_Gstring  :=   "FALSE"
 
in drpDoslv(   DATA_WIDTH_G- 1 downto  0)  
 
COMMON_CLK_Gboolean  :=   false
 
RX_CHAN_BOND_MASTER_Gboolean  :=   false
 
ALIGN_PCOMMA_EN_Gsl  := '0'
 
in txDiffCtrlslv( 3 downto  0)  :=   "1000"
 
CPLL_REFCLK_DIV_Ginteger  := 1
 
array(natural range <> ) of AxiLiteReadMasterType   AxiLiteReadMasterArray
 
in pgpRxInPgp2bRxInType  :=   PGP2B_RX_IN_INIT_C
 
in drpDislv( 15 downto  0)  := X"0000"
 
ALIGN_COMMA_DOUBLE_Gstring  :=   "FALSE"
 
VC_INTERLEAVE_Ginteger  := 1
 
in txCharIsKInslv((   TX_EXT_DATA_WIDTH_G/ 8)- 1 downto  0)  
 
SIM_GTRESET_SPEEDUP_Gstring  :=   "FALSE"
 
RX_OS_CFG_Gbit_vector  :=   "0000010000000"
 
RX_EQUALIZER_Gstring  :=   "LPM"
 
TX_INT_DATA_WIDTH_Ginteger  := 20
 
in rxChBondLevelInslv( 2 downto  0)  :=   "000"
 
in qPllRefClkLostInsl  := '0'
 
RX_OUTCLK_SRC_Gstring  :=   "PLLREFCLK"
 
out rxBufStatusOutslv( 2 downto  0)  
 
RX_ENABLE_Gboolean  :=   true
 
in axilReadMastersAxiLiteReadMasterArray((   LANE_CNT_G- 1) downto  0)  :=( others =>   AXI_LITE_READ_MASTER_INIT_C)
 
SIM_GTRESET_SPEEDUP_Gstring  :=   "FALSE"
 
TX_BUF_EN_Gboolean  :=   true
 
out txBufStatusOutslv( 1 downto  0)  
 
ALIGN_COMMA_WORD_Ginteger  := 2
 
RX_BUF_ADDR_MODE_Gstring  :=   "FAST"
 
in rxChBondInslv( 4 downto  0)  :=   "00000"
 
TX_PHASE_ALIGN_Gstring  :=   "NONE"
 
RX_8B10B_EN_Gboolean  :=   true
 
LANE_CNT_Ginteger   range  1 to  2:= 2
 
array(natural range <> ) of Pgp2bTxPhyLaneOutType   Pgp2bTxPhyLaneOutArray
 
out pgpRxOutPgp2bRxOutType  
 
RX_ENABLE_Gboolean  :=   true
 
out axilWriteSlaveAxiLiteWriteSlaveType  
 
SIM_VERSION_Gstring  :=   "2.0"
 
in pgpTxMastersAxiStreamMasterArray( 3 downto  0)  :=( others =>   AXI_STREAM_MASTER_INIT_C)
 
CLK_COR_SEQ_2_3_Gbit_vector  :=   "0000000000"
 
in txPostCursorslv( 4 downto  0)  :=( others => '0')
 
CPLL_REFCLK_SEL_Gbit_vector  :=   "001"
 
CLK_COR_REPEAT_WAIT_Ginteger  := 0
 
NUM_VC_EN_Ginteger   range  1 to  4:= 4
 
PMA_RSV_Gbit_vector  := x"00000080"
 
TX_EXT_DATA_WIDTH_Ginteger  := 16
 
in txMmcmLockedInsl  := '1'
 
DEC_VALID_COMMA_ONLY_Gstring  :=   "FALSE"
 
RX_EXT_DATA_WIDTH_Ginteger  := 16
 
CHAN_BOND_MAX_SKEW_Ginteger  := 1
 
out rxCharIsKOutslv((   RX_EXT_DATA_WIDTH_G/ 8)- 1 downto  0)  
 
CHAN_BOND_SEQ_1_3_Gbit_vector  :=   "0000000000"
 
slv( 1 downto  0)  :=   "11" AXI_RESP_DECERR_C
 
out gtTxNslv((   LANE_CNT_G- 1) downto  0)  
 
PAYLOAD_CNT_TOP_Ginteger  := 7
 
RXCDR_CFG_Gbit_vector  := x"0002007FE1000C2200018"
 
in axilReadMasterAxiLiteReadMasterType  
 
TX_OUTCLK_SRC_Gstring  :=   "OUTCLKPMA"
 
out rxDataOutslv(   RX_EXT_DATA_WIDTH_G- 1 downto  0)  
 
in txDiffCtrlslv( 3 downto  0)  :=   "1000"
 
CPLL_REFCLK_DIV_Ginteger  := 1
 
CHAN_BOND_SEQ_1_2_Gbit_vector  :=   "0000000000"
 
out phyRxLanesOutPgp2bRxPhyLaneOutArray( 0 to    LANE_CNT_G- 1)  
 
ALIGN_COMMA_ENABLE_Gbit_vector  :=   "1111111111"
 
in axilWriteMastersAxiLiteWriteMasterArray((   LANE_CNT_G- 1) downto  0)  :=( others =>   AXI_LITE_WRITE_MASTER_INIT_C)
 
in pgpRxCtrlAxiStreamCtrlArray( 3 downto  0)  :=( others =>   AXI_STREAM_CTRL_UNUSED_C)
 
out rxDispErrOutslv((   RX_EXT_DATA_WIDTH_G/ 8)- 1 downto  0)  
 
CLK_COR_SEQ_1_4_Gbit_vector  :=   "0000000000"
 
out axilReadSlavesAxiLiteReadSlaveArray((   LANE_CNT_G- 1) downto  0)  
 
in drpAddrslv( 8 downto  0)  :=   "000000000"
 
array(natural range <> ) of AxiStreamCtrlType   AxiStreamCtrlArray
 
CLK_COR_PRECEDENCE_Gstring  :=   "TRUE"
 
VC_INTERLEAVE_Ginteger  := 0
 
DEC_PCOMMA_DETECT_Gstring  :=   "TRUE"
 
TIMEOUT_Gpositive  := 4096
 
PMA_RSV_Gbit_vector  := X"00000080"
 
RXCDR_CFG_Gbit_vector  := x"0002007FE1000C2200018"
 
CLK_COR_SEQ_1_1_Gbit_vector  :=   "0100000000"
 
array(natural range <> ) of Pgp2bRxPhyLaneOutType   Pgp2bRxPhyLaneOutArray
 
out pgpTxOutPgp2bTxOutType  
 
out pgpTxOutPgp2bTxOutType  
 
in rxDataValidInsl  := '1'
 
array(natural range <> ) of AxiStreamMasterType   AxiStreamMasterArray
 
CLK_COR_SEQ_1_2_Gbit_vector  :=   "0000000000"
 
in phyRxLanesInPgp2bRxPhyLaneInArray( 0 to    LANE_CNT_G- 1)  :=( others =>   PGP2B_RX_PHY_LANE_IN_INIT_C)
 
CLK_COR_SEQ_2_2_Gbit_vector  :=   "0000000000"
 
out phyTxLanesOutPgp2bTxPhyLaneOutArray( 0 to    LANE_CNT_G- 1)  
 
array(natural range <> ) of slv( 15 downto  0)   Slv16Array
 
CLK_COR_SEQ_2_1_Gbit_vector  :=   "0100000000"
 
out pgpRxMasterMuxedAxiStreamMasterType  
 
in loopbackInslv( 2 downto  0)  :=   "000"
 
DEC_MCOMMA_DETECT_Gstring  :=   "TRUE"
 
LANE_CNT_Ginteger   range  1 to  2:= 1
 
RXSLIDE_MODE_Gstring  :=   "PCS"
 
CHAN_BOND_SEQ_2_ENABLE_Gbit_vector  :=   "0000"
 
AxiLiteReadMasterType  :=(araddr  =>( others => '0'),arprot  =>( others => '0'),arvalid  => '0',rready  => '1') AXI_LITE_READ_MASTER_INIT_C
 
array(natural range <> ) of slv( 8 downto  0)   Slv9Array
 
CHAN_BOND_SEQ_LEN_Ginteger  := 1
 
RX_CLK25_DIV_Ginteger  := 7
 
CLK_COR_SEQ_2_4_Gbit_vector  :=   "0000000000"
 
array(natural range <> ) of AxiLiteWriteMasterType   AxiLiteWriteMasterArray
 
array(natural range <> ) of slv( 4 downto  0)   Slv5Array
 
out pgpRxOutPgp2bRxOutType  
 
in gtRxPslv((   LANE_CNT_G- 1) downto  0)  
 
in txDataInslv(   TX_EXT_DATA_WIDTH_G- 1 downto  0)  
 
CHAN_BOND_SEQ_1_ENABLE_Gbit_vector  :=   "1111"
 
in axilWriteMasterAxiLiteWriteMasterType  
 
in pgpTxInPgp2bTxInType  :=   PGP2B_TX_IN_INIT_C
 
TX_BUF_ADDR_MODE_Gstring  :=   "FULL"
 
PAYLOAD_CNT_TOP_Ginteger  := 7
 
AxiLiteWriteMasterType  :=(awaddr  =>( others => '0'),awprot  =>( others => '0'),awvalid  => '0',wdata  =>( others => '0'),wstrb  =>( others => '1'),wvalid  => '0',bready  => '1') AXI_LITE_WRITE_MASTER_INIT_C
 
AXI_ERROR_RESP_Gslv( 1 downto  0)  :=   AXI_RESP_DECERR_C
 
CPLL_FBDIV_45_Ginteger  := 5
 
out pgpRxMastersAxiStreamMasterArray( 3 downto  0)  
 
CLK_COR_SEQ_LEN_Ginteger  := 1
 
TX_CLK25_DIV_Ginteger  := 7
 
out drpDoslv( 15 downto  0)  
 
CHAN_BOND_SEQ_2_USE_Gstring  :=   "FALSE"
 
RX_USRCLK_SRC_Gstring  :=   "RXOUTCLK"
 
TX_BUF_ADDR_MODE_Gstring  :=   "FAST"
 
ALIGN_PCOMMA_DET_Gstring  :=   "FALSE"
 
in pgpRxCtrlAxiStreamCtrlArray( 3 downto  0)  
 
out axilWriteSlavesAxiLiteWriteSlaveArray((   LANE_CNT_G- 1) downto  0)  
 
in txPreCursorslv( 4 downto  0)  :=( others => '0')
 
out rxChBondOutslv( 4 downto  0)  
 
TX_CLK25_DIV_Ginteger  := 5
 
AXI_ERROR_RESP_Gslv( 1 downto  0)  :=   AXI_RESP_DECERR_C
 
ALIGN_MCOMMA_DET_Gstring  :=   "FALSE"
 
array(natural range <> ) of AxiLiteReadSlaveType   AxiLiteReadSlaveArray
 
CPLL_FBDIV_45_Ginteger  := 5
 
ALIGN_PCOMMA_VALUE_Gbit_vector  :=   "0101111100"
 
CLK_COR_SEQ_2_ENABLE_Gbit_vector  :=   "0000"
 
CPLL_REFCLK_SEL_Gbit_vector  :=   "001"
 
CHAN_BOND_KEEP_ALIGN_Gstring  :=   "FALSE"
 
CLK_COR_SEQ_1_3_Gbit_vector  :=   "0000000000"
 
CLK_COR_SEQ_1_ENABLE_Gbit_vector  :=   "1111"
 
out gtTxPslv((   LANE_CNT_G- 1) downto  0)  
 
out pgpTxSlavesAxiStreamSlaveArray( 3 downto  0)  
 
RX_INT_DATA_WIDTH_Ginteger  := 20
 
CHAN_BOND_SEQ_2_4_Gbit_vector  :=   "0000000000"
 
array(natural range <> ) of Pgp2bRxPhyLaneInType   Pgp2bRxPhyLaneInArray
 
FTS_LANE_DESKEW_CFG_Gbit_vector  :=   "1111"
 
SHOW_REALIGN_COMMA_Gstring  :=   "FALSE"
 
TX_OUTCLK_SRC_Gstring  :=   "PLLREFCLK"
 
out drpDislv(   DATA_WIDTH_G- 1 downto  0)  
 
RX_ALIGN_MODE_Gstring  :=   "GT"
 
CLK_COR_MIN_LAT_Ginteger  := 7
 
RX_DISPERR_SEQ_MATCH_Gstring  :=   "TRUE"
 
ALIGN_MCOMMA_EN_Gsl  := '0'
 
out pgpRxMasterMuxedAxiStreamMasterType