SURF  1.0
EthMacRxCsum.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : EthMacRxCsum.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2016-09-08
5 -- Last update: 2017-02-22
6 -------------------------------------------------------------------------------
7 -- Description: RX Checksum Hardware Offloading Engine
8 -- https://docs.google.com/spreadsheets/d/1_1M1keasfq8RLmRYHkO0IlRhMq5YZTgJ7OGrWvkib8I/edit?usp=sharing
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 use ieee.std_logic_arith.all;
22 use ieee.std_logic_unsigned.all;
23 
24 use work.StdRtlPkg.all;
25 use work.AxiStreamPkg.all;
26 use work.EthMacPkg.all;
27 
28 --! @see entity
29  --! @ingroup ethernet_EthMacCore
30 entity EthMacRxCsum is
31  generic (
32  TPD_G : time := 1 ns;
33  JUMBO_G : boolean := true;
34  VLAN_G : boolean := false);
35  port (
36  -- Clock and Reset
37  ethClk : in sl;
38  ethRst : in sl;
39  -- Configurations
40  ipCsumEn : in sl;
41  tcpCsumEn : in sl;
42  udpCsumEn : in sl;
43  -- Inbound data from MAC
46 end EthMacRxCsum;
47 
48 architecture rtl of EthMacRxCsum is
49 
50  constant MAX_FRAME_SIZE_C : natural := ite(JUMBO_G, 9000, 1500);
51 
52  type StateType is (
53  IDLE_S,
54  IPV4_HDR0_S,
55  IPV4_HDR1_S,
56  MOVE_S,
57  BLOWOFF_S);
58 
59  type RegType is record
60  valid : slv(1 downto 0);
61  fragSof : sl;
62  fragDet : slv(EMAC_CSUM_PIPELINE_C+1 downto 0);
63  eofeDet : slv(EMAC_CSUM_PIPELINE_C+1 downto 0);
64  ipv4Det : slv(EMAC_CSUM_PIPELINE_C+1 downto 0);
65  udpDet : slv(EMAC_CSUM_PIPELINE_C+1 downto 0);
66  tcpDet : slv(EMAC_CSUM_PIPELINE_C+1 downto 0);
67  tcpFlag : sl;
68  byteCnt : natural range 0 to (MAX_FRAME_SIZE_C + 32); -- MTU size + padding
69  ipv4Hdr : Slv8Array(19 downto 0);
70  ipv4Len : Slv16Array(EMAC_CSUM_PIPELINE_C+1 downto 0);
71  protLen : Slv16Array(EMAC_CSUM_PIPELINE_C+1 downto 0);
72  protCsum : Slv16Array(EMAC_CSUM_PIPELINE_C+1 downto 0);
73  calc : EthMacCsumAccumArray(1 downto 0);
74  tKeep : slv(15 downto 0);
75  tData : slv(127 downto 0);
77  mAxisMasters : AxiStreamMasterArray(EMAC_CSUM_PIPELINE_C+1 downto 0);
78  state : StateType;
79  end record RegType;
80  constant REG_INIT_C : RegType := (
81  valid => (others => '0'),
82  fragSof => '0',
83  fragDet => (others => '0'),
84  eofeDet => (others => '0'),
85  ipv4Det => (others => '0'),
86  udpDet => (others => '0'),
87  tcpDet => (others => '0'),
88  tcpFlag => '0',
89  byteCnt => 0,
90  ipv4Hdr => (others => (others => '0')),
91  ipv4Len => (others => (others => '0')),
92  protLen => (others => (others => '0')),
93  protCsum => (others => (others => '0')),
94  calc => (others => ETH_MAC_CSUM_ACCUM_INIT_C),
95  tKeep => (others => '0'),
96  tData => (others => '0'),
98  mAxisMasters => (others => AXI_STREAM_MASTER_INIT_C),
99  state => IDLE_S);
100 
101  signal r : RegType := REG_INIT_C;
102  signal rin : RegType;
103 
104  signal dbg : Slv16Array(1 downto 0);
105 
106  -- attribute dont_touch : string;
107  -- attribute dont_touch of r : signal is "TRUE";
108 
109 begin
110 
111  comb : process (ethRst, ipCsumEn, r, sAxisMaster, tcpCsumEn, udpCsumEn) is
112  variable v : RegType;
113  variable dummy : Slv16Array(1 downto 0);
114  begin
115  -- Latch the current value
116  v := r;
117 
118  GetEthMacCsum (
119  r.udpDet(EMAC_CSUM_PIPELINE_C),
120  r.mAxisMaster.tLast,
121  r.ipv4Hdr,
122  r.tKeep,
123  r.tData,
124  r.protLen(EMAC_CSUM_PIPELINE_C-1),
125  r.protCsum(EMAC_CSUM_PIPELINE_C),
126  r.calc,
127  v.calc,
128  v.valid(0),
129  dummy(0), -- Unused in RX CSUM
130  v.valid(1),
131  dummy(1)); -- Unused in RX CSUM
132 
133  -- Pipeline alignment to GetEthMacCsum()
134  v.mAxisMasters := r.mAxisMasters(EMAC_CSUM_PIPELINE_C downto 0) & r.mAxisMaster;
135  v.fragDet := r.fragDet(EMAC_CSUM_PIPELINE_C downto 0) & r.fragDet(0);
136  v.eofeDet := r.eofeDet(EMAC_CSUM_PIPELINE_C downto 0) & r.eofeDet(0);
137  v.ipv4Det := r.ipv4Det(EMAC_CSUM_PIPELINE_C downto 0) & r.ipv4Det(0);
138  v.udpDet := r.udpDet(EMAC_CSUM_PIPELINE_C downto 0) & r.udpDet(0);
139  v.tcpDet := r.tcpDet(EMAC_CSUM_PIPELINE_C downto 0) & r.tcpDet(0);
140  v.ipv4Len := r.ipv4Len(EMAC_CSUM_PIPELINE_C downto 0) & r.ipv4Len(0);
141  v.protLen := r.protLen(EMAC_CSUM_PIPELINE_C downto 0) & r.protLen(0);
142  v.protCsum := r.protCsum(EMAC_CSUM_PIPELINE_C downto 0) & r.protCsum(0);
143 
144  -- Reset the flags
145  v.tKeep := (others => '0');
146  v.mAxisMaster.tValid := '0';
147  v.mAxisMaster.tLast := '0';
148 
149  -- Check for tLast in pipeline
150  if (v.mAxisMasters(EMAC_CSUM_PIPELINE_C+1).tLast = '1') then
151  -- Check if IPv4 is detected and being checked
152  if (r.ipv4Det(EMAC_CSUM_PIPELINE_C+1) = '1') and (ipCsumEn = '1') then
153  -- Forward the result of checksum calculation
154  axiStreamSetUserBit(EMAC_AXIS_CONFIG_C, v.mAxisMasters(EMAC_CSUM_PIPELINE_C+1), EMAC_IPERR_BIT_C, not(r.valid(0)));
155  axiStreamSetUserBit(EMAC_AXIS_CONFIG_C, v.mAxisMasters(EMAC_CSUM_PIPELINE_C+1), EMAC_EOFE_BIT_C, not(r.valid(0)));
156  end if;
157  -- Check if UDP is detected and being checked
158  if (r.ipv4Det(EMAC_CSUM_PIPELINE_C+1) = '1') and (r.udpDet(EMAC_CSUM_PIPELINE_C+1) = '1') and (udpCsumEn = '1') and (r.fragDet(EMAC_CSUM_PIPELINE_C+1) = '0') then
159  -- Forward the result of checksum calculation
160  axiStreamSetUserBit(EMAC_AXIS_CONFIG_C, v.mAxisMasters(EMAC_CSUM_PIPELINE_C+1), EMAC_UDPERR_BIT_C, not(r.valid(1)));
161  axiStreamSetUserBit(EMAC_AXIS_CONFIG_C, v.mAxisMasters(EMAC_CSUM_PIPELINE_C+1), EMAC_EOFE_BIT_C, not(r.valid(1)));
162  -- Check for mismatch in IPv4 length with UDP length
163  if (r.ipv4Len(EMAC_CSUM_PIPELINE_C+1) /= (r.protLen(EMAC_CSUM_PIPELINE_C+1) + 20)) then
164  -- Set the error flags
165  axiStreamSetUserBit(EMAC_AXIS_CONFIG_C, v.mAxisMasters(EMAC_CSUM_PIPELINE_C+1), EMAC_UDPERR_BIT_C, '1');
166  axiStreamSetUserBit(EMAC_AXIS_CONFIG_C, v.mAxisMasters(EMAC_CSUM_PIPELINE_C+1), EMAC_EOFE_BIT_C, '1');
167  end if;
168  end if;
169  -- Check if TCP is detected and being checked
170  if (r.ipv4Det(EMAC_CSUM_PIPELINE_C+1) = '1') and (r.tcpDet(EMAC_CSUM_PIPELINE_C+1) = '1') and (tcpCsumEn = '1') and (r.fragDet(EMAC_CSUM_PIPELINE_C+1) = '0') then
171  -- Forward the result of checksum calculation
172  axiStreamSetUserBit(EMAC_AXIS_CONFIG_C, v.mAxisMasters(EMAC_CSUM_PIPELINE_C+1), EMAC_TCPERR_BIT_C, not(r.valid(1)));
173  axiStreamSetUserBit(EMAC_AXIS_CONFIG_C, v.mAxisMasters(EMAC_CSUM_PIPELINE_C+1), EMAC_EOFE_BIT_C, not(r.valid(1)));
174  end if;
175  end if;
176 
177  -- State Machine
178  case r.state is
179  ----------------------------------------------------------------------
180  when IDLE_S =>
181  -- Reset the flags and counter
182  v.fragDet(0) := '0';
183  v.eofeDet(0) := '0';
184  v.ipv4Det(0) := '0';
185  v.udpDet(0) := '0';
186  v.tcpDet(0) := '0';
187  v.tcpFlag := '0';
188  -- Check for valid data
189  if (sAxisMaster.tValid = '1') then
190  -- Move the data
192  -- Check for no EOF
193  if (sAxisMaster.tLast = '0') then
194  -- Check if NON-VLAN
195  if (VLAN_G = false) then
196  -- Check for EtherType = IPV4 = 0x0800
197  if (sAxisMaster.tData(111 downto 96) = IPV4_TYPE_C) then
198  -- Set the flag
199  v.ipv4Det(0) := '1';
200  end if;
201  -- Fill in the IPv4 header checksum
202  v.ipv4Hdr(0) := sAxisMaster.tData(119 downto 112); -- IPVersion + Header length
203  v.ipv4Hdr(1) := sAxisMaster.tData(127 downto 120); -- DSCP and ECN
204  end if;
205  -- Next state
206  v.state := IPV4_HDR0_S;
207  end if;
208  end if;
209  ----------------------------------------------------------------------
210  when IPV4_HDR0_S =>
211  -- Check for valid data
212  if (sAxisMaster.tValid = '1') then
213  -- Move the data
215  -- Check for EOF
216  if (sAxisMaster.tLast = '1') then
217  -- Set the error flag if IPv4 is detected and being checked
218  axiStreamSetUserBit(EMAC_AXIS_CONFIG_C, v.mAxisMaster, EMAC_IPERR_BIT_C, r.ipv4Det(0));
219  -- Next state
220  v.state := IDLE_S;
221  else
222  -- Check if NON-VLAN
223  if (VLAN_G = false) then
224  -- Fill in the IPv4 header checksum
225  v.ipv4Hdr(2) := sAxisMaster.tData(7 downto 0); -- IPV4_Length(15 downto 8)
226  v.ipv4Hdr(3) := sAxisMaster.tData(15 downto 8); -- IPV4_Length(7 downto 0)
227  v.ipv4Hdr(4) := sAxisMaster.tData(23 downto 16); -- IPV4_ID(15 downto 8)
228  v.ipv4Hdr(5) := sAxisMaster.tData(31 downto 24); -- IPV4_ID(7 downto 0)
229  v.ipv4Hdr(6) := sAxisMaster.tData(39 downto 32); -- Flags(2 downto 0) and Fragment Offsets(12 downto 8)
230  v.ipv4Hdr(7) := sAxisMaster.tData(47 downto 40); -- Fragment Offsets(7 downto 0)
231  v.ipv4Hdr(8) := sAxisMaster.tData(55 downto 48); -- Time-To-Live
232  v.ipv4Hdr(9) := sAxisMaster.tData(63 downto 56); -- Protocol
233  v.ipv4Hdr(10) := sAxisMaster.tData(71 downto 64); -- IPV4_Checksum(15 downto 8)
234  v.ipv4Hdr(11) := sAxisMaster.tData(79 downto 72); -- IPV4_Checksum(7 downto 0)
235  v.ipv4Hdr(12) := sAxisMaster.tData(87 downto 80); -- Source IP Address
236  v.ipv4Hdr(13) := sAxisMaster.tData(95 downto 88); -- Source IP Address
237  v.ipv4Hdr(14) := sAxisMaster.tData(103 downto 96); -- Source IP Address
238  v.ipv4Hdr(15) := sAxisMaster.tData(111 downto 104); -- Source IP Address
239  v.ipv4Hdr(16) := sAxisMaster.tData(119 downto 112); -- Destination IP Address
240  v.ipv4Hdr(17) := sAxisMaster.tData(127 downto 120); -- Destination IP Address
241  -- Fill in the TCP/UDP checksum
242  v.tData(63 downto 0) := sAxisMaster.tData(127 downto 80) & sAxisMaster.tData(63 downto 56) & x"00";
243  v.tKeep(7 downto 0) := (others => '1');
244  else
245  -- Check for EtherType = IPV4 = 0x0800
246  if (sAxisMaster.tData(15 downto 0) = IPV4_TYPE_C) then
247  -- Set the flag
248  v.ipv4Det(0) := '1';
249  end if;
250  -- Fill in the IPv4 header checksum
251  v.ipv4Hdr(0) := sAxisMaster.tData(23 downto 16); -- IPVersion + Header length
252  v.ipv4Hdr(1) := sAxisMaster.tData(31 downto 24); -- DSCP and ECN
253  v.ipv4Hdr(2) := sAxisMaster.tData(39 downto 32); -- IPV4_Length(15 downto 8)
254  v.ipv4Hdr(3) := sAxisMaster.tData(47 downto 40); -- IPV4_Length(7 downto 0)
255  v.ipv4Hdr(4) := sAxisMaster.tData(55 downto 48); -- IPV4_ID(15 downto 8)
256  v.ipv4Hdr(5) := sAxisMaster.tData(63 downto 56); -- IPV4_ID(7 downto 0)
257  v.ipv4Hdr(6) := sAxisMaster.tData(71 downto 64); -- Flags(2 downto 0) and Fragment Offsets(12 downto 8)
258  v.ipv4Hdr(7) := sAxisMaster.tData(79 downto 72); -- Fragment Offsets(7 downto 0)
259  v.ipv4Hdr(8) := sAxisMaster.tData(87 downto 80); -- Time-To-Live
260  v.ipv4Hdr(9) := sAxisMaster.tData(95 downto 88); -- Protocol
261  v.ipv4Hdr(10) := sAxisMaster.tData(103 downto 96); -- IPV4_Checksum(15 downto 8)
262  v.ipv4Hdr(11) := sAxisMaster.tData(111 downto 104); -- IPV4_Checksum(7 downto 0)
263  v.ipv4Hdr(12) := sAxisMaster.tData(119 downto 112); -- Source IP Address
264  v.ipv4Hdr(13) := sAxisMaster.tData(127 downto 120); -- Source IP Address
265  -- Fill in the TCP/UDP checksum
266  v.tData(31 downto 0) := sAxisMaster.tData(127 downto 119) & sAxisMaster.tData(95 downto 88) & x"00";
267  v.tKeep(3 downto 0) := (others => '1');
268  end if;
269  -- Latch the IPv4 length value
270  v.ipv4Len(0)(15 downto 8) := v.ipv4Hdr(2);
271  v.ipv4Len(0)(7 downto 0) := v.ipv4Hdr(3);
272  -- Check for UDP protocol
273  if (v.ipv4Hdr(9) = UDP_C) then
274  v.udpDet(0) := '1';
275  end if;
276  -- Check for TCP protocol
277  if (v.ipv4Hdr(9) = TCP_C) then
278  v.tcpDet(0) := '1';
279  end if;
280  -- Check for fragmentation
281  if (v.ipv4Hdr(6)(7) = '1') or (v.ipv4Hdr(6)(4 downto 0) /= 0) or (v.ipv4Hdr(7) /= 0) then
282  -- Set the flags
283  v.fragDet(0) := '1';
284  v.fragSof := '1';
285  end if;
286  -- Next state
287  v.state := IPV4_HDR1_S;
288  end if;
289  end if;
290  ----------------------------------------------------------------------
291  when IPV4_HDR1_S =>
292  -- Check for valid data
293  if (sAxisMaster.tValid = '1') then
294  -- Move the data
296  -- Fill in the TCP/UDP checksum
297  v.tKeep := sAxisMaster.tKeep;
298  v.tData := sAxisMaster.tData;
299  -- Check if NON-VLAN
300  if (VLAN_G = false) then
301  -- Fill in the IPv4 header checksum
302  v.ipv4Hdr(18) := sAxisMaster.tData(7 downto 0); -- Destination IP Address
303  v.ipv4Hdr(19) := sAxisMaster.tData(15 downto 8); -- Destination IP Address
304  -- Check for UDP data with inbound checksum
305  if (r.ipv4Det(0) = '1') and (r.udpDet(0) = '1') then
306  -- Mask off inbound UDP checksum
307  v.tData := sAxisMaster.tData(127 downto 80) & x"0000" & sAxisMaster.tData(63 downto 0);
308  -- Latch the inbound UDP checksum
309  v.protCsum(0)(15 downto 8) := sAxisMaster.tData(71 downto 64);
310  v.protCsum(0)(7 downto 0) := sAxisMaster.tData(79 downto 72);
311  -- Latch the inbound UDP length
312  v.protLen(0)(15 downto 8) := sAxisMaster.tData(55 downto 48);
313  v.protLen(0)(7 downto 0) := sAxisMaster.tData(63 downto 56);
314  end if;
315  -- Track the number of bytes (include IPv4 header offset from previous state)
316  v.byteCnt := getTKeep(sAxisMaster.tKeep) + 18;
317  else
318  -- Fill in the IPv4 header checksum
319  v.ipv4Hdr(14) := sAxisMaster.tData(7 downto 0); -- Source IP Address
320  v.ipv4Hdr(15) := sAxisMaster.tData(15 downto 8); -- Source IP Address
321  v.ipv4Hdr(16) := sAxisMaster.tData(23 downto 16); -- Destination IP Address
322  v.ipv4Hdr(17) := sAxisMaster.tData(31 downto 24); -- Destination IP Address
323  v.ipv4Hdr(18) := sAxisMaster.tData(39 downto 32); -- Destination IP Address
324  v.ipv4Hdr(19) := sAxisMaster.tData(47 downto 40); -- Destination IP Address
325  -- Check for UDP data with inbound checksum
326  if (r.ipv4Det(0) = '1') and (r.udpDet(0) = '1') then
327  -- Mask off inbound UDP checksum
328  v.tData := sAxisMaster.tData(127 downto 112) & x"0000" & sAxisMaster.tData(95 downto 0);
329  -- Latch the inbound UDP checksum
330  v.protCsum(0)(15 downto 8) := sAxisMaster.tData(103 downto 96);
331  v.protCsum(0)(7 downto 0) := sAxisMaster.tData(111 downto 104);
332  -- Latch the inbound UDP length
333  v.protLen(0)(15 downto 8) := sAxisMaster.tData(87 downto 80);
334  v.protLen(0)(7 downto 0) := sAxisMaster.tData(95 downto 88);
335  end if;
336  -- Track the number of bytes (include IPv4 header offset from previous state)
337  v.byteCnt := getTKeep(sAxisMaster.tKeep) + 14;
338  end if;
339  -- Check for EOF
340  if (sAxisMaster.tLast = '1') then
341  -- Next state
342  v.state := IDLE_S;
343  else
344  -- Next state
345  v.state := MOVE_S;
346  end if;
347  end if;
348  ----------------------------------------------------------------------
349  when MOVE_S =>
350  -- Check for valid data
351  if (sAxisMaster.tValid = '1') then
352  -- Move the data
354  -- Fill in the TCP/UDP checksum
355  v.tData := sAxisMaster.tData;
356  v.tKeep := sAxisMaster.tKeep;
357  -- Check for TCP data with inbound checksum
358  if (r.ipv4Det(0) = '1') and (r.tcpDet(0) = '1') and (r.tcpFlag = '0') then
359  -- Set the flag
360  v.tcpFlag := '1';
361  -- Calculate TCP length from IPv4 length
362  v.protLen(0) := r.ipv4Len(0) - 20;
363  -- Check if NON-VLAN
364  if (VLAN_G = false) then
365  -- Mask off inbound TCP checksum
366  v.tData := sAxisMaster.tData(127 downto 32) & x"0000" & sAxisMaster.tData(15 downto 0);
367  -- Latch the inbound TCP checksum
368  v.protCsum(0)(15 downto 8) := sAxisMaster.tData(23 downto 16);
369  v.protCsum(0)(7 downto 0) := sAxisMaster.tData(31 downto 24);
370  else
371  -- Mask off inbound TCP checksum
372  v.tData := sAxisMaster.tData(127 downto 64) & x"0000" & sAxisMaster.tData(47 downto 0);
373  -- Latch the inbound TCP checksum
374  v.protCsum(0)(15 downto 8) := sAxisMaster.tData(55 downto 48);
375  v.protCsum(0)(7 downto 0) := sAxisMaster.tData(63 downto 56);
376  end if;
377  end if;
378  -- Track the number of bytes
379  v.byteCnt := r.byteCnt + getTKeep(sAxisMaster.tKeep);
380  -- Check for EOF
381  if (sAxisMaster.tLast = '1') or (v.byteCnt > MAX_FRAME_SIZE_C) then
382  -- Check for overflow condition
383  if (sAxisMaster.tLast = '0') then
384  -- Force EOF
385  v.mAxisMaster.tLast := '1';
386  -- Set the error flag
387  axiStreamSetUserBit(EMAC_AXIS_CONFIG_C, v.mAxisMaster, EMAC_EOFE_BIT_C, '1');
388  -- Next state
389  v.state := BLOWOFF_S;
390  else
391  -- Next state
392  v.state := IDLE_S;
393  end if;
394  end if;
395  end if;
396  ----------------------------------------------------------------------
397  when BLOWOFF_S =>
398  -- Check for a valid EOF
399  if (sAxisMaster.tValid = '1') and (sAxisMaster.tLast = '1') then
400  -- Next State
401  v.state := IDLE_S;
402  end if;
403  ----------------------------------------------------------------------
404  end case;
405 
406  -- Check for first TUSER on the output AXIS stream
407  if (axiStreamGetUserBit(EMAC_AXIS_CONFIG_C, v.mAxisMasters(EMAC_CSUM_PIPELINE_C+1), EMAC_SOF_BIT_C, 0) = '1') then
408  -- Set the fragmentation flag
409  axiStreamSetUserBit(EMAC_AXIS_CONFIG_C, v.mAxisMasters(EMAC_CSUM_PIPELINE_C+1), EMAC_FRAG_BIT_C, r.fragSof, 0);
410  -- Reset the flag
411  v.fragSof := '0';
412  end if;
413 
414  -- Reset
415  if (ethRst = '1') then
416  v := REG_INIT_C;
417  end if;
418 
419  -- Register the variable for next clock cycle
420  rin <= v;
421 
422  -- Outputs
423  mAxisMaster <= r.mAxisMasters(EMAC_CSUM_PIPELINE_C+1);
424  dbg <= dummy;
425 
426  end process comb;
427 
428  seq : process (ethClk) is
429  begin
430  if rising_edge(ethClk) then
431  r <= rin after TPD_G;
432  end if;
433  end process seq;
434 
435 end rtl;
out mAxisMasterAxiStreamMasterType
slv( 7 downto 0) := x"06" TCP_C
Definition: EthMacPkg.vhd:40
std_logic sl
Definition: StdRtlPkg.vhd:28
slv( 15 downto 0) := x"0008" IPV4_TYPE_C
Definition: EthMacPkg.vhd:35
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
slv( 15 downto 0) tKeep
integer := 3 EMAC_UDPERR_BIT_C
Definition: EthMacPkg.vhd:55
integer := 2 EMAC_TCPERR_BIT_C
Definition: EthMacPkg.vhd:54
JUMBO_Gboolean := true
integer := 0 EMAC_FRAG_BIT_C
Definition: EthMacPkg.vhd:48
VLAN_Gboolean := false
slv( 127 downto 0) tData
EthMacCsumAccumType :=(step =>( others => '0'),sum1 =>( others =>( others => '0')),sum3 =>( others => '0'),sum5 =>( others => '0')) ETH_MAC_CSUM_ACCUM_INIT_C
Definition: EthMacPkg.vhd:120
natural := 3 EMAC_CSUM_PIPELINE_C
Definition: EthMacPkg.vhd:113
integer := 0 EMAC_EOFE_BIT_C
Definition: EthMacPkg.vhd:52
integer := 1 EMAC_SOF_BIT_C
Definition: EthMacPkg.vhd:49
in sAxisMasterAxiStreamMasterType
_library_ ieeeieee
array(natural range <> ) of AxiStreamMasterType AxiStreamMasterArray
array(natural range <> ) of slv( 15 downto 0) Slv16Array
Definition: StdRtlPkg.vhd:395
slv( 7 downto 0) := x"11" UDP_C
Definition: EthMacPkg.vhd:39
integer := 1 EMAC_IPERR_BIT_C
Definition: EthMacPkg.vhd:53
array(natural range <> ) of slv( 7 downto 0) Slv8Array
Definition: StdRtlPkg.vhd:403
TPD_Gtime := 1 ns
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
array(natural range <> ) of EthMacCsumAccumType EthMacCsumAccumArray
Definition: EthMacPkg.vhd:125
std_logic_vector slv
Definition: StdRtlPkg.vhd:29