SURF  1.0
GigEthGtp7Wrapper.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : GigEthGtp7Wrapper.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2015-03-30
5 -- Last update: 2016-09-29
6 -------------------------------------------------------------------------------
7 -- Description: Gtp7 Wrapper for 1000BASE-X Ethernet
8 -- Note: This module supports up to a MGT QUAD of 1GigE interfaces
9 -------------------------------------------------------------------------------
10 -- This file is part of 'SLAC Firmware Standard Library'.
11 -- It is subject to the license terms in the LICENSE.txt file found in the
12 -- top-level directory of this distribution and at:
13 -- https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html.
14 -- No part of 'SLAC Firmware Standard Library', including this file,
15 -- may be copied, modified, propagated, or distributed except according to
16 -- the terms contained in the LICENSE.txt file.
17 -------------------------------------------------------------------------------
18 
19 library ieee;
20 use ieee.std_logic_1164.all;
21 
22 use work.StdRtlPkg.all;
23 use work.AxiStreamPkg.all;
24 use work.AxiLitePkg.all;
25 use work.GigEthPkg.all;
26 
27 library unisim;
28 use unisim.vcomponents.all;
29 
30 --! @see entity
31  --! @ingroup ethernet_GigEthCore_gtp7
33  generic (
34  TPD_G : time := 1 ns;
35  NUM_LANE_G : natural range 1 to 4 := 1;
36  -- Clocking Configurations
37  USE_GTREFCLK_G : boolean := false; -- FALSE: gtClkP/N, TRUE: gtRefClk
38  CLKIN_PERIOD_G : real := 8.0;
39  DIVCLK_DIVIDE_G : positive := 1;
40  CLKFBOUT_MULT_F_G : real := 8.0;
41  CLKOUT0_DIVIDE_F_G : real := 8.0;
42  -- AXI-Lite Configurations
43  EN_AXI_REG_G : boolean := false;
45  -- AXI Streaming Configurations
47  port (
48  -- Local Configurations
49  localMac : in Slv48Array(NUM_LANE_G-1 downto 0) := (others => MAC_ADDR_INIT_C);
50  -- Streaming DMA Interface
51  dmaClk : in slv(NUM_LANE_G-1 downto 0);
52  dmaRst : in slv(NUM_LANE_G-1 downto 0);
57  -- Slave AXI-Lite Interface
58  axiLiteClk : in slv(NUM_LANE_G-1 downto 0) := (others => '0');
59  axiLiteRst : in slv(NUM_LANE_G-1 downto 0) := (others => '0');
64  -- Misc. Signals
65  extRst : in sl;
66  phyClk : out sl;
67  phyRst : out sl;
68  phyReady : out slv(NUM_LANE_G-1 downto 0);
69  sigDet : in slv(NUM_LANE_G-1 downto 0) := (others => '1');
70  -- MGT Clock Port (156.25 MHz or 312.5 MHz)
71  gtRefClk : in sl := '0';
72  gtClkP : in sl := '1';
73  gtClkN : in sl := '0';
74  -- MGT Ports
75  gtTxP : out slv(NUM_LANE_G-1 downto 0);
76  gtTxN : out slv(NUM_LANE_G-1 downto 0);
77  gtRxP : in slv(NUM_LANE_G-1 downto 0);
78  gtRxN : in slv(NUM_LANE_G-1 downto 0));
79 end GigEthGtp7Wrapper;
80 
81 architecture mapping of GigEthGtp7Wrapper is
82 
83  signal gtClk : sl;
84  signal gtClkBufg : sl;
85  signal refClk : sl;
86  signal refRst : sl;
87  signal sysClk125 : sl;
88  signal sysRst125 : sl;
89  signal sysClk62 : sl;
90  signal sysRst62 : sl;
91 
92  signal qPllOutClk : slv(1 downto 0);
93  signal qPllOutRefClk : slv(1 downto 0);
94  signal qPllLock : slv(1 downto 0);
95  signal qPllRefClkLost : slv(1 downto 0);
96  signal qpllRst : slv(NUM_LANE_G-1 downto 0);
97  signal qpllReset : slv(1 downto 0);
98 
99 begin
100 
101  phyClk <= sysClk125;
102  phyRst <= sysRst125;
103 
104  -----------------------------
105  -- Select the Reference Clock
106  -----------------------------
107 
108  IBUFDS_GTE2_Inst : IBUFDS_GTE2
109  port map (
110  I => gtClkP,
111  IB => gtClkN,
112  CEB => '0',
113  ODIV2 => open,
114  O => gtClk);
115 
116  BUFG_Inst : BUFG
117  port map (
118  I => gtClk,
119  O => gtClkBufg);
120 
121  refClk <= gtClkBufg when(USE_GTREFCLK_G = false) else gtRefClk;
122 
123  -----------------
124  -- Power Up Reset
125  -----------------
126  PwrUpRst_Inst : entity work.PwrUpRst
127  generic map (
128  TPD_G => TPD_G)
129  port map (
130  arst => extRst,
131  clk => refClk,
132  rstOut => refRst);
133 
134  ----------------
135  -- Clock Manager
136  ----------------
137  U_MMCM : entity work.ClockManager7
138  generic map(
139  TPD_G => TPD_G,
140  TYPE_G => "MMCM",
141  INPUT_BUFG_G => false,
142  FB_BUFG_G => false,
143  RST_IN_POLARITY_G => '1',
144  NUM_CLOCKS_G => 2,
145  -- MMCM attributes
146  BANDWIDTH_G => "OPTIMIZED",
151  CLKOUT1_DIVIDE_G => integer(2.0*CLKOUT0_DIVIDE_F_G))
152  port map(
153  clkIn => refClk,
154  rstIn => refRst,
155  clkOut(0) => sysClk125,
156  clkOut(1) => sysClk62,
157  rstOut(0) => sysRst125,
158  rstOut(1) => sysRst62);
159 
160  -----------
161  -- Quad PLL
162  -----------
163  U_Gtp7QuadPll : entity work.Gtp7QuadPll
164  generic map (
165  TPD_G => TPD_G,
166  PLL0_REFCLK_SEL_G => "111",
167  PLL0_FBDIV_IN_G => 4,
168  PLL0_FBDIV_45_IN_G => 5,
170  PLL1_REFCLK_SEL_G => "111",
171  PLL1_FBDIV_IN_G => 4,
172  PLL1_FBDIV_45_IN_G => 5,
173  PLL1_REFCLK_DIV_IN_G => 1)
174  port map (
175  qPllRefClk => (others => sysClk125),
178  qPllLock => qPllLock,
179  qPllLockDetClk => (others => sysClk125),
181  qPllPowerDown => "10", -- power down PLL1 (unused PLL)
182  qPllReset => qpllReset);
183 
184  -- Once the QPLL is locked, prevent the
185  -- IP cores from accidently reseting each other
186  qpllReset(0) <= sysRst125 or (uOr(qpllRst) and not(qPllLock(0)));
187 
188  --------------
189  -- GigE Module
190  --------------
191  GEN_LANE :
192  for i in 0 to NUM_LANE_G-1 generate
193 
194  U_GigEthGtp7 : entity work.GigEthGtp7
195  generic map (
196  TPD_G => TPD_G,
197  -- AXI-Lite Configurations
200  -- AXI Streaming Configurations
202  port map (
203  -- Local Configurations
204  localMac => localMac(i),
205  -- Streaming DMA Interface
206  dmaClk => dmaClk(i),
207  dmaRst => dmaRst(i),
209  dmaIbSlave => dmaIbSlaves(i),
211  dmaObSlave => dmaObSlaves(i),
212  -- Slave AXI-Lite Interface
213  axiLiteClk => axiLiteClk(i),
214  axiLiteRst => axiLiteRst(i),
219  -- PHY + MAC signals
220  sysClk62 => sysClk62,
221  sysClk125 => sysClk125,
222  sysRst125 => sysRst125,
223  extRst => refRst,
224  phyReady => phyReady(i),
225  sigDet => sigDet(i),
226  -- Quad PLL Interface
229  qPllLock => qPllLock,
231  qPllReset(0) => qpllRst(i),
232  qPllReset(1) => qpllReset(1),
233  -- MGT Ports
234  gtTxP => gtTxP(i),
235  gtTxN => gtTxN(i),
236  gtRxP => gtRxP(i),
237  gtRxN => gtRxN(i));
238 
239  end generate GEN_LANE;
240 
241 end mapping;
out qPllRefClkLostslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:50
in qPllRefClkslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:45
in axiLiteWriteMasterAxiLiteWriteMasterType := AXI_LITE_WRITE_MASTER_INIT_C
Definition: GigEthGtp7.vhd:52
USE_GTREFCLK_Gboolean := false
TPD_Gtime := 1 ns
Definition: GigEthGtp7.vhd:31
array(natural range <> ) of AxiStreamSlaveType AxiStreamSlaveArray
out dmaIbMasterAxiStreamMasterType
Definition: GigEthGtp7.vhd:43
in qPllOutClkslv( 1 downto 0)
Definition: GigEthGtp7.vhd:62
out axiLiteReadSlavesAxiLiteReadSlaveArray( NUM_LANE_G- 1 downto 0)
in extRstsl
Definition: GigEthGtp7.vhd:58
PLL0_FBDIV_45_IN_Ginteger range 4 to 5:= 5
Definition: Gtp7QuadPll.vhd:38
out axiLiteReadSlaveAxiLiteReadSlaveType
Definition: GigEthGtp7.vhd:51
out rstOutsl
Definition: PwrUpRst.vhd:39
TPD_Gtime := 1 ns
Definition: PwrUpRst.vhd:30
array(natural range <> ) of AxiLiteWriteSlaveType AxiLiteWriteSlaveArray
Definition: AxiLitePkg.vhd:164
in qPllOutRefClkslv( 1 downto 0)
Definition: GigEthGtp7.vhd:63
std_logic sl
Definition: StdRtlPkg.vhd:28
in dmaRstsl
Definition: GigEthGtp7.vhd:42
out qPllOutClkslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:46
in localMacSlv48Array( NUM_LANE_G- 1 downto 0) :=( others => MAC_ADDR_INIT_C)
in sigDetslv( NUM_LANE_G- 1 downto 0) :=( others => '1')
out phyReadysl
Definition: GigEthGtp7.vhd:59
AXIS_CONFIG_GAxiStreamConfigArray( 3 downto 0) :=( others => AXI_STREAM_CONFIG_INIT_C)
CLKIN_PERIOD_Greal := 10.0
out dmaObSlavesAxiStreamSlaveArray( NUM_LANE_G- 1 downto 0)
array(natural range <> ) of AxiLiteReadMasterType AxiLiteReadMasterArray
Definition: AxiLitePkg.vhd:77
PLL0_REFCLK_SEL_Gbit_vector := "001"
Definition: Gtp7QuadPll.vhd:36
in axiLiteReadMasterAxiLiteReadMasterType := AXI_LITE_READ_MASTER_INIT_C
Definition: GigEthGtp7.vhd:50
RST_IN_POLARITY_Gsl := '1'
in qPllPowerDownslv( 1 downto 0) :=( others => '0')
Definition: Gtp7QuadPll.vhd:51
in dmaObMasterAxiStreamMasterType
Definition: GigEthGtp7.vhd:45
DIVCLK_DIVIDE_Gpositive := 1
PLL0_FBDIV_IN_Ginteger range 1 to 5:= 4
Definition: Gtp7QuadPll.vhd:37
in axiLiteRstslv( NUM_LANE_G- 1 downto 0) :=( others => '0')
in rstInsl := '0'
PLL0_REFCLK_DIV_IN_Ginteger range 1 to 2:= 1
Definition: Gtp7QuadPll.vhd:39
out axiLiteWriteSlaveAxiLiteWriteSlaveType
Definition: GigEthGtp7.vhd:53
out dmaObSlaveAxiStreamSlaveType
Definition: GigEthGtp7.vhd:46
in axiLiteWriteMastersAxiLiteWriteMasterArray( NUM_LANE_G- 1 downto 0) :=( others => AXI_LITE_WRITE_MASTER_INIT_C)
in axiLiteClkslv( NUM_LANE_G- 1 downto 0) :=( others => '0')
in gtRxNslv( NUM_LANE_G- 1 downto 0)
TPD_Gtime := 1 ns
PLL1_REFCLK_SEL_Gbit_vector := "001"
Definition: Gtp7QuadPll.vhd:40
in dmaObMastersAxiStreamMasterArray( NUM_LANE_G- 1 downto 0)
INPUT_BUFG_Gboolean := true
out axiLiteWriteSlavesAxiLiteWriteSlaveArray( NUM_LANE_G- 1 downto 0)
in arstsl :=not IN_POLARITY_G
Definition: PwrUpRst.vhd:37
NUM_LANE_Gnatural range 1 to 4:= 1
out gtTxPslv( NUM_LANE_G- 1 downto 0)
array(natural range <> ) of AxiStreamConfigType AxiStreamConfigArray
CLKFBOUT_MULT_F_Greal := 8.0
slv( 1 downto 0) := "10" AXI_RESP_SLVERR_C
Definition: AxiLitePkg.vhd:36
out dmaIbMastersAxiStreamMasterArray( NUM_LANE_G- 1 downto 0)
PLL1_REFCLK_DIV_IN_Ginteger range 1 to 2:= 1
Definition: Gtp7QuadPll.vhd:43
in axiLiteReadMastersAxiLiteReadMasterArray( NUM_LANE_G- 1 downto 0) :=( others => AXI_LITE_READ_MASTER_INIT_C)
FB_BUFG_Gboolean := true
in dmaIbSlavesAxiStreamSlaveArray( NUM_LANE_G- 1 downto 0)
BANDWIDTH_Gstring := "OPTIMIZED"
_library_ ieeeieee
Definition: GigEthGtp7.vhd:18
out phyReadyslv( NUM_LANE_G- 1 downto 0)
in dmaIbSlaveAxiStreamSlaveType
Definition: GigEthGtp7.vhd:44
CLKOUT1_DIVIDE_Ginteger range 1 to 128:= 1
CLKFBOUT_MULT_F_Greal range 1.0 to 64.0:= 1.0
DIVCLK_DIVIDE_Ginteger range 1 to 106:= 1
out gtTxNslv( NUM_LANE_G- 1 downto 0)
out gtTxNsl
Definition: GigEthGtp7.vhd:69
in dmaClkslv( NUM_LANE_G- 1 downto 0)
TPD_Gtime := 1 ns
Definition: Gtp7QuadPll.vhd:32
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
EN_AXI_REG_Gboolean := false
Definition: GigEthGtp7.vhd:33
in clksl
Definition: PwrUpRst.vhd:38
array(natural range <> ) of AxiStreamMasterType AxiStreamMasterArray
in gtRxPslv( NUM_LANE_G- 1 downto 0)
in sysClk125sl
Definition: GigEthGtp7.vhd:56
in sigDetsl := '1'
Definition: GigEthGtp7.vhd:60
CLKOUT0_DIVIDE_F_Greal := 8.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
AxiStreamConfigType :=(TSTRB_EN_C => false,TDATA_BYTES_C => 16,TDEST_BITS_C => 4,TID_BITS_C => 0,TKEEP_MODE_C => TKEEP_NORMAL_C,TUSER_BITS_C => 4,TUSER_MODE_C => TUSER_NORMAL_C) AXI_STREAM_CONFIG_INIT_C
array(natural range <> ) of AxiLiteWriteMasterType AxiLiteWriteMasterArray
Definition: AxiLitePkg.vhd:136
CLKOUT0_DIVIDE_F_Greal range 1.0 to 128.0:= 1.0
in qPllLockDetClkslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:49
slv( 1 downto 0) qPllOutRefClk
in gtRxPsl
Definition: GigEthGtp7.vhd:70
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 sysClk62sl
Definition: GigEthGtp7.vhd:55
in localMacslv( 47 downto 0) := MAC_ADDR_INIT_C
Definition: GigEthGtp7.vhd:39
in gtRxNsl
Definition: GigEthGtp7.vhd:71
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
Definition: GigEthGtp7.vhd:34
out qPllOutRefClkslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:47
in qPllRefClkLostslv( 1 downto 0)
Definition: GigEthGtp7.vhd:65
slv( 1 downto 0) qPllRefClkLost
array(natural range <> ) of AxiLiteReadSlaveType AxiLiteReadSlaveArray
Definition: AxiLitePkg.vhd:103
PLL1_FBDIV_45_IN_Ginteger range 4 to 5:= 5
Definition: Gtp7QuadPll.vhd:42
in axiLiteRstsl := '0'
Definition: GigEthGtp7.vhd:49
slv( NUM_LANE_G- 1 downto 0) qpllRst
in axiLiteClksl := '0'
Definition: GigEthGtp7.vhd:48
out qPllLockslv( 1 downto 0)
Definition: Gtp7QuadPll.vhd:48
TYPE_Gstring := "MMCM"
in sysRst125sl
Definition: GigEthGtp7.vhd:57
AXIS_CONFIG_GAxiStreamConfigType := AXI_STREAM_CONFIG_INIT_C
Definition: GigEthGtp7.vhd:36
in qPllLockslv( 1 downto 0)
Definition: GigEthGtp7.vhd:64
in dmaClksl
Definition: GigEthGtp7.vhd:41
out gtTxPsl
Definition: GigEthGtp7.vhd:68
std_logic_vector slv
Definition: StdRtlPkg.vhd:29
in dmaRstslv( NUM_LANE_G- 1 downto 0)
NUM_CLOCKS_Ginteger range 1 to 7
PLL1_FBDIV_IN_Ginteger range 1 to 5:= 4
Definition: Gtp7QuadPll.vhd:41
EN_AXI_REG_Gboolean := false