1 ------------------------------------------------------------------------------- 2 -- File : Pgp2bGtx7MultiLane.vhd 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2013-06-29 5 -- Last update: 2016-08-24 6 ------------------------------------------------------------------------------- 7 -- Description: Gtx7 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_gtx7 35 ---------------------------------------------------------------------------------------------- 37 ---------------------------------------------------------------------------------------------- 57 -- RX Equalizer Attributes 59 -- Configure PLL sources 63 -- Configure Buffer usage 70 -- Configure Number of Lanes 72 ---------------------------------------------------------------------------------------------- 74 ---------------------------------------------------------------------------------------------- 114 -- Frame Transmit Interface - 1 Lane, Array of 4 VCs 117 -- Frame Receive Interface - 1 Lane, Array of 4 VCs 125 -- AXI-Lite Interface 132 end Pgp2bGtx7MultiLane;
134 -- Define architecture 136 -------------------------------------------------------------------------------------------------- 138 -------------------------------------------------------------------------------------------------- 146 signal gtRxUserReset : sl;
147 signal gtRxUserResetIn : sl;
151 signal phyRxInit : sl;
153 -- Rx Channel Bonding 154 signal rxChBondLevel : slv(2 downto 0);
162 signal gtTxUserResetIn : sl;
173 -- attribute KEEP_HIERARCHY : string; 174 -- attribute KEEP_HIERARCHY of 176 -- Gtx7Core_Inst : label is "TRUE"; 224 -------------------------------------------------------------------------------------------------- 225 -- Generate the GTX channels 226 -------------------------------------------------------------------------------------------------- 227 GTX7_CORE_GEN : for i in (LANE_CNT_G-1) downto 0 generate 229 -- gtx(i).rxChBondLevel <= conv_std_logic_vector((LANE_CNT_G-1-i), 3); 230 Bond_Master : if (i = 0) generate 231 rxChBondIn(i) <= "00000";
232 end generate Bond_Master;
233 Bond_Slaves : if (i /= 0) generate 234 rxChBondIn(i) <= rxChBondOut(i-1);
235 end generate Bond_Slaves;
237 Gtx7Core_Inst :
entity work.
Gtx7Core 412 end generate GTX7_CORE_GEN;
ALIGN_MCOMMA_VALUE_Gbit_vector := "1010000011"
CLK_COR_REPEAT_WAIT_Ginteger := 0
TX_OUTCLK_SRC_Gstring := "PLLREFCLK"
NUM_VC_EN_Ginteger range 1 to 4:= 4
ADDR_WIDTH_Gpositive range 1 to 32:= 16
array(natural range <> ) of AxiStreamSlaveType AxiStreamSlaveArray
TX_ENABLE_Gboolean := true
out pgpRxMastersAxiStreamMasterArray( 3 downto 0)
in gtRxNslv(( LANE_CNT_G- 1) downto 0)
TX_PHASE_ALIGN_Gstring := "AUTO"
in txCharIsKInslv(( TX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
CHAN_BOND_SEQ_1_4_Gbit_vector := "0000000000"
RX_DFE_KL_CFG2_Gbit_vector := x"3010D90C"
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 txPreCursorslv( 4 downto 0) :=( others => '0')
CPLL_FBDIV_45_Ginteger := 5
array(natural range <> ) of AxiLiteWriteSlaveType AxiLiteWriteSlaveArray
TX_ENABLE_Gboolean := true
ALIGN_MCOMMA_EN_Gsl := '0'
out drpAddrslv( ADDR_WIDTH_G- 1 downto 0)
RX_INT_DATA_WIDTH_Ginteger := 20
out pgpTxSlavesAxiStreamSlaveArray( 3 downto 0)
in pgpTxMastersAxiStreamMasterArray( 3 downto 0) :=( others => AXI_STREAM_MASTER_INIT_C)
CHAN_BOND_SEQ_2_3_Gbit_vector := "0000000000"
EN_ARBITRATION_Gboolean := false
in txPostCursorslv( 4 downto 0) :=( others => '0')
CPLL_REFCLK_SEL_Gbit_vector := "001"
DATA_WIDTH_Gpositive range 1 to 32:= 16
SHOW_REALIGN_COMMA_Gstring := "FALSE"
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
CBCC_DATA_SOURCE_SEL_Gstring := "DECODED"
out axilReadSlaveAxiLiteReadSlaveType
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"
RX_DISPERR_SEQ_MATCH_Gstring := "TRUE"
RX_EQUALIZER_Gstring := "DFE"
DEC_PCOMMA_DETECT_Gstring := "TRUE"
in txPostCursorslv( 4 downto 0) :=( others => '0')
CPLL_REFCLK_DIV_Ginteger := 1
ALIGN_COMMA_DOUBLE_Gstring := "FALSE"
in drpDoslv( DATA_WIDTH_G- 1 downto 0)
COMMON_CLK_Gboolean := false
CLK_COR_SEQ_2_USE_Gstring := "FALSE"
CHAN_BOND_SEQ_1_3_Gbit_vector := "0000000000"
array(natural range <> ) of AxiLiteReadMasterType AxiLiteReadMasterArray
in pgpRxInPgp2bRxInType := PGP2B_RX_IN_INIT_C
TX_INT_DATA_WIDTH_Ginteger := 20
in qPllRefClkLostInsl := '0'
in txDiffCtrlslv( 3 downto 0) := "1000"
VC_INTERLEAVE_Ginteger := 1
CLK_COR_SEQ_2_1_Gbit_vector := "0100000000"
out rxDataOutslv( RX_EXT_DATA_WIDTH_G- 1 downto 0)
TX_BUF_EN_Gboolean := true
PMA_RSV_Gbit_vector := X"00018480"
in rxChBondInslv( 4 downto 0) := "00000"
SIM_GTRESET_SPEEDUP_Gstring := "FALSE"
RX_OS_CFG_Gbit_vector := "0000010000000"
RX_ENABLE_Gboolean := true
RXCDR_CFG_Gbit_vector := x"03000023ff40200020"
LANE_CNT_Ginteger range 1 to 2:= 2
CLK_CORRECT_USE_Gstring := "FALSE"
in axilReadMastersAxiLiteReadMasterArray(( LANE_CNT_G- 1) downto 0) :=( others => AXI_LITE_READ_MASTER_INIT_C)
TX_BUF_EN_Gboolean := true
RX_OUTCLK_SRC_Gstring := "PLLREFCLK"
CLK_COR_MAX_LAT_Ginteger := 9
array(natural range <> ) of Pgp2bTxPhyLaneOutType Pgp2bTxPhyLaneOutArray
RX_ALIGN_MODE_Gstring := "GT"
in txDiffCtrlslv( 3 downto 0) := "1000"
out pgpRxOutPgp2bRxOutType
TX_PHASE_ALIGN_Gstring := "NONE"
out axilWriteSlaveAxiLiteWriteSlaveType
in pgpTxMastersAxiStreamMasterArray( 3 downto 0) :=( others => AXI_STREAM_MASTER_INIT_C)
CLK_COR_SEQ_1_1_Gbit_vector := "0100000000"
in drpDislv( 15 downto 0) := X"0000"
RXCDR_CFG_Gbit_vector := x"03000023ff40200020"
RX_ENABLE_Gboolean := true
out rxCharIsKOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
NUM_VC_EN_Ginteger range 1 to 4:= 4
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)
slv( 1 downto 0) := "11" AXI_RESP_DECERR_C
CLK_COR_KEEP_IDLE_Gstring := "FALSE"
PAYLOAD_CNT_TOP_Ginteger := 7
CHAN_BOND_SEQ_1_1_Gbit_vector := "0000000000"
in axilReadMasterAxiLiteReadMasterType
out gtTxNslv(( LANE_CNT_G- 1) downto 0)
CLK_COR_SEQ_2_4_Gbit_vector := "0000000000"
out rxDispErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
CLK_COR_SEQ_2_3_Gbit_vector := "0000000000"
TX_OUTCLK_SRC_Gstring := "OUTCLKPMA"
out phyRxLanesOutPgp2bRxPhyLaneOutArray( 0 to LANE_CNT_G- 1)
in axilWriteMastersAxiLiteWriteMasterArray(( LANE_CNT_G- 1) downto 0) :=( others => AXI_LITE_WRITE_MASTER_INIT_C)
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
in pgpRxCtrlAxiStreamCtrlArray( 3 downto 0) :=( others => AXI_STREAM_CTRL_UNUSED_C)
RX_USRCLK_SRC_Gstring := "RXOUTCLK"
CHAN_BOND_MAX_SKEW_Ginteger := 1
VC_INTERLEAVE_Ginteger := 0
SIM_VERSION_Gstring := "4.0"
RX_DFE_KL_CFG2_Gbit_vector := x"3008E56A"
out rxChBondOutslv( 4 downto 0)
in rxDataValidInsl := '1'
array(natural range <> ) of AxiStreamCtrlType AxiStreamCtrlArray
out axilReadSlavesAxiLiteReadSlaveArray(( LANE_CNT_G- 1) downto 0)
CHAN_BOND_SEQ_1_ENABLE_Gbit_vector := "1111"
TIMEOUT_Gpositive := 4096
array(natural range <> ) of Pgp2bRxPhyLaneOutType Pgp2bRxPhyLaneOutArray
CLK_COR_SEQ_2_ENABLE_Gbit_vector := "0000"
CLK_COR_SEQ_1_3_Gbit_vector := "0000000000"
STABLE_CLOCK_PERIOD_Greal := 6.4E-9
out pgpTxOutPgp2bTxOutType
array(natural range <> ) of AxiStreamMasterType AxiStreamMasterArray
CHAN_BOND_SEQ_1_2_Gbit_vector := "0000000000"
out pgpRxMasterMuxedAxiStreamMasterType
CHAN_BOND_SEQ_2_USE_Gstring := "FALSE"
out pgpTxOutPgp2bTxOutType
CHAN_BOND_SEQ_LEN_Ginteger := 1
in phyRxLanesInPgp2bRxPhyLaneInArray( 0 to LANE_CNT_G- 1) :=( others => PGP2B_RX_PHY_LANE_IN_INIT_C)
out phyTxLanesOutPgp2bTxPhyLaneOutArray( 0 to LANE_CNT_G- 1)
array(natural range <> ) of slv( 15 downto 0) Slv16Array
in txPreCursorslv( 4 downto 0) :=( others => '0')
LANE_CNT_Ginteger range 1 to 2:= 1
RX_CLK25_DIV_Ginteger := 7
in txDataInslv( TX_EXT_DATA_WIDTH_G- 1 downto 0)
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
TX_8B10B_EN_Gboolean := true
in rxMmcmLockedInsl := '1'
in gtRxPslv(( LANE_CNT_G- 1) downto 0)
CLK_COR_SEQ_2_2_Gbit_vector := "0000000000"
array(natural range <> ) of AxiLiteWriteMasterType AxiLiteWriteMasterArray
array(natural range <> ) of slv( 4 downto 0) Slv5Array
RX_CLK25_DIV_Ginteger := 5
CPLL_FBDIV_45_Ginteger := 5
in axilWriteMasterAxiLiteWriteMasterType
ALIGN_PCOMMA_DET_Gstring := "FALSE"
in pgpTxInPgp2bTxInType := PGP2B_TX_IN_INIT_C
PMA_RSV_Gbit_vector := x"00018480"
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
RX_8B10B_EN_Gboolean := true
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_DECERR_C
out pgpRxOutPgp2bRxOutType
in pgpRxCtrlAxiStreamCtrlArray( 3 downto 0)
CHAN_BOND_SEQ_2_1_Gbit_vector := "0000000000"
out pgpRxMastersAxiStreamMasterArray( 3 downto 0)
ALIGN_MCOMMA_DET_Gstring := "FALSE"
TX_BUF_ADDR_MODE_Gstring := "FULL"
PAYLOAD_CNT_TOP_Ginteger := 7
TX_CLK25_DIV_Ginteger := 7
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"
out axilWriteSlavesAxiLiteWriteSlaveArray(( LANE_CNT_G- 1) downto 0)
RX_EXT_DATA_WIDTH_Ginteger := 16
array(natural range <> ) of AxiLiteReadSlaveType AxiLiteReadSlaveArray
RXSLIDE_MODE_Gstring := "PCS"
CLK_COR_PRECEDENCE_Gstring := "TRUE"
TX_BUF_ADDR_MODE_Gstring := "FAST"
RX_OS_CFG_Gbit_vector := "0000010000000"
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_DECERR_C
CHAN_BOND_SEQ_2_4_Gbit_vector := "0000000000"
FTS_LANE_DESKEW_EN_Gstring := "FALSE"
FTS_LANE_DESKEW_CFG_Gbit_vector := "1111"
CPLL_REFCLK_SEL_Gbit_vector := "001"
ALIGN_PCOMMA_VALUE_Gbit_vector := "0101111100"
CHAN_BOND_KEEP_ALIGN_Gstring := "FALSE"
out gtTxPslv(( LANE_CNT_G- 1) downto 0)
out pgpTxSlavesAxiStreamSlaveArray( 3 downto 0)
out rxDecErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
array(natural range <> ) of Pgp2bRxPhyLaneInType Pgp2bRxPhyLaneInArray
ALIGN_COMMA_WORD_Ginteger := 2
out drpDoslv( 15 downto 0)
RX_BUF_ADDR_MODE_Gstring := "FAST"
CHAN_BOND_SEQ_2_ENABLE_Gbit_vector := "0000"
ALIGN_COMMA_ENABLE_Gbit_vector := "1111111111"
out drpDislv( DATA_WIDTH_G- 1 downto 0)
out pgpRxMasterMuxedAxiStreamMasterType
SIM_VERSION_Gstring := "4.0"