1 -------------------------------------------------------------------------------     2 -- File       : GLinkGtx7FixedLat.vhd     3 -- Company    : SLAC National Accelerator Laboratory     4 -- Created    : 2014-01-30     5 -- Last update: 2015-02-23     6 -------------------------------------------------------------------------------     7 -- Description: G-Link wrapper for GTX7 Fixed Latency transceiver     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;
    23 use work.GlinkPkg.
all;
    26  --! @ingroup protocols_glink_gtx7    33       -- Simulation Generics    50       -- RX Equalizer Attributes    56       -- Configure PLL sources    60       -- G-Link TX Interface (gLinkTxClk Domain)    66       -- G-Link TX Interface (gLinkClk Domain)    94 end GLinkGtx7FixedLat;
    98    constant FIXED_ALIGN_COMMA_0_C : slv(19 downto 0) := bitReverse((GLINK_VALID_IDLE_WORDS_C(0) & GLINK_CONTROL_WORD_C));
  -- FF0    99    constant FIXED_ALIGN_COMMA_1_C : slv(19 downto 0) := bitReverse((GLINK_VALID_IDLE_WORDS_C(1) & GLINK_CONTROL_WORD_C));
  -- FF1A   100    constant FIXED_ALIGN_COMMA_2_C : slv(19 downto 0) := bitReverse((GLINK_VALID_IDLE_WORDS_C(2) & GLINK_CONTROL_WORD_C));
  -- FF1B   114       dataValid : sl := '0';
   119       gtRxDataReversed : slv(19 downto 0) := (others => '0');
   120    signal rxFifoDout  : slv(23 downto 0);
   121    signal gLinkTxSync : GLinkTxType;
   122    signal gLinkRxSync : GLinkRxType;
   143             INIT_G       => toSlv
(GLINK_TX_UNUSED_C
),
   146             --Write Ports (wr_clk domain)   150             --Read Ports (rd_clk domain)   152             valid  => txFifoValid,
   155       gLinkTxSync <= toGLinkTx(txFifoDout) when(txFifoValid = '1') else GLINK_TX_UNUSED_C;
   157       gtTxRst <= not(gtTxRstDone) or gLinkTxSync.linkRst;
   172    DISABLE_SYNTH_TX : 
if (SYNTH_TX_G = false) 
generate   176       gLinkTxSync <= GLINK_TX_UNUSED_C;
   178       gtTxData    <= (GLINK_IDLE_WORD_FF0_C & GLINK_CONTROL_WORD_C);
   197             INIT_G       => toSlv
(GLINK_RX_INIT_C
),
   200             -- Asynchronous Reset   202             --Write Ports (wr_clk domain)   204             wr_en  => gtRxRstDone,
   205             din    => toSlv
(gLinkRxSync
),
   206             --Read Ports (rd_clk domain)   209             valid  => rxFifoValid,
   212       gLinkRx <= toGLinkRx(rxFifoDout);
   215       gtRxRst <= not(gtRxRstDone) or rxRst;
   233    DISABLE_SYNTH_RX : 
if (SYNTH_RX_G = false) 
generate   244    gtTxDataReversed <= bitReverse(gtTxData);
   245    gtRxData         <= bitReverse(gtRxDataReversed);
   250    -- GTX 7 Core in Fixed Latency mode   290          -- RX Equalizer Attributes   296          -- Fixed Latency comma alignment (If RX_ALIGN_MODE_G = "FIXED_LAT")   326          rxSlideIn        => '0',
              -- Slide is controlled internally   342          txCharIsKIn      => 
(others => '0'
),
  -- Not using gt rx 8b10b RX_DFE_KL_CFG2_Gbit_vector  := x"3008E56A"
 
TX_EXT_DATA_WIDTH_Ginteger  := 16
 
CPLL_REFCLK_DIV_Ginteger  := 1
 
RX_EXT_DATA_WIDTH_Ginteger  := 16
 
RXSLIDE_MODE_Gstring  :=   "PCS"
 
out encodedDataslv( 19 downto  0)  
 
in qPllRefClkLostInsl  := '0'
 
RX_CM_TRIM_Gbit_vector  :=   "010"
 
RX_DFE_LPM_CFG_Gbit_vector  := x"0954"
 
in loopbackslv( 2 downto  0)  
 
TX_8B10B_EN_Gboolean  :=   true
 
in dinslv(   DATA_WIDTH_G- 1 downto  0)  
 
in rxMmcmLockedInsl  := '1'
 
in gtRxDataslv( 19 downto  0)  
 
