SURF  1.0
TenGigEthGtx7Wrapper.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : TenGigEthGtx7Wrapper.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2015-03-30
5 -- Last update: 2016-09-29
6 -------------------------------------------------------------------------------
7 -- Description: Gtx7 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_gtx7
30  generic (
31  TPD_G : time := 1 ns;
32  NUM_LANE_G : natural range 1 to 4 := 1;
33  -- QUAD PLL Configurations
34  USE_GTREFCLK_G : boolean := false; -- FALSE: gtClkP/N, TRUE: gtRefClk
35  REFCLK_DIV2_G : boolean := false; -- FALSE: gtClkP/N = 156.25 MHz, TRUE: gtClkP/N = 312.5 MHz
36  QPLL_REFCLK_SEL_G : bit_vector := "001";
37  -- AXI-Lite Configurations
38  EN_AXI_REG_G : boolean := false;
40  -- AXI Streaming Configurations
42  port (
43  -- Local Configurations
44  localMac : in Slv48Array(NUM_LANE_G-1 downto 0) := (others => MAC_ADDR_INIT_C);
45  -- Streaming DMA Interface
46  dmaClk : in slv(NUM_LANE_G-1 downto 0);
47  dmaRst : in slv(NUM_LANE_G-1 downto 0);
52  -- Slave AXI-Lite Interface
53  axiLiteClk : in slv(NUM_LANE_G-1 downto 0) := (others => '0');
54  axiLiteRst : in slv(NUM_LANE_G-1 downto 0) := (others => '0');
59  -- SFP+ Ports
60  sigDet : in slv(NUM_LANE_G-1 downto 0) := (others => '1');
61  txFault : in slv(NUM_LANE_G-1 downto 0) := (others => '0');
62  txDisable : out slv(NUM_LANE_G-1 downto 0);
63  -- Misc. Signals
64  extRst : in sl;
65  phyClk : out sl;
66  phyRst : out sl;
67  phyReady : out slv(NUM_LANE_G-1 downto 0);
68  -- MGT Clock Port (156.25 MHz or 312.5 MHz)
69  gtRefClk : in sl := '0'; -- 156.25 MHz only
70  gtClkP : in sl := '1';
71  gtClkN : in sl := '0';
72  gtClk : out sl;
73  -- MGT Ports
74  gtTxP : out slv(NUM_LANE_G-1 downto 0);
75  gtTxN : out slv(NUM_LANE_G-1 downto 0);
76  gtRxP : in slv(NUM_LANE_G-1 downto 0);
77  gtRxN : in slv(NUM_LANE_G-1 downto 0));
78 end TenGigEthGtx7Wrapper;
79 
80 architecture mapping of TenGigEthGtx7Wrapper is
81 
82  signal phyClock : sl;
83  signal phyReset : sl;
84 
85  signal qplllock : sl;
86  signal qplloutclk : sl;
87  signal qplloutrefclk : sl;
88 
89  signal qpllRst : slv(NUM_LANE_G-1 downto 0);
90  signal qpllReset : sl;
91 
92 begin
93 
94  phyClk <= phyClock;
95  phyRst <= phyReset;
96 
97  ----------------------
98  -- Common Clock Module
99  ----------------------
100  TenGigEthGtx7Clk_Inst : entity work.TenGigEthGtx7Clk
101  generic map (
102  TPD_G => TPD_G,
106  port map (
107  -- Clocks and Resets
108  extRst => extRst,
109  phyClk => phyClock,
110  phyRst => phyReset,
111  -- MGT Clock Port (156.25 MHz or 312.5 MHz)
112  gtRefClk => gtRefClk,
113  gtClkP => gtClkP,
114  gtClkN => gtClkN,
115  gtClk => gtClk,
116  -- Quad PLL Ports
117  qplllock => qplllock,
120  qpllRst => qpllReset);
121 
122  qpllReset <= uOr(qpllRst) and not(qPllLock);
123 
124  ----------------
125  -- 10GigE Module
126  ----------------
127  GEN_LANE :
128  for i in 0 to NUM_LANE_G-1 generate
129 
130  TenGigEthGtx7_Inst : entity work.TenGigEthGtx7
131  generic map (
132  TPD_G => TPD_G,
133  -- AXI-Lite Configurations
136  -- AXI Streaming Configurations
138  port map (
139  -- Local Configurations
140  localMac => localMac(i),
141  -- Streaming DMA Interface
142  dmaClk => dmaClk(i),
143  dmaRst => dmaRst(i),
145  dmaIbSlave => dmaIbSlaves(i),
147  dmaObSlave => dmaObSlaves(i),
148  -- Slave AXI-Lite Interface
149  axiLiteClk => axiLiteClk(i),
150  axiLiteRst => axiLiteRst(i),
155  -- SFP+ Ports
156  sigDet => sigDet(i),
157  txFault => txFault(i),
158  txDisable => txDisable(i),
159  -- Misc. Signals
160  extRst => extRst,
161  phyClk => phyClock,
162  phyRst => phyReset,
163  phyReady => phyReady(i),
164  -- Quad PLL Ports
165  qplllock => qplllock,
168  -- MGT Ports
169  gtTxP => gtTxP(i),
170  gtTxN => gtTxN(i),
171  gtRxP => gtRxP(i),
172  gtRxN => gtRxN(i));
173 
174  end generate GEN_LANE;
175 
176 end mapping;
USE_GTREFCLK_Gboolean := false
out gtTxNslv( NUM_LANE_G- 1 downto 0)
out axiLiteReadSlaveAxiLiteReadSlaveType
AXIS_CONFIG_GAxiStreamConfigArray( 3 downto 0) :=( others => AXI_STREAM_CONFIG_INIT_C)
array(natural range <> ) of AxiStreamSlaveType AxiStreamSlaveArray
out txDisableslv( NUM_LANE_G- 1 downto 0)
in axiLiteClkslv( NUM_LANE_G- 1 downto 0) :=( others => '0')
in axiLiteRstsl := '0'
array(natural range <> ) of AxiLiteWriteSlaveType AxiLiteWriteSlaveArray
Definition: AxiLitePkg.vhd:164
std_logic sl
Definition: StdRtlPkg.vhd:28
in dmaClkslv( NUM_LANE_G- 1 downto 0)
slv( NUM_LANE_G- 1 downto 0) qpllRst
QPLL_REFCLK_SEL_Gbit_vector := "001"
out axiLiteWriteSlavesAxiLiteWriteSlaveArray( NUM_LANE_G- 1 downto 0)
out dmaIbMasterAxiStreamMasterType
array(natural range <> ) of AxiLiteReadMasterType AxiLiteReadMasterArray
Definition: AxiLitePkg.vhd:77
EN_AXI_REG_Gboolean := false
NUM_LANE_Gnatural range 1 to 4:= 1
in dmaIbSlavesAxiStreamSlaveArray( NUM_LANE_G- 1 downto 0)
in dmaIbSlaveAxiStreamSlaveType
REFCLK_DIV2_Gboolean := false
in localMacSlv48Array( NUM_LANE_G- 1 downto 0) :=( others => MAC_ADDR_INIT_C)
in axiLiteWriteMasterAxiLiteWriteMasterType := AXI_LITE_WRITE_MASTER_INIT_C
EN_AXI_REG_Gboolean := false
QPLL_REFCLK_SEL_Gbit_vector := "001"
array(natural range <> ) of AxiStreamConfigType AxiStreamConfigArray
slv( 1 downto 0) := "10" AXI_RESP_SLVERR_C
Definition: AxiLitePkg.vhd:36
_library_ ieeeieee
in sigDetslv( NUM_LANE_G- 1 downto 0) :=( others => '1')
in txFaultslv( NUM_LANE_G- 1 downto 0) :=( others => '0')
out dmaObSlavesAxiStreamSlaveArray( NUM_LANE_G- 1 downto 0)
TPD_Gtime := 1 ns
in sigDetsl := '1'
in dmaObMasterAxiStreamMasterType
in axiLiteClksl := '0'
out gtTxPslv( NUM_LANE_G- 1 downto 0)
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
array(natural range <> ) of AxiStreamMasterType AxiStreamMasterArray
AXIS_CONFIG_GAxiStreamConfigType := AXI_STREAM_CONFIG_INIT_C
REFCLK_DIV2_Gboolean := false
USE_GTREFCLK_Gboolean := false
AxiLiteReadMasterType :=(araddr =>( others => '0'),arprot =>( others => '0'),arvalid => '0',rready => '1') AXI_LITE_READ_MASTER_INIT_C
Definition: AxiLitePkg.vhd:69
out axiLiteReadSlavesAxiLiteReadSlaveArray( NUM_LANE_G- 1 downto 0)
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
in txFaultsl := '0'
in axiLiteReadMastersAxiLiteReadMasterArray( NUM_LANE_G- 1 downto 0) :=( others => AXI_LITE_READ_MASTER_INIT_C)
array(natural range <> ) of AxiLiteWriteMasterType AxiLiteWriteMasterArray
Definition: AxiLitePkg.vhd:136
out axiLiteWriteSlaveAxiLiteWriteSlaveType
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
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
in gtRefClksl := '0'
out dmaObSlaveAxiStreamSlaveType
in gtRxPslv( NUM_LANE_G- 1 downto 0)
in localMacslv( 47 downto 0) := MAC_ADDR_INIT_C
array(natural range <> ) of AxiLiteReadSlaveType AxiLiteReadSlaveArray
Definition: AxiLitePkg.vhd:103
in dmaRstslv( NUM_LANE_G- 1 downto 0)
out dmaIbMastersAxiStreamMasterArray( NUM_LANE_G- 1 downto 0)
in axiLiteReadMasterAxiLiteReadMasterType := AXI_LITE_READ_MASTER_INIT_C
in gtRxNslv( NUM_LANE_G- 1 downto 0)
in axiLiteWriteMastersAxiLiteWriteMasterArray( NUM_LANE_G- 1 downto 0) :=( others => AXI_LITE_WRITE_MASTER_INIT_C)
in axiLiteRstslv( NUM_LANE_G- 1 downto 0) :=( others => '0')
std_logic_vector slv
Definition: StdRtlPkg.vhd:29
out phyReadyslv( NUM_LANE_G- 1 downto 0)
in dmaObMastersAxiStreamMasterArray( NUM_LANE_G- 1 downto 0)