1 -------------------------------------------------------------------------------     2 -- File       : GLinkGtp7FixedLat.vhd     3 -- Company    : SLAC National Accelerator Laboratory     4 -- Created    : 2014-01-30     5 -- Last update: 2017-05-08     6 -------------------------------------------------------------------------------     7 -- Description: G-Link wrapper for GTP7 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_gtp7    33       -- Simulation Generics    48       -- Configure PLL sources    52       -- G-Link TX Interface (gLinkTxClk Domain)    57       -- G-Link TX Interface (gLinkClk Domain)    70       -- MGT loopback control    78 end GLinkGtp7FixedLat;
    82    constant FIXED_ALIGN_COMMA_0_C : slv(19 downto 0) := bitReverse((GLINK_VALID_IDLE_WORDS_C(0) & GLINK_CONTROL_WORD_C));
  -- FF0    83    constant FIXED_ALIGN_COMMA_1_C : slv(19 downto 0) := bitReverse((GLINK_VALID_IDLE_WORDS_C(1) & GLINK_CONTROL_WORD_C));
  -- FF1A    84    constant FIXED_ALIGN_COMMA_2_C : slv(19 downto 0) := bitReverse((GLINK_VALID_IDLE_WORDS_C(2) & GLINK_CONTROL_WORD_C));
  -- FF1B    96       dataValid : sl := '0';
   101       gtRxDataReversed : slv(19 downto 0) := (others => '0');
   102    signal rxFifoDout  : slv(23 downto 0);
   103    signal gLinkTxSync : GLinkTxType;
   104    signal gLinkRxSync : GLinkRxType;
   123             INIT_G       => toSlv
(GLINK_TX_UNUSED_C
),
   126             --Write Ports (wr_clk domain)   130             --Read Ports (rd_clk domain)   132             valid  => txFifoValid,
   135       gLinkTxSync <= toGLinkTx(txFifoDout) when(txFifoValid = '1') else GLINK_TX_UNUSED_C;
   137       gtTxRst <= not(gtTxRstDone) or gLinkTxSync.linkRst;
   152    DISABLE_SYNTH_TX : 
if (SYNTH_TX_G = false) 
generate   156       gLinkTxSync <= GLINK_TX_UNUSED_C;
   158       gtTxData    <= (GLINK_IDLE_WORD_FF0_C & GLINK_CONTROL_WORD_C);
   177             INIT_G       => toSlv
(GLINK_RX_INIT_C
),
   180             -- Asynchronous Reset   182             --Write Ports (wr_clk domain)   184             wr_en  => gtRxRstDone,
   185             din    => toSlv
(gLinkRxSync
),
   186             --Read Ports (rd_clk domain)   189             valid  => rxFifoValid,
   192       gLinkRx <= toGLinkRx(rxFifoDout);
   195       gtRxRst <= not(gtRxRstDone) or rxRst;
   213    DISABLE_SYNTH_RX : 
if (SYNTH_RX_G = false) 
generate   224    gtTxDataReversed <= bitReverse(gtTxData);
   225    gtRxData         <= bitReverse(gtRxDataReversed);
   227    -- GTP 7 Core in Fixed Latency mode   228    Gtp7Core_Inst : 
entity work.
Gtp7Core   289          rxSlideIn        => '0',
              -- Slide is controlled internally   305          txCharIsKIn      => 
(others => '0'
),
  -- Not using gt rx 8b10b 
SIM_VERSION_Gstring  :=   "1.0"
 
TX_EXT_DATA_WIDTH_Ginteger  := 16
 
out encodedDataslv( 19 downto  0)  
 
RX_EXT_DATA_WIDTH_Ginteger  := 16
 
TX_INT_DATA_WIDTH_Ginteger  := 20
 
in qPllLockInslv( 1 downto  0)  
 
RX_OS_CFG_Gbit_vector  :=   "0001111110000"
 
FIXED_ALIGN_COMMA_0_Gslv  :=   "----------0101111100"
 
in qPllRefClkLostInslv( 1 downto  0)  
 
in dinslv(   DATA_WIDTH_G- 1 downto  0)  
 
PMA_RSV_Gbit_vector  := x"00000333"
 
in gtRxDataslv( 19 downto  0)  
 
out rxCharIsKOutslv((   RX_EXT_DATA_WIDTH_G/ 8)- 1 downto  0)  
 