out rxDataOutslv(   RX_EXT_DATA_WIDTH_G- 1 downto  0)  
 
RX_DFE_LPM_CFG_Gbit_vector  := x"0954"
 
FIXED_ALIGN_COMMA_3_Gslv  :=   "XXXXXXXXXXXXXXXXXXXX"
 
in gtQPllRefClkLostsl  := '0'
 
TX_BUF_ADDR_MODE_Gstring  :=   "FAST"
 
in gtRxRefClkBufgsl  := '0'
 
SIM_GTRESET_SPEEDUP_Gstring  :=   "FALSE"
 
RX_USRCLK_SRC_Gstring  :=   "RXOUTCLK"
 
RXCDR_CFG_Gbit_vector  := x"03000023ff40200020"
 
RXCDR_CFG_Gbit_vector  := x"03000023ff40200020"
 
SIM_VERSION_Gstring  :=   "4.0"
 
TX_OUTCLK_SRC_Gstring  :=   "PLLREFCLK"
 
CPLL_REFCLK_SEL_Gbit_vector  :=   "001"
 
out doutslv(   DATA_WIDTH_G- 1 downto  0)  
 
CPLL_FBDIV_45_Ginteger  := 5
 
RX_CLK25_DIV_Ginteger  := 5
 
SIMULATION_Gboolean  :=   false
 
SIM_GTRESET_SPEEDUP_Gstring  :=   "FALSE"
 
in loopbackInslv( 2 downto  0)  :=   "000"
 
RX_DFE_KL_CFG2_Gbit_vector  := x"3008E56A"
 
in txCharIsKInslv((   TX_EXT_DATA_WIDTH_G/ 8)- 1 downto  0)  
 
STABLE_CLOCK_PERIOD_Greal  := 4.0E-9
 
SIM_VERSION_Gstring  :=   "4.0"
 
out rxBufStatusOutslv( 2 downto  0)  
 
out rxCharIsKOutslv((   RX_EXT_DATA_WIDTH_G/ 8)- 1 downto  0)  
 
RX_OUTCLK_SRC_Gstring  :=   "PLLREFCLK"
 
RX_OS_CFG_Gbit_vector  :=   "0000010000000"
 
out txBufStatusOutslv( 1 downto  0)  
 
out rxDispErrOutslv((   RX_EXT_DATA_WIDTH_G/ 8)- 1 downto  0)  
 
RX_INT_DATA_WIDTH_Ginteger  := 20
 
TX_INT_DATA_WIDTH_Ginteger  := 20
 
in rxDataValidInsl  := '1'
 
TX_PHASE_ALIGN_Gstring  :=   "AUTO"
 
FLAGSEL_Gboolean  :=   false
 
RX_BUF_EN_Gboolean  :=   true
 
FIXED_ALIGN_COMMA_1_Gslv  :=   "----------1010000011"
 
SIMULATION_Gboolean  :=   false
 
TX_CLK25_DIV_Ginteger  := 5
 
FIXED_ALIGN_COMMA_0_Gslv  :=   "----------0101111100"
 
TX_CLK25_DIV_Ginteger  := 5
 
RX_ALIGN_MODE_Gstring  :=   "GT"
 
FIXED_ALIGN_COMMA_2_Gslv  :=   "XXXXXXXXXXXXXXXXXXXX"
 
in txDataInslv(   TX_EXT_DATA_WIDTH_G- 1 downto  0)  
 
FLAGSEL_Gboolean  :=   false
 
CPLL_FBDIV_45_Ginteger  := 5
 
CPLL_REFCLK_SEL_Gbit_vector  :=   "001"
 
in txMmcmLockedInsl  := '1'
 
RX_8B10B_EN_Gboolean  :=   true
 
TX_BUF_EN_Gboolean  :=   true
 
FIXED_COMMA_EN_Gslv( 3 downto  0)  :=   "0011"
 
out rxDecErrOutslv((   RX_EXT_DATA_WIDTH_G/ 8)- 1 downto  0)  
 
RX_CLK25_DIV_Ginteger  := 5
 
SYNTH_TX_Gboolean  :=   true
 
SYNTH_RX_Gboolean  :=   true
 
RX_CM_TRIM_Gbit_vector  :=   "010"
 
RX_OS_CFG_Gbit_vector  :=   "0000010000000"
 
DATA_WIDTH_Ginteger   range  1 to ( 2** 24):= 16
 
CPLL_REFCLK_DIV_Ginteger  := 1
 
FLAGSEL_Gboolean  :=   false