SURF  1.0
TenGigEthGthUltraScaleWrapper.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : TenGigEthGthUltraScaleWrapper.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2015-04-08
5 -- Last update: 2016-09-29
6 -------------------------------------------------------------------------------
7 -- Description: GTH Ultra Scale Wrapper for 10GBASE-R Ethernet
8 -- Note: This module supports up to a MGT QUAD of 10GigE 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.TenGigEthPkg.all;
26 
27 --! @see entity
28  --! @ingroup ethernet_TenGigEthCore_gthUltraScale
30  generic (
31  TPD_G : time := 1 ns;
32  REF_CLK_FREQ_G : real := 156.25E+6; -- Support 156.25MHz or 312.5MHz
33  NUM_LANE_G : natural range 1 to 4 := 1;
34  -- QUAD PLL Configurations
35  QPLL_REFCLK_SEL_G : slv(2 downto 0) := "001";
36  -- AXI-Lite Configurations
37  EN_AXI_REG_G : boolean := false;
39  -- AXI Streaming Configurations
41  port (
42  -- Local Configurations
43  localMac : in Slv48Array(NUM_LANE_G-1 downto 0) := (others => MAC_ADDR_INIT_C);
44  -- Streaming DMA Interface
45  dmaClk : in slv(NUM_LANE_G-1 downto 0);
46  dmaRst : in slv(NUM_LANE_G-1 downto 0);
51  -- Slave AXI-Lite Interface
52  axiLiteClk : in slv(NUM_LANE_G-1 downto 0) := (others => '0');
53  axiLiteRst : in slv(NUM_LANE_G-1 downto 0) := (others => '0');
58  -- SFP+ Ports
59  sigDet : in slv(NUM_LANE_G-1 downto 0) := (others => '1');
60  txFault : in slv(NUM_LANE_G-1 downto 0) := (others => '0');
61  txDisable : out slv(NUM_LANE_G-1 downto 0);
62  -- Misc. Signals
63  extRst : in sl;
64  coreClk : out sl;
65  coreRst : out sl;
66  phyClk : out slv(NUM_LANE_G-1 downto 0);
67  phyRst : out slv(NUM_LANE_G-1 downto 0);
68  phyReady : out slv(NUM_LANE_G-1 downto 0);
69  gtClk : out sl;
70  -- Transceiver Debug Interface
71  gtTxPreCursor : in slv(4 downto 0) := "00000";
72  gtTxPostCursor : in slv(4 downto 0) := "00000";
73  gtTxDiffCtrl : in slv(3 downto 0) := "1110";
74  gtRxPolarity : in sl := '0';
75  gtTxPolarity : in sl := '0';
76  -- MGT Clock Port (156.25 MHz or 312.5 MHz)
77  gtRefClk : in sl := '0';
78  gtClkP : in sl := '1';
79  gtClkN : in sl := '0';
80  -- MGT Ports
81  gtTxP : out slv(NUM_LANE_G-1 downto 0);
82  gtTxN : out slv(NUM_LANE_G-1 downto 0);
83  gtRxP : in slv(NUM_LANE_G-1 downto 0);
84  gtRxN : in slv(NUM_LANE_G-1 downto 0));
85 end TenGigEthGthUltraScaleWrapper;
86 
87 architecture mapping of TenGigEthGthUltraScaleWrapper is
88 
89  signal qplllock : sl;
90  signal qplloutclk : sl;
91  signal qplloutrefclk : sl;
92 
93  signal qpllRst : slv(NUM_LANE_G-1 downto 0);
94  signal qpllReset : sl;
95 
96  signal coreClock : sl;
97  signal coreReset : sl;
98 
99 begin
100 
101  coreClk <= coreClock;
102  coreRst <= coreReset;
103 
104  -----------------
105  -- Power Up Reset
106  -----------------
107  PwrUpRst_Inst : entity work.PwrUpRst
108  generic map (
109  TPD_G => TPD_G,
110  DURATION_G => 15625000) -- 100 ms
111  port map (
112  arst => extRst,
113  clk => coreClock,
114  rstOut => coreReset);
115 
116  ----------------------
117  -- Common Clock Module
118  ----------------------
119  TenGigEthGthUltraScaleClk_Inst : entity work.TenGigEthGthUltraScaleClk
120  generic map (
121  TPD_G => TPD_G,
124  port map (
125  -- MGT Clock Port (156.25 MHz or 312.5 MHz)
126  gtRefClk => gtRefClk,
127  gtClkP => gtClkP,
128  gtClkN => gtClkN,
129  coreClk => coreClock,
130  coreRst => coreReset,
131  gtClk => gtClk,
132  -- Quad PLL Ports
133  qplllock => qplllock,
136  qpllRst => qpllReset);
137 
138  qpllReset <= uOr(qpllRst) and not(qPllLock);
139 
140  ----------------
141  -- 10GigE Module
142  ----------------
143  GEN_LANE :
144  for i in 0 to NUM_LANE_G-1 generate
145 
146  TenGigEthGthUltraScale_Inst : entity work.TenGigEthGthUltraScale
147  generic map (
148  TPD_G => TPD_G,
150  -- AXI-Lite Configurations
153  -- AXI Streaming Configurations
155  port map (
156  -- Local Configurations
157  localMac => localMac(i),
158  -- Streaming DMA Interface
159  dmaClk => dmaClk(i),
160  dmaRst => dmaRst(i),
162  dmaIbSlave => dmaIbSlaves(i),
164  dmaObSlave => dmaObSlaves(i),
165  -- Slave AXI-Lite Interface
166  axiLiteClk => axiLiteClk(i),
167  axiLiteRst => axiLiteRst(i),
172  -- SFP+ Ports
173  sigDet => sigDet(i),
174  txFault => txFault(i),
175  txDisable => txDisable(i),
176  -- Misc. Signals
177  extRst => coreReset,
178  coreClk => coreClock,
179  phyClk => phyClk(i),
180  phyRst => phyRst(i),
181  phyReady => phyReady(i),
182  -- Transceiver Debug Interface
188  -- Quad PLL Ports
189  qplllock => qplllock,
192  -- MGT Ports
193  gtTxP => gtTxP(i),
194  gtTxN => gtTxN(i),
195  gtRxP => gtRxP(i),
196  gtRxN => gtRxN(i));
197 
198  end generate GEN_LANE;
199 
200 end mapping;
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
in sigDetslv( NUM_LANE_G- 1 downto 0) :=( others => '1')
array(natural range <> ) of AxiStreamSlaveType AxiStreamSlaveArray
AXIS_CONFIG_GAxiStreamConfigArray( 3 downto 0) :=( others => AXI_STREAM_CONFIG_INIT_C)
in dmaObMasterAxiStreamMasterType
out rstOutsl
Definition: PwrUpRst.vhd:39
TPD_Gtime := 1 ns
Definition: PwrUpRst.vhd:30
array(natural range <> ) of AxiLiteWriteSlaveType AxiLiteWriteSlaveArray
Definition: AxiLitePkg.vhd:164
QPLL_REFCLK_SEL_Gslv( 2 downto 0) := "001"
out dmaObSlaveAxiStreamSlaveType
in localMacSlv48Array( NUM_LANE_G- 1 downto 0) :=( others => MAC_ADDR_INIT_C)
std_logic sl
Definition: StdRtlPkg.vhd:28
AXIS_CONFIG_GAxiStreamConfigType := AXI_STREAM_CONFIG_INIT_C
in dmaClkslv( NUM_LANE_G- 1 downto 0)
in localMacslv( 47 downto 0) := MAC_ADDR_INIT_C
in gtTxPreCursorslv( 4 downto 0) := "00000"
in dmaObMastersAxiStreamMasterArray( NUM_LANE_G- 1 downto 0)
array(natural range <> ) of AxiLiteReadMasterType AxiLiteReadMasterArray
Definition: AxiLitePkg.vhd:77
out gtTxNslv( NUM_LANE_G- 1 downto 0)
out axiLiteReadSlaveAxiLiteReadSlaveType
in axiLiteClkslv( NUM_LANE_G- 1 downto 0) :=( others => '0')
out phyReadyslv( NUM_LANE_G- 1 downto 0)
out axiLiteWriteSlaveAxiLiteWriteSlaveType
out txDisableslv( NUM_LANE_G- 1 downto 0)
in axiLiteReadMasterAxiLiteReadMasterType := AXI_LITE_READ_MASTER_INIT_C
in arstsl :=not IN_POLARITY_G
Definition: PwrUpRst.vhd:37
in axiLiteRstslv( NUM_LANE_G- 1 downto 0) :=( others => '0')
array(natural range <> ) of AxiStreamConfigType AxiStreamConfigArray
slv( 1 downto 0) := "10" AXI_RESP_SLVERR_C
Definition: AxiLitePkg.vhd:36
in dmaIbSlavesAxiStreamSlaveArray( NUM_LANE_G- 1 downto 0)
out axiLiteWriteSlavesAxiLiteWriteSlaveArray( NUM_LANE_G- 1 downto 0)
out gtTxPslv( NUM_LANE_G- 1 downto 0)
in gtTxPreCursorslv( 4 downto 0) := "00000"
out dmaIbMastersAxiStreamMasterArray( NUM_LANE_G- 1 downto 0)
in gtTxDiffCtrlslv( 3 downto 0) := "1110"
in dmaRstslv( NUM_LANE_G- 1 downto 0)
in txFaultslv( NUM_LANE_G- 1 downto 0) :=( others => '0')
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
in dmaIbSlaveAxiStreamSlaveType
in clksl
Definition: PwrUpRst.vhd:38
array(natural range <> ) of AxiStreamMasterType AxiStreamMasterArray
out phyClkslv( NUM_LANE_G- 1 downto 0)
in axiLiteWriteMastersAxiLiteWriteMasterArray( NUM_LANE_G- 1 downto 0) :=( others => AXI_LITE_WRITE_MASTER_INIT_C)
in gtRxNslv( NUM_LANE_G- 1 downto 0)
DURATION_Gnatural range 0 to (( 2** 30)- 1):= 156250000
Definition: PwrUpRst.vhd:35
out axiLiteReadSlavesAxiLiteReadSlaveArray( NUM_LANE_G- 1 downto 0)
AxiLiteReadMasterType :=(araddr =>( others => '0'),arprot =>( others => '0'),arvalid => '0',rready => '1') AXI_LITE_READ_MASTER_INIT_C
Definition: AxiLitePkg.vhd:69
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
in axiLiteWriteMasterAxiLiteWriteMasterType := AXI_LITE_WRITE_MASTER_INIT_C
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
out dmaObSlavesAxiStreamSlaveArray( NUM_LANE_G- 1 downto 0)
out dmaIbMasterAxiStreamMasterType
array(natural range <> ) of AxiLiteReadSlaveType AxiLiteReadSlaveArray
Definition: AxiLitePkg.vhd:103
in gtRxPslv( NUM_LANE_G- 1 downto 0)
in axiLiteReadMastersAxiLiteReadMasterArray( NUM_LANE_G- 1 downto 0) :=( others => AXI_LITE_READ_MASTER_INIT_C)
out phyRstslv( NUM_LANE_G- 1 downto 0)
in gtTxPostCursorslv( 4 downto 0) := "00000"
std_logic_vector slv
Definition: StdRtlPkg.vhd:29
in gtTxPostCursorslv( 4 downto 0) := "00000"
in gtTxDiffCtrlslv( 3 downto 0) := "1110"