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