SURF  1.0
EthMacTxFifo.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : EthMacTxFifo.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2016-09-21
5 -- Last update: 2016-10-20
6 -------------------------------------------------------------------------------
7 -- Description: Inbound FIFO buffers
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.EthMacPkg.all;
24 
25 --! @see entity
26  --! @ingroup ethernet_EthMacCore
27 entity EthMacTxFifo is
28  generic (
29  TPD_G : time := 1 ns;
30  PRIM_COMMON_CLK_G : boolean := false;
32  BYP_EN_G : boolean := false;
33  BYP_COMMON_CLK_G : boolean := false;
35  VLAN_EN_G : boolean := false;
36  VLAN_SIZE_G : positive := 1;
37  VLAN_COMMON_CLK_G : boolean := false;
39  port (
40  -- Master Clock and Reset
41  mClk : in sl;
42  mRst : in sl;
43  -- Primary Interface
44  sPrimClk : in sl;
45  sPrimRst : in sl;
50  -- Bypass interface
51  sBypClk : in sl;
52  sBypRst : in sl;
57  -- VLAN Interfaces
58  sVlanClk : in sl;
59  sVlanRst : in sl;
64 end EthMacTxFifo;
65 
66 architecture mapping of EthMacTxFifo is
67 
68 begin
69 
70  PRIM_FIFO_BYPASS : if ((PRIM_COMMON_CLK_G = true) and (PRIM_CONFIG_G = EMAC_AXIS_CONFIG_C)) generate
73  end generate;
74 
75  PRIM_FIFO : if ((PRIM_COMMON_CLK_G = false) or (PRIM_CONFIG_G /= EMAC_AXIS_CONFIG_C)) generate
76  U_Fifo : entity work.AxiStreamFifoV2
77  generic map (
78  -- General Configurations
79  TPD_G => TPD_G,
80  INT_PIPE_STAGES_G => 0,
81  PIPE_STAGES_G => 1,
82  SLAVE_READY_EN_G => true,
83  VALID_THOLD_G => 1,
84  -- FIFO configurations
85  BRAM_EN_G => false,
87  CASCADE_SIZE_G => 1,
88  FIFO_ADDR_WIDTH_G => 4,
89  -- AXI Stream Port Configurations
92  port map (
93  sAxisClk => sPrimClk,
94  sAxisRst => sPrimRst,
97  mAxisClk => mClk,
98  mAxisRst => mRst,
100  mAxisSlave => mPrimSlave);
101  end generate;
102 
103  BYP_DISABLED : if (BYP_EN_G = false) generate
106  end generate;
107 
108  BYP_ENABLED : if (BYP_EN_G = true) generate
109 
110  BYP_FIFO_BYPASS : if ((BYP_COMMON_CLK_G = true) and (BYP_CONFIG_G = EMAC_AXIS_CONFIG_C)) generate
112  sBypSlave <= mBypSlave;
113  end generate;
114 
115  BYP_FIFO : if ((BYP_COMMON_CLK_G = false) or (BYP_CONFIG_G /= EMAC_AXIS_CONFIG_C)) generate
116  U_Fifo : entity work.AxiStreamFifoV2
117  generic map (
118  -- General Configurations
119  TPD_G => TPD_G,
120  INT_PIPE_STAGES_G => 0,
121  PIPE_STAGES_G => 1,
122  SLAVE_READY_EN_G => true,
123  VALID_THOLD_G => 1,
124  -- FIFO configurations
125  BRAM_EN_G => false,
127  CASCADE_SIZE_G => 1,
128  FIFO_ADDR_WIDTH_G => 4,
129  -- AXI Stream Port Configurations
132  port map (
133  sAxisClk => sBypClk,
134  sAxisRst => sBypRst,
137  mAxisClk => mClk,
138  mAxisRst => mRst,
140  mAxisSlave => mBypSlave);
141  end generate;
142 
143  end generate;
144 
145  VLAN_DISABLED : if (VLAN_EN_G = false) generate
146  sVlanSlaves <= (others => AXI_STREAM_SLAVE_FORCE_C);
147  mVlanMasters <= (others => AXI_STREAM_MASTER_INIT_C);
148  end generate;
149 
150  VLAN_ENABLED : if (VLAN_EN_G = true) generate
151  VLAN_FIFO_BYPASS : if ((VLAN_COMMON_CLK_G = true) and (VLAN_CONFIG_G = EMAC_AXIS_CONFIG_C)) generate
154  end generate;
155 
156  VLAN_FIFO : if ((VLAN_COMMON_CLK_G = false) or (VLAN_CONFIG_G /= EMAC_AXIS_CONFIG_C)) generate
157  GEN_VEC : for i in (VLAN_SIZE_G-1) downto 0 generate
158  U_Fifo : entity work.AxiStreamFifoV2
159  generic map (
160  -- General Configurations
161  TPD_G => TPD_G,
162  INT_PIPE_STAGES_G => 0,
163  PIPE_STAGES_G => 1,
164  SLAVE_READY_EN_G => true,
165  VALID_THOLD_G => 1,
166  -- FIFO configurations
167  BRAM_EN_G => false,
169  CASCADE_SIZE_G => 1,
170  FIFO_ADDR_WIDTH_G => 4,
171  -- AXI Stream Port Configurations
174  port map (
175  sAxisClk => sVlanClk,
176  sAxisRst => sVlanRst,
178  sAxisSlave => sVlanSlaves(i),
179  mAxisClk => mClk,
180  mAxisRst => mRst,
182  mAxisSlave => mVlanSlaves(i));
183  end generate GEN_VEC;
184  end generate;
185  end generate;
186 
187 end mapping;
FIFO_ADDR_WIDTH_Ginteger range 4 to 48:= 9
array(natural range <> ) of AxiStreamSlaveType AxiStreamSlaveArray
VLAN_SIZE_Gpositive := 1
PRIM_CONFIG_GAxiStreamConfigType := EMAC_AXIS_CONFIG_C
PIPE_STAGES_Gnatural range 0 to 16:= 1
BYP_COMMON_CLK_Gboolean := false
std_logic sl
Definition: StdRtlPkg.vhd:28
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
out mVlanMastersAxiStreamMasterArray( VLAN_SIZE_G- 1 downto 0)
in mVlanSlavesAxiStreamSlaveArray( VLAN_SIZE_G- 1 downto 0)
SLAVE_AXI_CONFIG_GAxiStreamConfigType := AXI_STREAM_CONFIG_INIT_C
in sBypMasterAxiStreamMasterType
SLAVE_READY_EN_Gboolean := true
in mPrimSlaveAxiStreamSlaveType
in mBypSlaveAxiStreamSlaveType
VLAN_COMMON_CLK_Gboolean := false
BYP_EN_Gboolean := false
GEN_SYNC_FIFO_Gboolean := false
PRIM_COMMON_CLK_Gboolean := false
out mPrimMasterAxiStreamMasterType
out sPrimSlaveAxiStreamSlaveType
out mBypMasterAxiStreamMasterType
INT_PIPE_STAGES_Gnatural range 0 to 16:= 0
BRAM_EN_Gboolean := true
TPD_Gtime := 1 ns
VLAN_EN_Gboolean := false
out sVlanSlavesAxiStreamSlaveArray( VLAN_SIZE_G- 1 downto 0)
array(natural range <> ) of AxiStreamMasterType AxiStreamMasterArray
out sAxisSlaveAxiStreamSlaveType
in sAxisMasterAxiStreamMasterType
out mAxisMasterAxiStreamMasterType
VLAN_CONFIG_GAxiStreamConfigType := EMAC_AXIS_CONFIG_C
AxiStreamSlaveType :=(tReady => '1') AXI_STREAM_SLAVE_FORCE_C
in sVlanMastersAxiStreamMasterArray( VLAN_SIZE_G- 1 downto 0)
TPD_Gtime := 1 ns
in mAxisSlaveAxiStreamSlaveType
CASCADE_SIZE_Ginteger range 1 to ( 2** 24):= 1
in sPrimMasterAxiStreamMasterType
VALID_THOLD_Ginteger range 0 to ( 2** 24):= 1
BYP_CONFIG_GAxiStreamConfigType := EMAC_AXIS_CONFIG_C
MASTER_AXI_CONFIG_GAxiStreamConfigType := AXI_STREAM_CONFIG_INIT_C
out sBypSlaveAxiStreamSlaveType
AxiStreamConfigType :=(TSTRB_EN_C => false,TDATA_BYTES_C => 16,TDEST_BITS_C => 8,TID_BITS_C => 0,TKEEP_MODE_C => TKEEP_COMP_C,TUSER_BITS_C => 4,TUSER_MODE_C => TUSER_FIRST_LAST_C) EMAC_AXIS_CONFIG_C
Definition: EthMacPkg.vhd:58