RX_OS_CFG_Gbit_vector  :=   "0001111110000"
 
TX_PHASE_ALIGN_Gstring  :=   "AUTO"
 
RX_CLK25_DIV_Ginteger  := 5
 
in txCharIsKInslv((   TX_EXT_DATA_WIDTH_G/ 8)- 1 downto  0)  
 
out txBufStatusOutslv( 1 downto  0)  
 
TX_CLK25_DIV_Ginteger  := 5
 
out gtQPllResetslv( 1 downto  0)  
 
TX_CLK25_DIV_Ginteger  := 5
 
SYNTH_RX_Gboolean  :=   true
 
out qPllResetOutslv( 1 downto  0)  
 
FIXED_ALIGN_COMMA_1_Gslv  :=   "----------1010000011"
 
RXCDR_CFG_Gbit_vector  := x"0000107FE206001041010"
 
in txMmcmLockedInsl  := '1'
 
FLAGSEL_Gboolean  :=   false
 
out doutslv(   DATA_WIDTH_G- 1 downto  0)  
 
out rxBufStatusOutslv( 2 downto  0)  
 
RXLPM_INCM_CFG_Gbit  := '1'
 
SIM_GTRESET_SPEEDUP_Gstring  :=   "FALSE"
 
in rxDataValidInsl  := '1'
 
out rxDataOutslv(   RX_EXT_DATA_WIDTH_G- 1 downto  0)  
 
TX_BUF_EN_Gboolean  :=   true
 
FIXED_COMMA_EN_Gslv( 3 downto  0)  :=   "0011"
 
SYNTH_TX_Gboolean  :=   true
 
in gtQPllLockslv( 1 downto  0)  
 
in txDataInslv(   TX_EXT_DATA_WIDTH_G- 1 downto  0)  
 
RXCDR_CFG_Gbit_vector  := x"0000107FE206001041010"
 
in rxMmcmLockedInsl  := '1'
 
in qPllRefClkInslv( 1 downto  0)  
 
in loopbackslv( 2 downto  0)  
 
RX_OUTCLK_SRC_Gstring  :=   "PLLREFCLK"
 
in gtRxRefClkBufgsl  := '0'
 
RX_ALIGN_MODE_Gstring  :=   "GT"
 
in gtQPllClkslv( 1 downto  0)  
 
in gtQPllRefClkslv( 1 downto  0)  
 
RXSLIDE_MODE_Gstring  :=   "PCS"
 
FLAGSEL_Gboolean  :=   false
 
in qPllClkInslv( 1 downto  0)  
 
RXLPM_INCM_CFG_Gbit  := '1'
 
out rxDecErrOutslv((   RX_EXT_DATA_WIDTH_G/ 8)- 1 downto  0)  
 
out rxDispErrOutslv((   RX_EXT_DATA_WIDTH_G/ 8)- 1 downto  0)  
 
FIXED_ALIGN_COMMA_3_Gslv  :=   "XXXXXXXXXXXXXXXXXXXX"
 
in gtQPllRefClkLostslv( 1 downto  0)  
 
FLAGSEL_Gboolean  :=   false
 
in loopbackInslv( 2 downto  0)  :=   "000"
 
RX_USRCLK_SRC_Gstring  :=   "RXOUTCLK"
 
SIMULATION_Gboolean  :=   false
 
TX_OUTCLK_SRC_Gstring  :=   "PLLREFCLK"
 
SIMULATION_Gboolean  :=   false
 
SIM_GTRESET_SPEEDUP_Gstring  :=   "FALSE"
 
FIXED_ALIGN_COMMA_2_Gslv  :=   "XXXXXXXXXXXXXXXXXXXX"
 
RXLPM_IPCM_CFG_Gbit  := '0'
 
RXLPM_IPCM_CFG_Gbit  := '0'
 
RX_BUF_EN_Gboolean  :=   true
 
STABLE_CLOCK_PERIOD_Greal  := 4.0E-9
 
PMA_RSV_Gbit_vector  := x"00000333"
 
SIM_VERSION_Gstring  :=   "4.0"
 
TX_8B10B_EN_Gboolean  :=   true
 
RX_INT_DATA_WIDTH_Ginteger  := 20
 
RX_CLK25_DIV_Ginteger  := 5
 
DATA_WIDTH_Ginteger   range  1 to ( 2** 24):= 16
 
RX_8B10B_EN_Gboolean  :=   true