SURF  1.0
IpV4Engine.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : IpV4Engine.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2015-08-12
5 -- Last update: 2016-09-16
6 -------------------------------------------------------------------------------
7 -- Description: IPv4 Top-level Module for IPv4/ARP/ICMP
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_IpV4Engine
27 entity IpV4Engine is
28  generic (
29  TPD_G : time := 1 ns; -- Simulation parameter only
30  PROTOCOL_SIZE_G : positive := 1; -- Default to 1x protocol
31  PROTOCOL_G : Slv8Array := (0 => UDP_C); -- Default to UDP protocol
32  CLIENT_SIZE_G : positive := 1; -- Sets the number of attached client engines
33  CLK_FREQ_G : real := 156.25E+06; -- In units of Hz
34  TTL_G : slv(7 downto 0) := x"20";
35  VLAN_G : boolean := false); -- true = VLAN support
36  port (
37  -- Local Configurations
38  localMac : in slv(47 downto 0); -- big-Endian configuration
39  localIp : in slv(31 downto 0); -- big-Endian configuration
40  -- Interface to Ethernet Media Access Controller (MAC)
45  -- Interface to Protocol Engine(s)
50  -- Interface to Client Engine(s)
51  arpReqMasters : in AxiStreamMasterArray(CLIENT_SIZE_G-1 downto 0); -- Request via IP address
53  arpAckMasters : out AxiStreamMasterArray(CLIENT_SIZE_G-1 downto 0); -- Respond with MAC address
55  -- Clock and Reset
56  clk : in sl;
57  rst : in sl);
58 end IpV4Engine;
59 
60 architecture mapping of IpV4Engine is
61 
62 - function GenIPv4List (foo : Slv8Array(PROTOCOL_SIZE_G1 downto 0)) return Slv8Array is
63  variable retVar : Slv8Array(PROTOCOL_SIZE_G downto 0);
64  variable i : natural;
65  begin
66  for i in PROTOCOL_SIZE_G-1 downto 0 loop
67  retVar(i) := foo(i);
68  end loop;
69  retVar(PROTOCOL_SIZE_G) := ICMP_C;
70  return retVar;
71  end function;
72  constant PROTOCOL_C : Slv8Array(PROTOCOL_SIZE_G downto 0) := GenIPv4List(PROTOCOL_G);
73 
78 
83 
86 
91 
92 begin
93 
94  U_EthFrameDeMux : entity work.IpV4EngineDeMux
95  generic map (
96  TPD_G => TPD_G,
97  VLAN_G => VLAN_G)
98  port map (
99  -- Local Configurations
100  localMac => localMac,
101  -- Slave
104  -- Masters
109  -- Clock and Reset
110  clk => clk,
111  rst => rst);
112 
113  U_EthFrameMux : entity work.AxiStreamMux
114  generic map (
115  TPD_G => TPD_G,
116  NUM_SLAVES_G => 2)
117  port map (
118  -- Clock and reset
119  axisClk => clk,
120  axisRst => rst,
121  -- Slaves
122  sAxisMasters(0) => obArpMaster,
123  sAxisMasters(1) => obIpv4Master,
124  sAxisSlaves(0) => obArpSlave,
125  sAxisSlaves(1) => obIpv4Slave,
126  -- Master
129 
130  U_ArpEngine : entity work.ArpEngine
131  generic map (
132  TPD_G => TPD_G,
135  VLAN_G => VLAN_G)
136  port map (
137  -- Local Configurations
138  localMac => localMac,
139  localIp => localIp,
140  -- Interface to Client Engine(s)
145  -- Interface to Ethernet Frame MUX/DEMUX
150  -- Clock and Reset
151  clk => clk,
152  rst => rst);
153 
154  U_IpV4EngineRx : entity work.IpV4EngineRx
155  generic map (
156  TPD_G => TPD_G,
157  PROTOCOL_SIZE_G => (PROTOCOL_SIZE_G+1),
159  VLAN_G => VLAN_G)
160  port map (
161  -- Interface to Ethernet Frame MUX/DEMUX
166  -- Interface to Protocol Engine
169  -- Clock and Reset
170  clk => clk,
171  rst => rst);
172 
173  U_IpV4EngineTx : entity work.IpV4EngineTx
174  generic map (
175  TPD_G => TPD_G,
176  PROTOCOL_SIZE_G => (PROTOCOL_SIZE_G+1),
178  TTL_G => TTL_G,
179  VLAN_G => VLAN_G)
180  port map (
181  -- Local Configurations
182  localMac => localMac,
183  -- Interface to Ethernet Frame MUX/DEMUX
188  -- Interface to Protocol Engine
191  -- Clock and Reset
192  clk => clk,
193  rst => rst);
194 
195  U_IcmpEngine : entity work.IcmpEngine
196  generic map (
197  TPD_G => TPD_G)
198  port map (
199  -- Local Configurations
200  localIp => localIp,
201  -- Interface to ICMP Engine
206  -- Clock and Reset
207  clk => clk,
208  rst => rst);
209 
210  GEN_VEC :
211  for i in (PROTOCOL_SIZE_G-1) downto 0 generate
212  obMasters(i) <= obProtocolMasters(i);
213  obProtocolSlaves(i) <= obSlaves(i);
214  ibProtocolMasters(i) <= ibMasters(i);
215  ibSlaves(i) <= ibProtocolSlaves(i);
216  end generate GEN_VEC;
217 
218 end mapping;
_library_ ieeeieee
Definition: IcmpEngine.vhd:18
TPD_Gtime := 1 ns
array(natural range <> ) of AxiStreamSlaveType AxiStreamSlaveArray
TTL_Gslv( 7 downto 0) := x"20"
Definition: IpV4Engine.vhd:34
AxiStreamMasterArray( PROTOCOL_SIZE_G downto 0) obMasters
Definition: IpV4Engine.vhd:89
PROTOCOL_SIZE_Gpositive := 1
Definition: IpV4Engine.vhd:30
out ibIpv4SlaveAxiStreamSlaveType
Slv8Array( PROTOCOL_SIZE_G downto 0) := GenIPv4List(PROTOCOL_G ) PROTOCOL_C
Definition: IpV4Engine.vhd:72
VLAN_Gboolean := false
PROTOCOL_GSlv8Array :=( 0=> UDP_C)
Definition: IpV4Engine.vhd:31
in rstsl
Definition: IpV4Engine.vhd:57
AxiStreamMasterType obArpMaster
Definition: IpV4Engine.vhd:76
in localIpslv( 31 downto 0)
Definition: ArpEngine.vhd:39
out obIcmpMasterAxiStreamMasterType
Definition: IcmpEngine.vhd:39
in obIcmpSlaveAxiStreamSlaveType
Definition: IcmpEngine.vhd:40
std_logic sl
Definition: StdRtlPkg.vhd:28
in ibIpv4MasterAxiStreamMasterType
CLIENT_SIZE_Gpositive := 1
Definition: ArpEngine.vhd:33
out ibProtocolMastersAxiStreamMasterArray( PROTOCOL_SIZE_G- 1 downto 0)
out ibMacMasterAxiStreamMasterType
Definition: IpV4Engine.vhd:43
VLAN_Gboolean := false
Definition: IpV4Engine.vhd:35
in obMacMasterAxiStreamMasterType
in localMacslv( 47 downto 0)
Definition: ArpEngine.vhd:38
in clksl
Definition: IcmpEngine.vhd:42
CLK_FREQ_Greal := 156.25E+06
Definition: ArpEngine.vhd:34
in obProtocolMastersAxiStreamMasterArray( PROTOCOL_SIZE_G- 1 downto 0)
out ibArpMasterAxiStreamMasterType
out ibIpv4MasterAxiStreamMasterType
out ibArpSlaveAxiStreamSlaveType
Definition: ArpEngine.vhd:47
AxiStreamMasterType obIpv4Master
Definition: IpV4Engine.vhd:81
in localMacslv( 47 downto 0)
in obProtocolMastersAxiStreamMasterArray( PROTOCOL_SIZE_G- 1 downto 0)
Definition: IpV4Engine.vhd:46
in localIpslv( 31 downto 0)
Definition: IcmpEngine.vhd:35
out obMacSlaveAxiStreamSlaveType
in rstsl
Definition: IcmpEngine.vhd:43
out arpAckMastersAxiStreamMasterArray( CLIENT_SIZE_G- 1 downto 0)
Definition: IpV4Engine.vhd:53
AxiStreamSlaveType localhostSlave
Definition: IpV4Engine.vhd:85
out localhostMasterAxiStreamMasterType
in localhostSlaveAxiStreamSlaveType
in clksl
Definition: ArpEngine.vhd:51
in clksl
Definition: IpV4Engine.vhd:56
out mAxisMasterAxiStreamMasterType
NUM_SLAVES_Ginteger range 1 to 32:= 4
out obMacSlaveAxiStreamSlaveType
Definition: IpV4Engine.vhd:42
AxiStreamMasterType ibIpv4Master
Definition: IpV4Engine.vhd:79
out arpReqSlavesAxiStreamSlaveArray( CLIENT_SIZE_G- 1 downto 0)
Definition: IpV4Engine.vhd:52
AxiStreamSlaveType obArpSlave
Definition: IpV4Engine.vhd:77
out ibIcmpSlaveAxiStreamSlaveType
Definition: IcmpEngine.vhd:38
out obProtocolSlavesAxiStreamSlaveArray( PROTOCOL_SIZE_G- 1 downto 0)
Definition: IpV4Engine.vhd:47
TPD_Gtime := 1 ns
out obArpMasterAxiStreamMasterType
Definition: ArpEngine.vhd:48
in ibArpMasterAxiStreamMasterType
Definition: ArpEngine.vhd:46
in arpReqMastersAxiStreamMasterArray( CLIENT_SIZE_G- 1 downto 0)
Definition: IpV4Engine.vhd:51
VLAN_Gboolean := false
in arpAckSlavesAxiStreamSlaveArray( CLIENT_SIZE_G- 1 downto 0)
Definition: IpV4Engine.vhd:54
AxiStreamSlaveArray( PROTOCOL_SIZE_G downto 0) ibSlaves
Definition: IpV4Engine.vhd:88
TPD_Gtime := 1 ns
Definition: IpV4Engine.vhd:29
out arpAckMastersAxiStreamMasterArray( CLIENT_SIZE_G- 1 downto 0)
Definition: ArpEngine.vhd:43
array(natural range <> ) of AxiStreamMasterType AxiStreamMasterArray
out arpReqSlavesAxiStreamSlaveArray( CLIENT_SIZE_G- 1 downto 0)
Definition: ArpEngine.vhd:42
AxiStreamSlaveType ibArpSlave
Definition: IpV4Engine.vhd:75
out localhostSlaveAxiStreamSlaveType
Slv8Array GenIPv4Listfoo,
Definition: IpV4Engine.vhd:62
out ibProtocolMastersAxiStreamMasterArray( PROTOCOL_SIZE_G- 1 downto 0)
Definition: IpV4Engine.vhd:48
AxiStreamSlaveType ibIpv4Slave
Definition: IpV4Engine.vhd:80
TPD_Gtime := 1 ns
Definition: IcmpEngine.vhd:32
in localIpslv( 31 downto 0)
Definition: IpV4Engine.vhd:39
in obMacMasterAxiStreamMasterType
Definition: IpV4Engine.vhd:41
in ibIcmpMasterAxiStreamMasterType
Definition: IcmpEngine.vhd:37
TPD_Gtime := 1 ns
VLAN_Gboolean := false
VLAN_Gboolean := false
Definition: ArpEngine.vhd:35
TPD_Gtime := 1 ns
Definition: ArpEngine.vhd:32
out obIpv4MasterAxiStreamMasterType
AxiStreamMasterType ibArpMaster
Definition: IpV4Engine.vhd:74
CLK_FREQ_Greal := 156.25E+06
Definition: IpV4Engine.vhd:33
CLIENT_SIZE_Gpositive := 1
Definition: IpV4Engine.vhd:32
in localMacslv( 47 downto 0)
Definition: IpV4Engine.vhd:38
in arpReqMastersAxiStreamMasterArray( CLIENT_SIZE_G- 1 downto 0)
Definition: ArpEngine.vhd:41
TTL_Gslv( 7 downto 0) := x"20"
out obProtocolSlavesAxiStreamSlaveArray( PROTOCOL_SIZE_G- 1 downto 0)
slv( 7 downto 0) := x"11" UDP_C
Definition: EthMacPkg.vhd:39
in localMacslv( 47 downto 0)
TPD_Gtime := 1 ns
PROTOCOL_SIZE_Gpositive := 1
in ibMacSlaveAxiStreamSlaveType
Definition: IpV4Engine.vhd:44
PROTOCOL_GSlv8Array :=( 0=> UDP_C)
AxiStreamMasterArray( PROTOCOL_SIZE_G downto 0) ibMasters
Definition: IpV4Engine.vhd:87
in obArpSlaveAxiStreamSlaveType
Definition: ArpEngine.vhd:49
array(natural range <> ) of slv( 7 downto 0) Slv8Array
Definition: StdRtlPkg.vhd:403
in localhostMasterAxiStreamMasterType
in rstsl
Definition: ArpEngine.vhd:52
AxiStreamSlaveArray( PROTOCOL_SIZE_G downto 0) obSlaves
Definition: IpV4Engine.vhd:90
in ibArpSlaveAxiStreamSlaveType
in arpAckSlavesAxiStreamSlaveArray( CLIENT_SIZE_G- 1 downto 0)
Definition: ArpEngine.vhd:44
AxiStreamMasterType localhostMaster
Definition: IpV4Engine.vhd:84
PROTOCOL_SIZE_Gpositive := 1
in mAxisSlaveAxiStreamSlaveType
in ibProtocolSlavesAxiStreamSlaveArray( PROTOCOL_SIZE_G- 1 downto 0)
Definition: IpV4Engine.vhd:49
in ibIpv4SlaveAxiStreamSlaveType
in obIpv4SlaveAxiStreamSlaveType
in ibProtocolSlavesAxiStreamSlaveArray( PROTOCOL_SIZE_G- 1 downto 0)
PROTOCOL_GSlv8Array :=( 0=> UDP_C)
AxiStreamSlaveType obIpv4Slave
Definition: IpV4Engine.vhd:82
std_logic_vector slv
Definition: StdRtlPkg.vhd:29
slv( 7 downto 0) := x"01" ICMP_C
Definition: EthMacPkg.vhd:41