1 ------------------------------------------------------------------------------- 2 -- File : Jesd204bTxGtx7.vhd 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2015-04-14 5 -- Last update: 2017-05-09 6 ------------------------------------------------------------------------------- 7 -- Description: JESD204b module containing the gtx7 MGT transmitter module 8 -- Framework module for JESD. 9 -- Contains generic settings for GTX7 L_G Transmitters 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 -- Internal SYSREF SYSREF_GEN_G= TRUE else 43 -- Simulation disconnect the GTX 48 ---------------------------------------------------------------------------------------------- 60 RXOUT_DIV_G : := 4;
-- use getGtx7CPllCfg or to getGtx7QPllCfg set 66 RXCDR_CFG_G : := x"03000023ff10400020";
-- Values from coregen 70 -- Configure PLL sources 74 -- TX defaults not currently used 83 -- AXI Lite and AXI stream generics 84 ---------------------------------------------------------------------------------------------- 88 ---------------------------------------------------------------------------------------------- 96 ---------------------------------------------------------------------------------------------- 98 stableClk : in sl;
-- GT needs a stable clock to "boot up"(buffered refClkDiv2) 113 -- User clocks and resets 114 ---------------------------------------------------------------------------------------------- 116 devClk2_i : in sl;
-- Device clock divided by 2 also rxUsrClk2In for MGT 120 ------------------------------------------------------------------------------------------------ 124 -- AXI-Lite RX Register Interface 130 -- AXI Streaming Interface 134 -- External sample data input 138 ------------------------------------------------------------------------------------------------ 140 -- SYSREF for subclass 1 fixed latency 143 -- SYSREF out when it is generated internally SYSREF_GEN_G=True 146 -- Synchronization output combined from all receivers 162 -- Rx Channel Bonding 163 -- signal rxChBondLevel : slv(2 downto 0); 168 signal s_gtRxUserReset : slv(L_G-1 downto 0);
169 signal s_gtRxReset : slv(L_G-1 downto 0);
171 signal s_gtTxUserReset : slv(L_G-1 downto 0);
172 signal s_gtTxReset : slv(L_G-1 downto 0);
174 signal s_gtTxReady : slv(L_G-1 downto 0);
176 -- Generated or external 177 signal s_sysRef : sl;
180 -- Check generics TODO add others 181 assert (1 <= L_G and L_G <= 8) report "L_G must be between 1 and 8" severity failure;
183 -------------------------------------------------------------------------------------------------- 184 -- JESD transmitter core 185 -------------------------------------------------------------------------------------------------- 214 -------------------------------------------------------------------------------------------------- 215 -- Generate the internal or external SYSREF depending on SYSREF_GEN_G 216 -------------------------------------------------------------------------------------------------- 217 -- IF DEF SYSREF_GEN_G 219 -- Generate the sysref internally 220 -- Sysref period will be 8x K_G. 221 SysrefGen_INST:
entity work.LmfcGen
234 end generate SELF_TEST_GEN;
239 end generate OPER_GEN;
241 -------------------------------------------------------------------------------------------------- 242 -- Generate the GTX channels 243 -------------------------------------------------------------------------------------------------- 244 GT_OPER_GEN: if SIM_G = false generate 245 GTX7_CORE_GEN : for I in (L_G-1) downto 0 generate 247 Bond_Master : if (I = 0) generate 248 rxChBondIn(I) <= "00000";
249 end generate Bond_Master;
250 Bond_Slaves : if (I /= 0) generate 251 rxChBondIn(I) <= rxChBondOut(I-1);
252 end generate Bond_Slaves;
254 -- Generate GT reset from user reset and global reset 255 -- devRst_i - is holding the module in reset for one minute after power-up 256 -- User holds the core in reset when the JESD lane is disabled 257 s_gtRxReset(I) <= s_gtRxUserReset(I) or devRst_i;
258 s_gtTxReset(I) <= s_gtTxUserReset(I) or devRst_i;
260 Gtx7Core_Inst :
entity work.
Gtx7Core 410 end generate GTX7_CORE_GEN;
411 ----------------------------------------- 412 end generate GT_OPER_GEN;
413 ----------------------------------------------------- TX_OUTCLK_SRC_Gstring := "OUTCLKPMA"
CPLL_FBDIV_45_Ginteger := 4
ALIGN_MCOMMA_VALUE_Gbit_vector := "1010000011"
CLK_COR_REPEAT_WAIT_Ginteger := 0
RX_DFE_KL_CFG2_Gbit_vector := X"301148AC"
TX_OUTCLK_SRC_Gstring := "PLLREFCLK"
array(natural range <> ) of slv(( GT_WORD_SIZE_C* 8)- 1 downto 0) sampleDataArray
array(natural range <> ) of AxiStreamSlaveType AxiStreamSlaveArray
TX_PHASE_ALIGN_Gstring := "NONE"
TX_PHASE_ALIGN_Gstring := "AUTO"
in gtRxPslv( L_G- 1 downto 0)
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
RX_OS_CFG_Gbit_vector := "0000010000000"
STABLE_CLOCK_PERIOD_Greal := 4.0E-9
RXCDR_CFG_Gbit_vector := x"03000023ff10400020"
CPLL_FBDIV_45_Ginteger := 5
ALIGN_MCOMMA_EN_Gsl := '0'
in axilReadMasterAxiLiteReadMasterType
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
RX_INT_DATA_WIDTH_Ginteger := 20
CHAN_BOND_SEQ_2_3_Gbit_vector := "0000000000"
in axilReadMasterTxAxiLiteReadMasterType
CPLL_REFCLK_SEL_Gbit_vector := "001"
SHOW_REALIGN_COMMA_Gstring := "FALSE"
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 extSampleDataArray_isampleDataArray( L_G- 1 downto 0)
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_ADDR_MODE_Gstring := "FULL"
ALIGN_COMMA_DOUBLE_Gstring := "FALSE"
CLK_COR_SEQ_2_USE_Gstring := "FALSE"
L_Gpositive range 1 to 32:= 2
CHAN_BOND_SEQ_1_3_Gbit_vector := "0000000000"
TX_INT_DATA_WIDTH_Ginteger := 20
in qPllRefClkLostInsl := '0'
SYSREF_GEN_Gboolean := true
TX_BUF_EN_Gboolean := true
out r_jesdGtTxArrjesdGtTxLaneTypeArray( L_G- 1 downto 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 gtTxReset_oslv( L_G- 1 downto 0)
CLK_CORRECT_USE_Gstring := "FALSE"
out pulse_oslv( L_G- 1 downto 0)
RX_OUTCLK_SRC_Gstring := "PLLREFCLK"
CLK_COR_MAX_LAT_Ginteger := 9
out axilReadSlaveTxAxiLiteReadSlaveType
RX_ALIGN_MODE_Gstring := "GT"
in gtRxNslv( L_G- 1 downto 0)
array(natural range <> ) of jesdGtTxLaneType jesdGtTxLaneTypeArray
CLK_COR_SEQ_1_1_Gbit_vector := "0100000000"
out axilReadSlaveAxiLiteReadSlaveType
out gtTxPslv( L_G- 1 downto 0)
RXCDR_CFG_Gbit_vector := x"03000023ff40200020"
out rxCharIsKOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
TX_CLK25_DIV_Ginteger := 7
CLK_COR_SEQ_1_4_Gbit_vector := "0000000000"
in rxChBondLevelInslv( 2 downto 0) := "000"
out pulse_oslv( L_G- 1 downto 0)
CLK_COR_SEQ_1_2_Gbit_vector := "0000000000"
slv( 1 downto 0) := "10" AXI_RESP_SLVERR_C
CPLL_REFCLK_DIV_Ginteger := 1
out txBufStatusOutslv( 1 downto 0)
RX_CLK25_DIV_Ginteger := 4
CLK_COR_KEEP_IDLE_Gstring := "FALSE"
CHAN_BOND_SEQ_1_1_Gbit_vector := "0000000000"
CLK_COR_SEQ_2_4_Gbit_vector := "0000000000"
out rxDispErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
out leds_oslv( 1 downto 0)
CLK_COR_SEQ_2_3_Gbit_vector := "0000000000"
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 extSampleDataArray_isampleDataArray( L_G- 1 downto 0)
RX_USRCLK_SRC_Gstring := "RXOUTCLK"
CHAN_BOND_MAX_SKEW_Ginteger := 1
RX_DFE_KL_CFG2_Gbit_vector := x"3008E56A"
out rxChBondOutslv( 4 downto 0)
in rxDataValidInsl := '1'
in txAxisMasterArr_iAxiStreamMasterArray( L_G- 1 downto 0) :=( others => AXI_STREAM_MASTER_INIT_C)
CHAN_BOND_SEQ_1_ENABLE_Gbit_vector := "1111"
out qPllResetOutslv( L_G- 1 downto 0)
CLK_COR_SEQ_2_ENABLE_Gbit_vector := "0000"
CLK_COR_SEQ_1_3_Gbit_vector := "0000000000"
array(natural range <> ) of AxiStreamMasterType AxiStreamMasterArray
CHAN_BOND_SEQ_1_2_Gbit_vector := "0000000000"
CHAN_BOND_SEQ_2_USE_Gstring := "FALSE"
SIM_GTRESET_SPEEDUP_Gstring := "FALSE"
CHAN_BOND_SEQ_LEN_Ginteger := 1
in txAxisMasterArr_iAxiStreamMasterArray( L_G- 1 downto 0)
in txDataInslv( TX_EXT_DATA_WIDTH_G- 1 downto 0)
out axilWriteSlaveTxAxiLiteWriteSlaveType
TX_8B10B_EN_Gboolean := true
in rxMmcmLockedInsl := '1'
CLK_COR_SEQ_2_2_Gbit_vector := "0000000000"
array(natural range <> ) of slv( 4 downto 0) Slv5Array
out gtTxNslv( L_G- 1 downto 0)
RX_CLK25_DIV_Ginteger := 5
PMA_RSV_Gbit_vector := x"001E7080"
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
ALIGN_PCOMMA_DET_Gstring := "FALSE"
STABLE_CLOCK_PERIOD_Greal := 4.0E-9
in axilWriteMasterAxiLiteWriteMasterType
RX_8B10B_EN_Gboolean := true
in gtRxRefClkBufgsl := '0'
CHAN_BOND_SEQ_2_1_Gbit_vector := "0000000000"
ALIGN_MCOMMA_DET_Gstring := "FALSE"
out leds_oslv( 1 downto 0)
RX_CHAN_BOND_MASTER_Gboolean := false
TX_EXT_DATA_WIDTH_Ginteger := 16
CLK_COR_MIN_LAT_Ginteger := 7
in gtTxReady_islv( L_G- 1 downto 0)
CLK_COR_SEQ_1_ENABLE_Gbit_vector := "1111"
RX_EXT_DATA_WIDTH_Ginteger := 16
RXSLIDE_MODE_Gstring := "PCS"
CLK_COR_PRECEDENCE_Gstring := "TRUE"
out txAxisSlaveArr_oAxiStreamSlaveArray( L_G- 1 downto 0)
out axilWriteSlaveAxiLiteWriteSlaveType
SIM_VERSION_Gstring := "4.0"
TX_BUF_ADDR_MODE_Gstring := "FAST"
RX_OS_CFG_Gbit_vector := "0000010000000"
CHAN_BOND_SEQ_2_4_Gbit_vector := "0000000000"
CPLL_REFCLK_DIV_Ginteger := 1
FTS_LANE_DESKEW_EN_Gstring := "FALSE"
FTS_LANE_DESKEW_CFG_Gbit_vector := "1111"
ALIGN_PCOMMA_VALUE_Gbit_vector := "0101111100"
CPLL_REFCLK_SEL_Gbit_vector := "001"
CHAN_BOND_KEEP_ALIGN_Gstring := "FALSE"
out rxDecErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
in axilWriteMasterTxAxiLiteWriteMasterType
ALIGN_COMMA_WORD_Ginteger := 2
RX_BUF_ADDR_MODE_Gstring := "FAST"
CHAN_BOND_SEQ_2_ENABLE_Gbit_vector := "0000"
ALIGN_COMMA_ENABLE_Gbit_vector := "1111111111"
out txAxisSlaveArr_oAxiStreamSlaveArray( L_G- 1 downto 0)
SIM_VERSION_Gstring := "4.0"