SURF  1.0
Pgp2bGth7VarLat.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : Pgp2bGth7VarLat.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2015-04-01
5 -- Last update: 2016-08-24
6 -------------------------------------------------------------------------------
7 -- Description: Gth7 Variable Latency Wrapper
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 -------------------------------------------------------------------------------
17 
18 library ieee;
19 use ieee.std_logic_1164.all;
20 
21 use work.StdRtlPkg.all;
22 use work.AxiStreamPkg.all;
23 use work.Pgp2bPkg.all;
24 use work.AxiLitePkg.all;
25 
26 --! @see entity
27  --! @ingroup protocols_pgp_pgp2b_gth7
28 entity Pgp2bGth7VarLat is
29  generic (
30  TPD_G : time := 1 ns;
31  ----------------------------------------------------------------------------------------------
32  -- GT Settings
33  ----------------------------------------------------------------------------------------------
34  -- Sim Generics
35  SIM_GTRESET_SPEEDUP_G : string := "FALSE";
36  SIM_VERSION_G : string := "2.0";
37  STABLE_CLOCK_PERIOD_G : real := 4.0E-9; --units of seconds (default to longest timeout)
38  -- CPLL Settings
39  CPLL_REFCLK_SEL_G : bit_vector := "001";
40  CPLL_FBDIV_G : integer := 4;
41  CPLL_FBDIV_45_G : integer := 5;
42  CPLL_REFCLK_DIV_G : integer := 1;
43  RXOUT_DIV_G : integer := 2;
44  TXOUT_DIV_G : integer := 2;
45  RX_CLK25_DIV_G : integer := 7;
46  TX_CLK25_DIV_G : integer := 7;
47 
48  PMA_RSV_G : bit_vector := x"00000080";
49  RX_OS_CFG_G : bit_vector := "0000010000000"; -- Set by wizard
50  RXCDR_CFG_G : bit_vector := x"0002007FE1000C2200018"; -- Set by wizard
51  RXDFEXYDEN_G : sl := '1'; -- Set by wizard
52 
53  -- Configure PLL sources
54  TX_PLL_G : string := "QPLL";
55  RX_PLL_G : string := "CPLL";
56 
57  -- Configure Buffer usage
58  TX_BUF_EN_G : boolean := true;
59  TX_OUTCLK_SRC_G : string := "OUTCLKPMA";
60  TX_DLY_BYPASS_G : sl := '1';
61  TX_PHASE_ALIGN_G : string := "NONE";
62  TX_BUF_ADDR_MODE_G : string := "FULL";
63 
64  ----------------------------------------------------------------------------------------------
65  -- PGP Settings
66  ----------------------------------------------------------------------------------------------
67  VC_INTERLEAVE_G : integer := 0; -- No interleave Frames
68  PAYLOAD_CNT_TOP_G : integer := 7; -- Top bit for payload counter
69  NUM_VC_EN_G : integer range 1 to 4 := 4;
71  TX_ENABLE_G : boolean := true; -- Enable TX direction
72  RX_ENABLE_G : boolean := true); -- Enable RX direction
73  port (
74  -- GT Clocking
75  stableClk : in sl; -- GT needs a stable clock to "boot up"
76  gtCPllRefClk : in sl; -- Drives CPLL if used
77  gtCPllLock : out sl;
78  gtQPllRefClk : in sl; -- Signals from QPLL if used
79  gtQPllClk : in sl;
80  gtQPllLock : in sl;
82  gtQPllReset : out sl;
83  -- Gt Serial IO
84  gtTxP : out sl; -- GT Serial Transmit Positive
85  gtTxN : out sl; -- GT Serial Transmit Negative
86  gtRxP : in sl; -- GT Serial Receive Positive
87  gtRxN : in sl; -- GT Serial Receive Negative
88  -- Tx Clocking
89  pgpTxReset : in sl;
90  pgpTxClk : in sl;
91  pgpTxRecClk : out sl; -- recovered clock
94  -- Rx clocking
95  pgpRxReset : in sl;
96  pgpRxRecClk : out sl; -- recovered clock
97  pgpRxClk : in sl;
100  -- Non VC Rx Signals
103  -- Non VC Tx Signals
106  -- Frame Transmit Interface - Array of 4 VCs
108  pgpTxSlaves : out AxiStreamSlaveArray(3 downto 0);
109  -- Frame Receive Interface - Array of 4 VCs
112  pgpRxCtrl : in AxiStreamCtrlArray(3 downto 0);
113  -- Debug Interface
114  txPreCursor : in slv(4 downto 0) := (others => '0');
115  txPostCursor : in slv(4 downto 0) := (others => '0');
116  txDiffCtrl : in slv(3 downto 0) := "1000";
117  -- AXI-Lite Interface
118  axilClk : in sl := '0';
119  axilRst : in sl := '0';
124 end Pgp2bGth7VarLat;
125 
126 architecture mapping of Pgp2bGth7VarLat is
127 
128 begin
129 
130  MuliLane_Inst : entity work.Pgp2bGth7MultiLane
131  generic map (
132  -- Sim Generics
133  TPD_G => TPD_G,
137  -- CPLL Settings
146  PMA_RSV_G => PMA_RSV_G,
150  -- Configure PLL sources
151  TX_PLL_G => TX_PLL_G,
152  RX_PLL_G => RX_PLL_G,
153  -- Configure Buffer usage
159  -- Configure Number of Lanes
160  LANE_CNT_G => 1,
161  -- PGP Settings
168  port map (
169  -- GT Clocking
170  stableClk => stableClk,
174  gtQPllClk => gtQPllClk,
178  -- Gt Serial IO
179  gtTxP(0) => gtTxP,
180  gtTxN(0) => gtTxN,
181  gtRxP(0) => gtRxP,
182  gtRxN(0) => gtRxN,
183  -- Tx Clocking
186  pgpTxClk => pgpTxClk,
189  -- Rx clocking
192  pgpRxClk => pgpRxClk,
195  -- Non VC Rx Signals
196  pgpRxIn => pgpRxIn,
197  pgpRxOut => pgpRxOut,
198  -- Non VC Tx Signals
199  pgpTxIn => pgpTxIn,
200  pgpTxOut => pgpTxOut,
201  -- Frame Transmit Interface - Array of 4 VCs
204  -- Frame Receive Interface - Array of 4 VCs
207  pgpRxCtrl => pgpRxCtrl,
208  -- Debug Interface
212  -- AXI-Lite Interface
213  axilClk => axilClk,
214  axilRst => axilRst,
215  axilReadMasters(0) => axilReadMaster,
216  axilReadSlaves(0) => axilReadSlave,
217  axilWriteMasters(0) => axilWriteMaster,
218  axilWriteSlaves(0) => axilWriteSlave);
219 
220 end mapping;
CPLL_REFCLK_SEL_Gbit_vector := "001"
out pgpRxMastersAxiStreamMasterArray( 3 downto 0)
out pgpRxMastersAxiStreamMasterArray( 3 downto 0)
array(natural range <> ) of AxiStreamSlaveType AxiStreamSlaveArray
NUM_VC_EN_Ginteger range 1 to 4:= 4
TX_ENABLE_Gboolean := true
in axilRstsl := '0'
in txPreCursorslv( 4 downto 0) :=( others => '0')
STABLE_CLOCK_PERIOD_Greal := 4.0E-9
in axilWriteMasterAxiLiteWriteMasterType := AXI_LITE_WRITE_MASTER_INIT_C
in txPostCursorslv( 4 downto 0) :=( others => '0')
in pgpRxCtrlAxiStreamCtrlArray( 3 downto 0)
SIM_VERSION_Gstring := "2.0"
TX_OUTCLK_SRC_Gstring := "OUTCLKPMA"
AxiLiteWriteMasterType
Definition: AxiLitePkg.vhd:111
std_logic sl
Definition: StdRtlPkg.vhd:28
VC_INTERLEAVE_Ginteger := 0
AxiStreamMasterType :=(tValid => '0',tData =>( others => '0'),tStrb =>( others => '1'),tKeep =>( others => '1'),tLast => '0',tDest =>( others => '0'),tId =>( others => '0'),tUser =>( others => '0')) AXI_STREAM_MASTER_INIT_C
STABLE_CLOCK_PERIOD_Greal := 4.0E-9
in pgpTxMastersAxiStreamMasterArray( 3 downto 0) :=( others => AXI_STREAM_MASTER_INIT_C)
in txPostCursorslv( 4 downto 0) :=( others => '0')
TX_PLL_Gstring := "QPLL"
out pgpRxMasterMuxedAxiStreamMasterType
out axilReadSlaveAxiLiteReadSlaveType
in pgpRxInPgp2bRxInType
in txDiffCtrlslv( 3 downto 0) := "1000"
CPLL_REFCLK_DIV_Ginteger := 1
SIM_GTRESET_SPEEDUP_Gstring := "FALSE"
RX_OS_CFG_Gbit_vector := "0000010000000"
TX_CLK25_DIV_Ginteger := 7
TX_PHASE_ALIGN_Gstring := "NONE"
TX_BUF_EN_Gboolean := true
out pgpRxOutPgp2bRxOutType
RX_OS_CFG_Gbit_vector := "0000010000000"
TX_PHASE_ALIGN_Gstring := "NONE"
RX_PLL_Gstring := "CPLL"
LANE_CNT_Ginteger range 1 to 2:= 2
in pgpTxInPgp2bTxInType
RX_ENABLE_Gboolean := true
in txDiffCtrlslv( 3 downto 0) := "1000"
PMA_RSV_Gbit_vector := x"00000080"
in pgpRxInPgp2bRxInType
PAYLOAD_CNT_TOP_Ginteger := 7
RXCDR_CFG_Gbit_vector := x"0002007FE1000C2200018"
SIM_GTRESET_SPEEDUP_Gstring := "FALSE"
in pgpTxMastersAxiStreamMasterArray( 3 downto 0) :=( others => AXI_STREAM_MASTER_INIT_C)
Pgp2bRxInType
Definition: Pgp2bPkg.vhd:55
slv( 1 downto 0) := "11" AXI_RESP_DECERR_C
Definition: AxiLitePkg.vhd:49
RXCDR_CFG_Gbit_vector := x"0002007FE1000C2200018"
TX_OUTCLK_SRC_Gstring := "OUTCLKPMA"
NUM_VC_EN_Ginteger range 1 to 4:= 4
SIM_VERSION_Gstring := "2.0"
in axilClksl := '0'
PMA_RSV_Gbit_vector := x"00000080"
CPLL_FBDIV_Ginteger := 4
out axilWriteSlaveAxiLiteWriteSlaveType
AxiLiteReadMasterType
Definition: AxiLitePkg.vhd:59
TX_BUF_EN_Gboolean := true
array(natural range <> ) of AxiStreamCtrlType AxiStreamCtrlArray
TX_BUF_ADDR_MODE_Gstring := "FULL"
out pgpTxOutPgp2bTxOutType
out pgpTxSlavesAxiStreamSlaveArray( 3 downto 0)
array(natural range <> ) of AxiStreamMasterType AxiStreamMasterArray
out pgpRxMasterMuxedAxiStreamMasterType
AxiLiteReadMasterType :=(araddr =>( others => '0'),arprot =>( others => '0'),arvalid => '0',rready => '1') AXI_LITE_READ_MASTER_INIT_C
Definition: AxiLitePkg.vhd:69
TX_ENABLE_Gboolean := true
TX_PLL_Gstring := "QPLL"
AxiLiteReadSlaveType
Definition: AxiLitePkg.vhd:85
RX_PLL_Gstring := "CPLL"
out pgpRxOutPgp2bRxOutType
out pgpTxOutPgp2bTxOutType
TX_BUF_ADDR_MODE_Gstring := "FULL"
PAYLOAD_CNT_TOP_Ginteger := 7
AxiLiteWriteMasterType :=(awaddr =>( others => '0'),awprot =>( others => '0'),awvalid => '0',wdata =>( others => '0'),wstrb =>( others => '1'),wvalid => '0',bready => '1') AXI_LITE_WRITE_MASTER_INIT_C
Definition: AxiLitePkg.vhd:125
TPD_Gtime := 1 ns
in axilReadMasterAxiLiteReadMasterType := AXI_LITE_READ_MASTER_INIT_C
TXOUT_DIV_Ginteger := 2
in pgpRxCtrlAxiStreamCtrlArray( 3 downto 0)
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_DECERR_C
Pgp2bTxOutType
Definition: Pgp2bPkg.vhd:135
RX_CLK25_DIV_Ginteger := 7
CPLL_REFCLK_SEL_Gbit_vector := "001"
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_DECERR_C
RXOUT_DIV_Ginteger := 2
CPLL_REFCLK_DIV_Ginteger := 1
in pgpTxInPgp2bTxInType
RX_ENABLE_Gboolean := true
out pgpTxSlavesAxiStreamSlaveArray( 3 downto 0)
Pgp2bRxOutType
Definition: Pgp2bPkg.vhd:69
CPLL_FBDIV_45_Ginteger := 5
std_logic_vector slv
Definition: StdRtlPkg.vhd:29
in txPreCursorslv( 4 downto 0) :=( others => '0')
TX_DLY_BYPASS_Gsl := '1'