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