1 ------------------------------------------------------------------------------- 2 -- File : Jesd204bRxGtx7.vhd 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2015-04-14 5 -- Last update: 2015-04-14 6 ------------------------------------------------------------------------------- 7 -- Description: JESD204b receiver module containing the gtx7 MGT 8 -- Framework module for JESD receiver module. 9 -- Contains generic settings for GTX7 Receiver 10 ------------------------------------------------------------------------------- 11 -- This file is part of 'SLAC Firmware Standard Library'. 12 -- It is subject to the license terms in the LICENSE.txt file found in the 13 -- top-level directory of this distribution and at: 14 -- https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. 15 -- No part of 'SLAC Firmware Standard Library', including this file, 16 -- may be copied, modified, propagated, or distributed except according to 17 -- the terms contained in the LICENSE.txt file. 18 ------------------------------------------------------------------------------- 24 use ieee.std_logic_1164.
all;
25 use ieee.std_logic_arith.
all;
26 use ieee.std_logic_unsigned.
all;
39 -- Test tx module instead of GTX 42 -- Internal SYSREF SYSREF_GEN_G= TRUE else 47 ---------------------------------------------------------------------------------------------- 59 RXOUT_DIV_G : ;
-- use getGtx7CPllCfg or to getGtx7QPllCfg set 65 RXCDR_CFG_G : := x"03000023ff10400020";
-- Values from coregen DF 69 -- Configure PLL sources 73 -- TX defaults not currently used 82 -- AXI Lite and AXI stream generics 83 ---------------------------------------------------------------------------------------------- 87 ---------------------------------------------------------------------------------------------- 95 ---------------------------------------------------------------------------------------------- 96 -- Recovered clock output 101 stableClk : in sl;
-- GT needs a stable clock to "boot up"(buffered refClkDiv2) 120 -- User clocks and resets 121 ---------------------------------------------------------------------------------------------- 123 devClk2_i : in sl;
-- Device clock divided by 2 also rxUsrClk2In for MGT 127 ------------------------------------------------------------------------------------------------ 131 -- AXI-Lite Register Interface 137 -- AXI Streaming Interface 142 ------------------------------------------------------------------------------------------------ 144 -- SYSREF for subclass 1 fixed latency 147 -- SYSREF out when it is generated internally SYSREF_GEN_G=True 150 -- Synchronization output combined from all receivers 156 -- Rising edge pulses for test 171 -- Rx Channel Bonding 172 -- signal rxChBondLevel : slv(2 downto 0); 177 signal s_gtUserReset : slv(L_G-1 downto 0);
178 signal s_gtReset : slv(L_G-1 downto 0);
180 -- Generated or external 181 signal s_sysRef, s_sysRefDbg : sl;
186 -------------------------------------------------------------------------------------------------- 187 -- JESD receiver core 188 -------------------------------------------------------------------------------------------------- 218 -------------------------------------------------------------------------------------------------- 219 -- Generate the internal or external SYSREF depending on SYSREF_GEN_G 220 -------------------------------------------------------------------------------------------------- 221 -- IF DEF SYSREF_GEN_G 223 -- Generate the sysref internally 224 -- Sysref period will be 8x K_G. 225 SysrefGen_INST:
entity work.LmfcGen
238 end generate SELF_TEST_GEN;
243 end generate OPER_GEN;
245 -------------------------------------------------------------------------------------------------- 246 -- Generate the GTX channels 247 -------------------------------------------------------------------------------------------------- 248 GT_OPER_GEN: if TEST_G = false generate 249 GTX7_CORE_GEN : for I in (L_G-1) downto 0 generate 252 Bond_Master : if (I = 0) generate 253 rxChBondIn(I) <= "00000";
254 end generate Bond_Master;
256 Bond_Slaves : if (I /= 0) generate 257 rxChBondIn(I) <= rxChBondOut(I-1);
258 end generate Bond_Slaves;
260 -- Generate GT reset from user reset and global reset 261 -- devRst_i - is holding the module in reset for one minute after power-up 262 -- User holds the core in reset when the JESD lane is disabled 263 s_gtReset(I) <= s_gtUserReset(I) or devRst_i;
265 Gtx7Core_Inst :
entity work.
Gtx7Core 396 rxPolarityIn => '1',
-- Changed to '1' after receiving weird data (sometimes ok sometimes wrong) 409 txDataIn =>
(r_jesdGtRxArr
(I
).data'range => '0'
),
410 txCharIsKIn =>
(r_jesdGtRxArr
(I
).dataK'range => '0'
),
414 end generate GTX7_CORE_GEN;
415 ----------------------------------------- 416 end generate GT_OPER_GEN;
417 -----------------------------------------------------
ALIGN_MCOMMA_VALUE_Gbit_vector := "1010000011"
CLK_COR_REPEAT_WAIT_Ginteger := 0
TX_OUTCLK_SRC_Gstring := "PLLREFCLK"
RXCDR_CFG_Gbit_vector := x"03000023ff10400020"
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
CPLL_FBDIV_45_Ginteger := 5
TX_PHASE_ALIGN_Gstring := "NONE"
SYSREF_GEN_Gboolean := false
in gtRxPslv( L_G- 1 downto 0)
ALIGN_MCOMMA_EN_Gsl := '0'
RX_OS_CFG_Gbit_vector := "0000010000000"
RX_INT_DATA_WIDTH_Ginteger := 20
L_Gpositive range 1 to 32:= 2
out dataValidVec_oslv( L_G- 1 downto 0)
out rxAxisMasterArr_oAxiStreamMasterArray( L_G- 1 downto 0)
CHAN_BOND_SEQ_2_3_Gbit_vector := "0000000000"
TX_BUF_ADDR_MODE_Gstring := "FULL"
CPLL_REFCLK_SEL_Gbit_vector := "001"
SHOW_REALIGN_COMMA_Gstring := "FALSE"
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
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"
in axilReadMasterAxiLiteReadMasterType
DEC_VALID_COMMA_ONLY_Gstring := "FALSE"
RX_DISPERR_SEQ_MATCH_Gstring := "TRUE"
RX_EQUALIZER_Gstring := "DFE"
DEC_PCOMMA_DETECT_Gstring := "TRUE"
slv( GT_WORD_SIZE_C- 1 downto 0) dataK
TX_BUF_EN_Gboolean := 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'
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"
out rxOutClkOutslv( L_G- 1 downto 0)
CLK_CORRECT_USE_Gstring := "FALSE"
RX_OUTCLK_SRC_Gstring := "PLLREFCLK"
CLK_COR_MAX_LAT_Ginteger := 9
out sampleDataArr_osampleDataArray( L_G- 1 downto 0)
RX_ALIGN_MODE_Gstring := "GT"
in rxCtrlArrAxiStreamCtrlArray( L_G- 1 downto 0)
CLK_COR_SEQ_1_1_Gbit_vector := "0100000000"
RXCDR_CFG_Gbit_vector := x"03000023ff40200020"
out rxCharIsKOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
in axilReadMasterAxiLiteReadMasterType
in gtRxNslv( L_G- 1 downto 0)
CLK_COR_SEQ_1_4_Gbit_vector := "0000000000"
in rxChBondLevelInslv( 2 downto 0) := "000"
CLK_COR_SEQ_1_2_Gbit_vector := "0000000000"
slv( 1 downto 0) := "10" AXI_RESP_SLVERR_C
out gtTxPslv( L_G- 1 downto 0)
CPLL_REFCLK_DIV_Ginteger := 1
out txBufStatusOutslv( 1 downto 0)
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
CLK_COR_KEEP_IDLE_Gstring := "FALSE"
TX_CLK25_DIV_Ginteger := 7
CHAN_BOND_SEQ_1_1_Gbit_vector := "0000000000"
out pulse_oslv( L_G- 1 downto 0)
out axilReadSlaveAxiLiteReadSlaveType
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"
out rxMmcmResetOutslv( 1 downto 0)
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
out leds_oslv( 1 downto 0)
RX_USRCLK_SRC_Gstring := "RXOUTCLK"
CHAN_BOND_MAX_SKEW_Ginteger := 1
RX_DFE_KL_CFG2_Gbit_vector := x"3008E56A"
slv( GT_WORD_SIZE_C- 1 downto 0) dispErr
out rxChBondOutslv( 4 downto 0)
in rxDataValidInsl := '1'
array(natural range <> ) of AxiStreamCtrlType AxiStreamCtrlArray
CHAN_BOND_SEQ_1_ENABLE_Gbit_vector := "1111"
out cPllLockOutslv( L_G- 1 downto 0)
out axilWriteSlaveAxiLiteWriteSlaveType
CLK_COR_SEQ_2_ENABLE_Gbit_vector := "0000"
out pulse_oslv( L_G- 1 downto 0)
CLK_COR_SEQ_1_3_Gbit_vector := "0000000000"
array(natural range <> ) of AxiStreamMasterType AxiStreamMasterArray
CHAN_BOND_SEQ_1_2_Gbit_vector := "0000000000"
out gtRxReset_oslv( L_G- 1 downto 0)
CHAN_BOND_SEQ_2_USE_Gstring := "FALSE"
CHAN_BOND_SEQ_LEN_Ginteger := 1
out qPllResetOutslv( L_G- 1 downto 0)
in axilWriteMasterAxiLiteWriteMasterType
out rxUserRdyOutslv( 1 downto 0)
out gtTxNslv( L_G- 1 downto 0)
in txDataInslv( TX_EXT_DATA_WIDTH_G- 1 downto 0)
TX_8B10B_EN_Gboolean := true
SIM_GTRESET_SPEEDUP_Gstring := "FALSE"
in rxMmcmLockedInsl := '1'
STABLE_CLOCK_PERIOD_Greal := 4.0E-9
CLK_COR_SEQ_2_2_Gbit_vector := "0000000000"
out axilReadSlaveAxiLiteReadSlaveType
array(natural range <> ) of slv( 4 downto 0) Slv5Array
in r_jesdGtRxArrjesdGtRxLaneTypeArray( L_G- 1 downto 0)
RX_CLK25_DIV_Ginteger := 5
ALIGN_PCOMMA_DET_Gstring := "FALSE"
RX_8B10B_EN_Gboolean := true
in gtRxRefClkBufgsl := '0'
CHAN_BOND_SEQ_2_1_Gbit_vector := "0000000000"
ALIGN_MCOMMA_DET_Gstring := "FALSE"
PMA_RSV_Gbit_vector := x"001E7080"
RX_CHAN_BOND_MASTER_Gboolean := false
slv( GT_WORD_SIZE_C- 1 downto 0) decErr
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"
out rxAxisMasterArrAxiStreamMasterArray( L_G- 1 downto 0)
TX_BUF_ADDR_MODE_Gstring := "FAST"
RX_OS_CFG_Gbit_vector := "0000010000000"
CHAN_BOND_SEQ_2_4_Gbit_vector := "0000000000"
array(natural range <> ) of jesdGtRxLaneType jesdGtRxLaneTypeArray
FTS_LANE_DESKEW_EN_Gstring := "FALSE"
FTS_LANE_DESKEW_CFG_Gbit_vector := "1111"
SIM_VERSION_Gstring := "4.0"
ALIGN_PCOMMA_VALUE_Gbit_vector := "0101111100"
out leds_oslv( 1 downto 0)
CHAN_BOND_KEEP_ALIGN_Gstring := "FALSE"
in rxCtrlArr_iAxiStreamCtrlArray( L_G- 1 downto 0) :=( others => AXI_STREAM_CTRL_UNUSED_C)
out rxDecErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
ALIGN_COMMA_WORD_Ginteger := 2
RX_BUF_ADDR_MODE_Gstring := "FAST"
CHAN_BOND_SEQ_2_ENABLE_Gbit_vector := "0000"
TX_OUTCLK_SRC_Gstring := "OUTCLKPMA"
ALIGN_COMMA_ENABLE_Gbit_vector := "1111111111"
out axilWriteSlaveAxiLiteWriteSlaveType
RX_DFE_KL_CFG2_Gbit_vector := X"301148AC"
in axilWriteMasterAxiLiteWriteMasterType
CPLL_REFCLK_SEL_Gbit_vector := "001"
SIM_VERSION_Gstring := "4.0"
out txOutClkOutslv( L_G- 1 downto 0)