SURF  1.0
Pgp2bGtp7VarLatWrapper.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : Pgp2bGtp7VarLatWrapper.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2014-01-29
5 -- Last update: 2016-12-16
6 -------------------------------------------------------------------------------
7 -- Description: Example PGP2b front end wrapper
8 -- Note: Default generic configurations are for the AC701 development board
9 -- Note: Default uses 125 MHz reference clock to generate 3.125 Gbps PGP link
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 -------------------------------------------------------------------------------
19 
20 library ieee;
21 use ieee.std_logic_1164.all;
22 
23 use work.StdRtlPkg.all;
24 use work.AxiStreamPkg.all;
25 use work.Pgp2bPkg.all;
26 use work.AxiLitePkg.all;
27 
28 library unisim;
29 use unisim.vcomponents.all;
30 
31 --! @see entity
32  --! @ingroup protocols_pgp_pgp2b_gtp7
34  generic (
35  TPD_G : time := 1 ns;
36  SIMULATION_G : boolean := false;
37  -- MMCM Configurations
38  CLKIN_PERIOD_G : real := 6.4;
39  DIVCLK_DIVIDE_G : natural range 1 to 106 := 1;
40  CLKFBOUT_MULT_F_G : real range 1.0 to 64.0 := 6.0;
41  CLKOUT0_DIVIDE_F_G : real range 1.0 to 128.0 := 6.0;
42  -- Quad PLL Configurations (Defaults: gtClkP = 125 MHz Configuration)
43  QPLL_REFCLK_SEL_G : bit_vector := "001";
44  QPLL_FBDIV_IN_G : natural range 1 to 5 := 5;
45  QPLL_FBDIV_45_IN_G : natural range 4 to 5 := 5;
46  QPLL_REFCLK_DIV_IN_G : natural range 1 to 2 := 1;
47  -- MGT Configurations (Defaults: gtClkP = 125 MHz Configuration)
48  RXOUT_DIV_G : natural := 2;
49  TXOUT_DIV_G : natural := 2;
50  RX_CLK25_DIV_G : natural := 5;
51  TX_CLK25_DIV_G : natural := 5;
52  RX_OS_CFG_G : bit_vector := "0000010000000";
53  RXCDR_CFG_G : bit_vector := x"0001107FE206021081010";
54  RXLPM_INCM_CFG_G : bit := '0';
55  RXLPM_IPCM_CFG_G : bit := '1';
56  -- Configure PGP
57  RX_ENABLE_G : boolean := true;
58  TX_ENABLE_G : boolean := true;
60  PAYLOAD_CNT_TOP_G : integer := 7; -- Top bit for payload counter
61  VC_INTERLEAVE_G : integer := 1; -- Interleave Frames
62  NUM_VC_EN_G : integer range 1 to 4 := 4);
63  port (
64  -- Manual Reset
65  extRst : in sl;
66  -- Clocks and Reset
67  pgpClk : out sl;
68  pgpRst : out sl;
69  stableClk : out sl;
70  -- Non VC TX Signals
73  -- Non VC RX Signals
76  -- Frame TX Interface
78  pgpTxSlaves : out AxiStreamSlaveArray(3 downto 0);
79  -- Frame RX Interface
81  pgpRxCtrl : in AxiStreamCtrlArray(3 downto 0);
82  -- GT Pins
83  gtClkP : in sl;
84  gtClkN : in sl;
85  gtTxP : out sl;
86  gtTxN : out sl;
87  gtRxP : in sl;
88  gtRxN : in sl;
89  -- Debug Interface
90  txPreCursor : in slv(4 downto 0) := (others => '0');
91  txPostCursor : in slv(4 downto 0) := (others => '0');
92  txDiffCtrl : in slv(3 downto 0) := "1000";
93  -- AXI-Lite Interface
94  axilClk : in sl := '0';
95  axilRst : in sl := '0';
100 end Pgp2bGtp7VarLatWrapper;
101 
102 architecture mapping of Pgp2bGtp7VarLatWrapper is
103 
104  signal refClk : sl;
105  signal refClkDiv2 : sl;
106  signal stableClock : sl;
107  signal extRstSync : sl;
108 
109  signal pgpClock : sl;
110  signal pgpTxRecClk : sl;
111  signal pgpReset : sl;
112  signal pgpTxMmcmLocked : sl;
113 
114  signal pllRefClk : slv(1 downto 0);
115  signal pllLockDetClk : slv(1 downto 0);
116  signal qPllReset : slv(1 downto 0);
117  signal gtQPllOutRefClk : slv(1 downto 0);
118  signal gtQPllOutClk : slv(1 downto 0);
119  signal gtQPllLock : slv(1 downto 0);
120  signal gtQPllRefClkLost : slv(1 downto 0);
121  signal gtQPllReset : slv(1 downto 0);
122 
123 begin
124 
125  pgpClk <= pgpClock;
126  pgpRst <= pgpReset;
128 
129  IBUFDS_GTE2_Inst : IBUFDS_GTE2
130  port map (
131  I => gtClkP,
132  IB => gtClkN,
133  CEB => '0',
134  ODIV2 => refClkDiv2,
135  O => refClk);
136 
137  BUFG_Inst : BUFG
138  port map (
139  I => refClkDiv2,
140  O => stableClock);
141 
142  RstSync_Inst : entity work.RstSync
143  generic map(
144  TPD_G => TPD_G)
145  port map (
146  clk => stableClock,
147  asyncRst => extRst,
148  syncRst => extRstSync);
149 
150 -- U_BUFG_PGP : BUFG
151 -- port map (
152 -- I => pgpTxRecClk,
153 -- O => pgpClock);
154 
155  ClockManager7_Inst : entity work.ClockManager7
156  generic map(
157  TPD_G => TPD_G,
158  TYPE_G => "MMCM",
159  INPUT_BUFG_G => true,
160  FB_BUFG_G => true,
161  RST_IN_POLARITY_G => '1',
162  NUM_CLOCKS_G => 1,
163  -- MMCM attributes
164  BANDWIDTH_G => "OPTIMIZED",
169  port map(
170  clkIn => pgpTxRecClk,
171  rstIn => extRstSync,
172  clkOut(0) => pgpClock,
173  rstOut(0) => open,
175 
176  -- PLL0 Port Mapping
177  pllRefClk(0) <= refClk;
179  qPllReset(0) <= pgpReset or gtQPllReset(0);
180 
181  -- PLL1 Port Mapping
182  pllRefClk(1) <= refClk;
184  qPllReset(1) <= pgpReset or gtQPllReset(1);
185 
186  Quad_Pll_Inst : entity work.Gtp7QuadPll
187  generic map (
188  TPD_G => TPD_G,
189  SIM_RESET_SPEEDUP_G => ite(SIMULATION_G, "TRUE", "FALSE"),
198  port map (
202  qPllLock => gtQPllLock,
205  qPllReset => qPllReset);
206 
207  Pgp2bGtp7VarLat_Inst : entity work.Pgp2bGtp7VarLat
208  generic map (
209  TPD_G => TPD_G,
210  SIM_GTRESET_SPEEDUP_G => ite(SIMULATION_G, "TRUE", "FALSE"),
211  -- MGT Configurations
220  -- Configure PLL sources
221  TX_PLL_G => "PLL0",
222  RX_PLL_G => "PLL1",
223  -- Configure PGP
230  port map (
231  -- GT Clocking
238  -- GT Serial IO
239  gtTxP => gtTxP,
240  gtTxN => gtTxN,
241  gtRxP => gtRxP,
242  gtRxN => gtRxN,
243  -- Tx Clocking
246  pgpTxClk => pgpClock,
247  pgpTxMmcmReset => open,
249  -- Rx clocking
250  pgpRxReset => pgpReset,
251  pgpRxRecClk => open,
252  pgpRxClk => pgpClock,
253  pgpRxMmcmReset => open,
254  pgpRxMmcmLocked => '1',
255  -- Non VC TX Signals
256  pgpTxIn => pgpTxIn,
257  pgpTxOut => pgpTxOut,
258  -- Non VC RX Signals
259  pgpRxIn => pgpRxIn,
260  pgpRxOut => pgpRxOut,
261  -- Frame TX Interface
264  -- Frame RX Interface
266  pgpRxCtrl => pgpRxCtrl,
267  -- Debug Interface
271  -- AXI-Lite Interface
272  axilClk => axilClk,
273  axilRst => axilRst,
278 
279 end mapping;
out qPllRefClkLostslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:50
in qPllRefClkslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:45
QPLL_FBDIV_IN_Gnatural range 1 to 5:= 5
array(natural range <> ) of AxiStreamSlaveType AxiStreamSlaveArray
PLL0_FBDIV_45_IN_Ginteger range 4 to 5:= 5
Definition: Gtp7QuadPll.vhd:38
out syncRstsl
Definition: RstSync.vhd:36
TX_PLL_Gstring := "PLL0"
SIM_GTRESET_SPEEDUP_Gstring := "FALSE"
CLKOUT0_DIVIDE_F_Greal range 1.0 to 128.0:= 6.0
AxiLiteWriteMasterType
Definition: AxiLitePkg.vhd:111
std_logic sl
Definition: StdRtlPkg.vhd:28
in txPreCursorslv( 4 downto 0) :=( others => '0')
out qPllOutClkslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:46
RX_CLK25_DIV_Ginteger := 7
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_DECERR_C
RXCDR_CFG_Gbit_vector := x"0001107FE206021081010"
out axilWriteSlaveAxiLiteWriteSlaveType
in pgpRxCtrlAxiStreamCtrlArray( 3 downto 0)
RX_OS_CFG_Gbit_vector := "0000010000000"
CLKIN_PERIOD_Greal := 10.0
PLL0_REFCLK_SEL_Gbit_vector := "001"
Definition: Gtp7QuadPll.vhd:36
RXCDR_CFG_Gbit_vector := x"0000107FE206001041010"
out pgpTxSlavesAxiStreamSlaveArray( 3 downto 0)
RST_IN_POLARITY_Gsl := '1'
PLL0_FBDIV_IN_Ginteger range 1 to 5:= 4
Definition: Gtp7QuadPll.vhd:37
in gtQPllOutRefClkslv( 1 downto 0)
out axilReadSlaveAxiLiteReadSlaveType
in rstInsl := '0'
PLL0_REFCLK_DIV_IN_Ginteger range 1 to 2:= 1
Definition: Gtp7QuadPll.vhd:39
QPLL_REFCLK_DIV_IN_Gnatural range 1 to 2:= 1
RX_OS_CFG_Gbit_vector := "0001111110000"
in pgpRxInPgp2bRxInType
in asyncRstsl
Definition: RstSync.vhd:35
TPD_Gtime := 1 ns
PLL1_REFCLK_SEL_Gbit_vector := "001"
Definition: Gtp7QuadPll.vhd:40
in gtQPllOutClkslv( 1 downto 0)
in axilWriteMasterAxiLiteWriteMasterType := AXI_LITE_WRITE_MASTER_INIT_C
INPUT_BUFG_Gboolean := true
in gtQPllLockslv( 1 downto 0)
in clksl
Definition: RstSync.vhd:34
PAYLOAD_CNT_TOP_Ginteger := 7
QPLL_REFCLK_SEL_Gbit_vector := "001"
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_DECERR_C
DIVCLK_DIVIDE_Gnatural range 1 to 106:= 1
in gtQPllRefClkLostslv( 1 downto 0)
VC_INTERLEAVE_Ginteger := 0
in txDiffCtrlslv( 3 downto 0) := "1000"
in txPreCursorslv( 4 downto 0) :=( others => '0')
TX_ENABLE_Gboolean := true
Pgp2bRxInType
Definition: Pgp2bPkg.vhd:55
RX_PLL_Gstring := "PLL1"
NUM_VC_EN_Ginteger range 1 to 4:= 4
in txPostCursorslv( 4 downto 0) :=( others => '0')
PLL1_REFCLK_DIV_IN_Ginteger range 1 to 2:= 1
Definition: Gtp7QuadPll.vhd:43
slv( 1 downto 0) := "11" AXI_RESP_DECERR_C
Definition: AxiLitePkg.vhd:49
TX_CLK25_DIV_Ginteger := 7
out pgpTxOutPgp2bTxOutType
FB_BUFG_Gboolean := true
SIM_RESET_SPEEDUP_Gstring := "TRUE"
Definition: Gtp7QuadPll.vhd:34
BANDWIDTH_Gstring := "OPTIMIZED"
out axilReadSlaveAxiLiteReadSlaveType
in txDiffCtrlslv( 3 downto 0) := "1000"
in pgpRxMmcmLockedsl := '1'
in pgpTxInPgp2bTxInType
AxiLiteReadMasterType
Definition: AxiLitePkg.vhd:59
in axilRstsl := '0'
RXLPM_INCM_CFG_Gbit := '1'
CLKFBOUT_MULT_F_Greal range 1.0 to 64.0:= 1.0
in txPostCursorslv( 4 downto 0) :=( others => '0')
DIVCLK_DIVIDE_Ginteger range 1 to 106:= 1
out gtQPllResetslv( 1 downto 0)
out pgpRxOutPgp2bRxOutType
TPD_Gtime := 1 ns
Definition: RstSync.vhd:27
in pgpRxCtrlAxiStreamCtrlArray( 3 downto 0)
TPD_Gtime := 1 ns
Definition: Gtp7QuadPll.vhd:32
in pgpTxMastersAxiStreamMasterArray( 3 downto 0) :=( others => AXI_STREAM_MASTER_INIT_C)
array(natural range <> ) of AxiStreamCtrlType AxiStreamCtrlArray
RXOUT_DIV_Ginteger := 2
out pgpRxMastersAxiStreamMasterArray( 3 downto 0)
RX_ENABLE_Gboolean := true
array(natural range <> ) of AxiStreamMasterType AxiStreamMasterArray
CLKFBOUT_MULT_F_Greal range 1.0 to 64.0:= 6.0
in axilClksl := '0'
AxiLiteReadMasterType :=(araddr =>( others => '0'),arprot =>( others => '0'),arvalid => '0',rready => '1') AXI_LITE_READ_MASTER_INIT_C
Definition: AxiLitePkg.vhd:69
in qPllResetslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:52
AxiLiteReadSlaveType
Definition: AxiLitePkg.vhd:85
TPD_Gtime := 1 ns
_library_ ieeeieee
CLKOUT0_DIVIDE_F_Greal range 1.0 to 128.0:= 1.0
in qPllLockDetClkslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:49
NUM_VC_EN_Ginteger range 1 to 4:= 4
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
in pgpTxMmcmLockedsl := '1'
out pgpTxSlavesAxiStreamSlaveArray( 3 downto 0)
out pgpRxMastersAxiStreamMasterArray( 3 downto 0)
QPLL_FBDIV_45_IN_Gnatural range 4 to 5:= 5
out axilWriteSlaveAxiLiteWriteSlaveType
out qPllOutRefClkslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:47
Pgp2bTxOutType
Definition: Pgp2bPkg.vhd:135
in axilReadMasterAxiLiteReadMasterType := AXI_LITE_READ_MASTER_INIT_C
PLL1_FBDIV_45_IN_Ginteger range 4 to 5:= 5
Definition: Gtp7QuadPll.vhd:42
RXLPM_IPCM_CFG_Gbit := '0'
in axilWriteMasterAxiLiteWriteMasterType := AXI_LITE_WRITE_MASTER_INIT_C
out qPllLockslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:48
TYPE_Gstring := "MMCM"
Pgp2bRxOutType
Definition: Pgp2bPkg.vhd:69
in axilReadMasterAxiLiteReadMasterType := AXI_LITE_READ_MASTER_INIT_C
std_logic_vector slv
Definition: StdRtlPkg.vhd:29
NUM_CLOCKS_Ginteger range 1 to 7
PLL1_FBDIV_IN_Ginteger range 1 to 5:= 4
Definition: Gtp7QuadPll.vhd:41
in pgpTxMastersAxiStreamMasterArray( 3 downto 0)
TXOUT_DIV_Ginteger := 2