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"