SURF  1.0
EthMacRxImportXgmii.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : EthMacRxImportXgmii.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2008-02-11
5 -- Last update: 2016-09-14
6 -------------------------------------------------------------------------------
7 -- Description: 10GbE Import MAC core with GMII interface
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 use ieee.std_logic_arith.all;
21 use ieee.std_logic_unsigned.all;
22 
23 use work.AxiStreamPkg.all;
24 use work.StdRtlPkg.all;
25 use work.EthMacPkg.all;
26 
27 --! @see entity
28  --! @ingroup ethernet_EthMacCore
30  generic (
31  TPD_G : time := 1 ns);
32  port (
33  -- Clock and Reset
34  ethClk : in sl;
35  ethRst : in sl;
36  -- AXIS Interface
38  -- PHY Interface
39  phyRxd : in slv(63 downto 0);
40  phyRxc : in slv(7 downto 0);
41  -- Configuration and status
42  phyReady : in sl;
43  rxCountEn : out sl;
44  rxCrcError : out sl);
45 end EthMacRxImportXgmii;
46 
47 architecture rtl of EthMacRxImportXgmii is
48 
49  constant AXI_CONFIG_C : AxiStreamConfigType := (
51  TDATA_BYTES_C => 8, -- 64-bit AXI stream interface
57 
58  -- Local Signals
59  signal macMaster : AxiStreamMasterType;
60  signal frameShift0 : sl;
61  signal frameShift1 : sl;
62  signal frameShift2 : sl;
63  signal frameShift3 : sl;
64  signal frameShift4 : sl;
65  signal frameShift5 : sl;
66  signal rxdAlign : sl;
67  signal dlyRxd : slv(31 downto 0);
68  signal crcDataWidth : slv(2 downto 0);
69  signal nxtCrcWidth : slv(2 downto 0);
70  signal nxtCrcValid : sl;
71  signal crcDataValid : sl;
72  signal crcFifoIn : slv(63 downto 0);
73  signal crcFifoOut : slv(63 downto 0);
74  signal phyRxcDly : slv(7 downto 0);
75  signal crcWidthDly0 : slv(2 downto 0);
76  signal crcWidthDly1 : slv(2 downto 0);
77  signal crcWidthDly2 : slv(2 downto 0);
78  signal crcWidthDly3 : slv(2 downto 0);
79  signal crcShift0 : sl;
80  signal crcShift1 : sl;
81  signal endDetect : sl;
82  signal endShift0 : sl;
83  signal endShift1 : sl;
84  signal crcGood : sl;
85  signal intLastLine : sl;
86  signal intFirstLine : sl;
87  signal intAdvance : sl;
88  signal lastSOF : sl;
89  signal crcIn : slv(63 downto 0);
90  signal crcInit : sl;
91  signal crcReset : sl;
92  signal crcOut : slv(31 downto 0);
93  signal macData : slv(63 downto 0);
94  signal macSize : slv(2 downto 0);
95 
96  -- Debug Signals
97  attribute dont_touch : string;
98 
99  attribute dont_touch of frameShift0 : signal is "true";
100  attribute dont_touch of frameShift1 : signal is "true";
101  attribute dont_touch of frameShift2 : signal is "true";
102  attribute dont_touch of frameShift3 : signal is "true";
103  attribute dont_touch of frameShift4 : signal is "true";
104  attribute dont_touch of frameShift5 : signal is "true";
105  attribute dont_touch of rxdAlign : signal is "true";
106  attribute dont_touch of dlyRxd : signal is "true";
107  attribute dont_touch of crcDataWidth : signal is "true";
108  attribute dont_touch of nxtCrcWidth : signal is "true";
109  attribute dont_touch of nxtCrcValid : signal is "true";
110  attribute dont_touch of crcDataValid : signal is "true";
111  attribute dont_touch of crcFifoIn : signal is "true";
112  attribute dont_touch of crcFifoOut : signal is "true";
113  attribute dont_touch of phyRxcDly : signal is "true";
114  attribute dont_touch of crcWidthDly0 : signal is "true";
115  attribute dont_touch of crcWidthDly1 : signal is "true";
116  attribute dont_touch of crcWidthDly2 : signal is "true";
117  attribute dont_touch of crcWidthDly3 : signal is "true";
118  attribute dont_touch of crcShift0 : signal is "true";
119  attribute dont_touch of crcShift1 : signal is "true";
120  attribute dont_touch of endDetect : signal is "true";
121  attribute dont_touch of endShift0 : signal is "true";
122  attribute dont_touch of endShift1 : signal is "true";
123  attribute dont_touch of crcGood : signal is "true";
124  attribute dont_touch of intLastLine : signal is "true";
125  attribute dont_touch of intFirstLine : signal is "true";
126  attribute dont_touch of intAdvance : signal is "true";
127  attribute dont_touch of lastSOF : signal is "true";
128  attribute dont_touch of crcIn : signal is "true";
129  attribute dont_touch of crcInit : signal is "true";
130  attribute dont_touch of crcReset : signal is "true";
131  attribute dont_touch of crcOut : signal is "true";
132  attribute dont_touch of macData : signal is "true";
133  attribute dont_touch of macSize : signal is "true";
134 
135 begin
136 
137  DATA_MUX : entity work.AxiStreamFifoV2
138  generic map (
139  -- General Configurations
140  TPD_G => TPD_G,
141  PIPE_STAGES_G => 0,
142  SLAVE_READY_EN_G => true,
143  VALID_THOLD_G => 1,
144  -- FIFO configurations
145  BRAM_EN_G => false,
146  USE_BUILT_IN_G => false,
147  GEN_SYNC_FIFO_G => true,
148  CASCADE_SIZE_G => 1,
149  FIFO_ADDR_WIDTH_G => 4,
150  -- AXI Stream Port Configurations
151  SLAVE_AXI_CONFIG_G => AXI_CONFIG_C, -- 64-bit AXI stream interface
152  MASTER_AXI_CONFIG_G => EMAC_AXIS_CONFIG_C) -- 128-bit AXI stream interface
153  port map (
154  -- Slave Port
155  sAxisClk => ethClk,
156  sAxisRst => ethRst,
157  sAxisMaster => macMaster, -- 64-bit AXI stream interface
158  sAxisSlave => open,
159  -- Master Port
160  mAxisClk => ethClk,
161  mAxisRst => ethRst,
162  mAxisMaster => macIbMaster, -- 128-bit AXI stream interface
164 
165  -- Convert to AXI stream
166  process (ethClk) is
167  variable varMaster : AxiStreamMasterType;
168  begin
169  if rising_edge(ethClk) then
170  varMaster := AXI_STREAM_MASTER_INIT_C;
171 
172  if ethRst = '1' then
173  else
174  varMaster.tData(63 downto 0) := macData;
175  varMaster.tLast := intLastLine;
176  varMaster.tValid := intAdvance;
177 
178  -- Keep
179  varMaster.tKeep(7 downto 0) := (others => '0');
180  varMaster.tKeep(conv_integer(macSize) downto 0) := (others => '1');
181 
182  if intFirstLine = '1' then
183  axiStreamSetUserBit(AXI_CONFIG_C, varMaster, EMAC_SOF_BIT_C, '1', 0);
184  end if;
185 
186  if intLastLine = '1' then
187  axiStreamSetUserBit(AXI_CONFIG_C, varMaster, EMAC_EOFE_BIT_C, not crcGood);
188  end if;
189 
190  end if;
191  end if;
192 
193  macMaster <= varMaster;
194 
195  end process;
196 
197  -- Errors and counter
198  rxCrcError <= intAdvance and intLastLine and (not crcGood);
199  rxCountEn <= intAdvance and intLastLine and crcGood;
200 
201  -- Logic to dermine CRC width and valid clear timing.
202  process (crcDataValid, crcDataWidth, phyRxc, phyRxcDly, rxdAlign)
203  begin
204 
205  -- Non shifted data
206  if rxdAlign = '0' then
207  case phyRxc is
208  when x"00" => nxtCrcWidth <= "111"; nxtCrcValid <= '1';
209  when x"FE" => nxtCrcWidth <= "000"; nxtCrcValid <= '1';
210  when x"FC" => nxtCrcWidth <= "001"; nxtCrcValid <= '1';
211  when x"F8" => nxtCrcWidth <= "010"; nxtCrcValid <= '1';
212  when x"F0" => nxtCrcWidth <= "011"; nxtCrcValid <= '1';
213  when x"E0" => nxtCrcWidth <= "100"; nxtCrcValid <= '1';
214  when x"C0" => nxtCrcWidth <= "101"; nxtCrcValid <= '1';
215  when x"80" => nxtCrcWidth <= "110"; nxtCrcValid <= '1';
216  when x"FF" => nxtCrcWidth <= "000"; nxtCrcValid <= '0';
217  when others => nxtCrcWidth <= "000"; nxtCrcValid <= '0';
218  end case;
219 
220  -- Shifted data
221  else
222 
223  -- Some widths look at the shifted control output
224  case phyRxcDly is
225  when x"E0" => nxtCrcWidth <= "000"; nxtCrcValid <= '1';
226  when x"C0" => nxtCrcWidth <= "001"; nxtCrcValid <= '1';
227  when x"80" => nxtCrcWidth <= "010"; nxtCrcValid <= '1';
228  when x"F0" => nxtCrcWidth <= "000"; nxtCrcValid <= '0';
229  when x"FF" => nxtCrcWidth <= "000"; nxtCrcValid <= '0';
230  when x"00" =>
231 
232  -- other widths look at the direct control output
233  case phyRxc is
234  when x"FF" => nxtCrcWidth <= "011"; nxtCrcValid <= '1';
235  when x"FE" => nxtCrcWidth <= "100"; nxtCrcValid <= '1';
236  when x"FC" => nxtCrcWidth <= "101"; nxtCrcValid <= '1';
237  when x"F8" => nxtCrcWidth <= "110"; nxtCrcValid <= '1';
238  when others => nxtCrcWidth <= crcDataWidth; nxtCrcValid <= crcDataValid;
239  end case;
240  when others => nxtCrcWidth <= "000"; nxtCrcValid <= '0';
241  end case;
242  end if;
243  end process;
244 
245 
246  -- Delay stages and input to CRC block
247  process (ethClk)
248  begin
249  if rising_edge(ethClk) then
250  if ethRst = '1' then
251  frameShift0 <= '0' after TPD_G;
252  frameShift1 <= '0' after TPD_G;
253  frameShift2 <= '0' after TPD_G;
254  frameShift3 <= '0' after TPD_G;
255  frameShift4 <= '0' after TPD_G;
256  frameShift5 <= '0' after TPD_G;
257  rxdAlign <= '0' after TPD_G;
258  lastSOF <= '0' after TPD_G;
259  dlyRxd <= (others => '0') after TPD_G;
260  crcDataValid <= '0' after TPD_G;
261  crcDataWidth <= "000" after TPD_G;
262  endDetect <= '0' after TPD_G;
263  crcFifoIn <= (others => '0') after TPD_G;
264  phyRxcDly <= (others => '0') after TPD_G;
265  else
266 
267  -- Delayed copy of control signals
268  phyRxcDly <= phyRxc after TPD_G;
269 
270  -- Detect SOF in shifted position
271  if phyRxC(4) = '1' and phyRxd(39 downto 32) = x"FB" then
272  lastSOF <= '1' after TPD_G;
273  else
274  lastSOF <= '0' after TPD_G;
275  end if;
276 
277  -- Detect start of frame
278  -- normal alignment
279  if phyRxC(0) = '1' and phyRxd(7 downto 0) = x"FB" and phyReady = '1' then
280  frameShift0 <= '1' after TPD_G;
281  rxdAlign <= '0' after TPD_G;
282 
283  -- shifted aligment
284  elsif lastSOF = '1' and phyReady = '1' then
285  frameShift0 <= '1' after TPD_G;
286  rxdAlign <= '1' after TPD_G;
287 
288  -- Detect end of frame
289  elsif phyRxc /= 0 and frameShift0 = '1' then
290  frameShift0 <= '0' after TPD_G;
291  end if;
292 
293  -- Frame shift register
294  frameShift1 <= frameShift0 after TPD_G;
295  frameShift2 <= frameShift1 after TPD_G;
296  frameShift3 <= frameShift2 after TPD_G;
297  frameShift4 <= frameShift3 after TPD_G;
298  frameShift5 <= frameShift4 after TPD_G;
299 
300  -- Delayed copy of upper data
301  dlyRxd <= phyRxd(63 downto 32) after TPD_G;
302 
303  -- CRC Valid Signal
304  if frameShift0 = '1' and frameShift1 = '0' then
305  crcDataValid <= '1' after TPD_G;
306  crcDataWidth <= "111" after TPD_G;
307  else
308 
309  -- Clear valid when width is not zero
310  if crcDataWidth /= 7 then
311  crcDataValid <= '0' after TPD_G;
312  crcDataWidth <= (others => '0') after TPD_G;
313  else
314  crcDataValid <= nxtCrcValid after TPD_G;
315  crcDataWidth <= nxtCrcWidth after TPD_G;
316  end if;
317  end if;
318 
319  -- End Detection
320  if (crcDataWidth /= 7 or nxtCrcValid = '0') and crcDataValid = '1' then
321  endDetect <= '1' after TPD_G;
322  else
323  endDetect <= '0' after TPD_G;
324  end if;
325 
326  -- CRC & FIFO Input data
327  if rxdAlign = '0' then
328  crcFifoIn <= phyRxd after TPD_G;
329  else
330  crcFifoIn(63 downto 32) <= phyRxd(31 downto 0) after TPD_G;
331  crcFifoIn(31 downto 0) <= dlyRxd after TPD_G;
332  end if;
333 
334  end if;
335  end if;
336  end process;
337 
338  -- Generate init
339  crcInit <= frameShift0 and (not frameShift1);
340 
341  -- CRC Delay FIFO
342  U_CrcFifo : entity work.Fifo
343  generic map (
344  TPD_G => TPD_G,
345  RST_POLARITY_G => '1',
346  RST_ASYNC_G => false,
347  GEN_SYNC_FIFO_G => true,
348  BRAM_EN_G => false,
349  FWFT_EN_G => false,
350  USE_DSP48_G => "no",
351  USE_BUILT_IN_G => false,
352  XIL_DEVICE_G => "7SERIES",
353  SYNC_STAGES_G => 3,
354  DATA_WIDTH_G => 64,
355  ADDR_WIDTH_G => 4,
356  INIT_G => "0",
357  FULL_THRES_G => 1,
358  EMPTY_THRES_G => 1)
359  port map (
360  rst => ethRst,
361  wr_clk => ethClk,
362  wr_en => crcDataValid,
363  din => crcFifoIn,
364  wr_data_count => open,
365  wr_ack => open,
366  overflow => open,
367  prog_full => open,
368  almost_full => open,
369  full => open,
370  not_full => open,
371  rd_clk => ethClk,
372  rd_en => crcShift1,
373  dout => crcFifoOut,
374  rd_data_count => open,
375  valid => open,
376  underflow => open,
377  prog_empty => open,
378  almost_empty => open,
379  empty => open);
380 
381  -- Delay stages for output of CRC delay chain
382  process (ethClk)
383  begin
384  if rising_edge(ethClk) then
385  if ethRst = '1' then
386  macSize <= (others => '0') after TPD_G;
387  macData <= (others => '0') after TPD_G;
388  crcShift0 <= '0' after TPD_G;
389  crcShift1 <= '0' after TPD_G;
390  endShift0 <= '0' after TPD_G;
391  endShift1 <= '0' after TPD_G;
392  crcWidthDly0 <= (others => '0') after TPD_G;
393  crcWidthDly1 <= (others => '0') after TPD_G;
394  crcWidthDly2 <= (others => '0') after TPD_G;
395  crcWidthDly3 <= (others => '0') after TPD_G;
396  intLastLine <= '0' after TPD_G;
397  intFirstLine <= '0' after TPD_G;
398  intAdvance <= '0' after TPD_G;
399  crcGood <= '0' after TPD_G;
400  else
401 
402  -- Detect good CRC, only on FIFO reads
403  if crcShift1 = '1' then
404  if crcOut = X"1cdf4421" then
405  crcGood <= '1' after TPD_G;
406  else
407  crcGood <= '0' after TPD_G;
408  end if;
409  end if;
410 
411  -- CRC output shift stages
412  crcShift0 <= crcDataValid after TPD_G;
413  crcShift1 <= crcShift0 after TPD_G;
414 
415  -- CRC Width Delay Stages
416  crcWidthDly0 <= crcDataWidth after TPD_G;
417  crcWidthDly1 <= crcWidthDly0 after TPD_G;
418  crcWidthDly2 <= crcWidthDly1 after TPD_G;
419  crcWidthDly3 <= crcWidthDly2 after TPD_G;
420 
421  -- Last Data Shift
422  endShift0 <= endDetect after TPD_G;
423  endShift1 <= endShift0 after TPD_G;
424 
425  -- Output data
426  macData <= crcFifoOut after TPD_G;
427 
428  -- Determine when data is output
429  if frameShift4 = '1' and frameShift5 = '0' then
430  intAdvance <= '1' after TPD_G;
431  intFirstLine <= '1' after TPD_G;
432  elsif intLastLine = '1' then
433  intAdvance <= '0' after TPD_G;
434  intFirstLine <= '0' after TPD_G;
435  else
436  intFirstLine <= '0' after TPD_G;
437  end if;
438 
439  -- Determine Last Line
440  if endShift0 = '1' and crcWidthDly1 = 0 then
441  macSize <= "100" after TPD_G;
442  intLastLine <= '1' after TPD_G;
443  elsif endShift0 = '1' and crcWidthDly1 = 1 then
444  macSize <= "101" after TPD_G;
445  intLastLine <= '1' after TPD_G;
446  elsif endShift0 = '1' and crcWidthDly1 = 2 then
447  macSize <= "110" after TPD_G;
448  intLastLine <= '1' after TPD_G;
449  elsif endShift0 = '1' and crcWidthDly1 = 3 then
450  macSize <= "111" after TPD_G;
451  intLastLine <= '1' after TPD_G;
452  elsif endShift1 = '1' and crcWidthDly2 = 4 then
453  macSize <= "000" after TPD_G;
454  intLastLine <= '1' after TPD_G;
455  elsif endShift1 = '1' and crcWidthDly2 = 5 then
456  macSize <= "001" after TPD_G;
457  intLastLine <= '1' after TPD_G;
458  elsif endShift1 = '1' and crcWidthDly2 = 6 then
459  macSize <= "010" after TPD_G;
460  intLastLine <= '1' after TPD_G;
461  elsif endShift1 = '1' and crcWidthDly2 = 7 then
462  macSize <= "011" after TPD_G;
463  intLastLine <= '1' after TPD_G;
464  else
465  macSize <= "111" after TPD_G;
466  intLastLine <= '0' after TPD_G;
467  end if;
468  end if;
469  end if;
470  end process;
471 
472 
473  ------------------------------------------
474  -- CRC Logic
475  ------------------------------------------
476 
477  -- CRC Input
478  crcReset <= crcInit or ethRst or (not phyReady);
479  crcIn(63 downto 56) <= crcFifoIn(7 downto 0);
480  crcIn(55 downto 48) <= crcFifoIn(15 downto 8);
481  crcIn(47 downto 40) <= crcFifoIn(23 downto 16);
482  crcIn(39 downto 32) <= crcFifoIn(31 downto 24);
483  crcIn(31 downto 24) <= crcFifoIn(39 downto 32);
484  crcIn(23 downto 16) <= crcFifoIn(47 downto 40);
485  crcIn(15 downto 8) <= crcFifoIn(55 downto 48);
486  crcIn(7 downto 0) <= crcFifoIn(63 downto 56);
487 
488  -- CRC
489  U_Crc32 : entity work.Crc32Parallel
490  generic map (
491  TPD_G => TPD_G,
492  BYTE_WIDTH_G => 8)
493  port map (
494  crcOut => crcOut,
495  crcClk => ethClk,
496  crcDataValid => crcDataValid,
497  crcDataWidth => crcDataWidth,
498  crcIn => crcIn,
499  crcReset => crcReset);
500 
501 end rtl;
SYNC_STAGES_Ginteger range 3 to ( 2** 24):= 3
Definition: Fifo.vhd:39
in dinslv( DATA_WIDTH_G- 1 downto 0)
Definition: Fifo.vhd:52
out almost_emptysl
Definition: Fifo.vhd:68
out macIbMasterAxiStreamMasterType
FIFO_ADDR_WIDTH_Ginteger range 4 to 48:= 9
out wr_data_countslv( ADDR_WIDTH_G- 1 downto 0)
Definition: Fifo.vhd:53
natural range 0 to 8 TDEST_BITS_C
XIL_DEVICE_Gstring := "7SERIES"
Definition: Fifo.vhd:38
EMPTY_THRES_Ginteger range 1 to ( 2** 24):= 1
Definition: Fifo.vhd:45
BRAM_EN_Gboolean := true
Definition: Fifo.vhd:32
PIPE_STAGES_Gnatural range 0 to 16:= 1
std_logic sl
Definition: StdRtlPkg.vhd:28
out crcOutslv( 31 downto 0)
FWFT_EN_Gboolean := false
Definition: Fifo.vhd:33
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 emptysl
Definition: Fifo.vhd:69
out wr_acksl
Definition: Fifo.vhd:54
SLAVE_AXI_CONFIG_GAxiStreamConfigType := AXI_STREAM_CONFIG_INIT_C
in crcDataWidthslv( 2 downto 0)
FULL_THRES_Ginteger range 1 to ( 2** 24):= 1
Definition: Fifo.vhd:44
slv( 15 downto 0) tKeep
in phyRxdslv( 63 downto 0)
SLAVE_READY_EN_Gboolean := true
RST_ASYNC_Gboolean := false
Definition: Fifo.vhd:30
natural range 1 to 16 TDATA_BYTES_C
out almost_fullsl
Definition: Fifo.vhd:57
in rd_clksl
Definition: Fifo.vhd:61
USE_DSP48_Gstring := "no"
Definition: Fifo.vhd:34
GEN_SYNC_FIFO_Gboolean := false
TPD_Gtime := 1 ns
Definition: Fifo.vhd:28
TkeepModeType TKEEP_MODE_C
RST_POLARITY_Gsl := '1'
Definition: Fifo.vhd:29
natural range 0 to 8 TID_BITS_C
DATA_WIDTH_Ginteger range 1 to ( 2** 24):= 16
Definition: Fifo.vhd:41
in wr_clksl
Definition: Fifo.vhd:50
slv( 127 downto 0) tData
out fullsl
Definition: Fifo.vhd:58
out validsl
Definition: Fifo.vhd:65
BRAM_EN_Gboolean := true
integer := 0 EMAC_EOFE_BIT_C
Definition: EthMacPkg.vhd:52
integer := 1 EMAC_SOF_BIT_C
Definition: EthMacPkg.vhd:49
boolean TSTRB_EN_C
in rd_ensl := '0'
Definition: Fifo.vhd:62
out underflowsl
Definition: Fifo.vhd:66
in phyRxcslv( 7 downto 0)
TPD_Gtime := 0.5 ns
TUserModeType TUSER_MODE_C
out overflowsl
Definition: Fifo.vhd:55
TPD_Gtime := 1 ns
natural range 0 to 8 TUSER_BITS_C
GEN_SYNC_FIFO_Gboolean := false
Definition: Fifo.vhd:31
out sAxisSlaveAxiStreamSlaveType
INIT_Gslv := "0"
Definition: Fifo.vhd:43
out not_fullsl
Definition: Fifo.vhd:59
out doutslv( DATA_WIDTH_G- 1 downto 0)
Definition: Fifo.vhd:63
in rstsl :=not RST_POLARITY_G
Definition: Fifo.vhd:48
in sAxisMasterAxiStreamMasterType
ADDR_WIDTH_Ginteger range 4 to 48:= 4
Definition: Fifo.vhd:42
out mAxisMasterAxiStreamMasterType
in crcInslv(( BYTE_WIDTH_G* 8- 1) downto 0)
USE_BUILT_IN_Gboolean := false
Definition: Fifo.vhd:37
AxiStreamSlaveType :=(tReady => '1') AXI_STREAM_SLAVE_FORCE_C
in mAxisSlaveAxiStreamSlaveType
CASCADE_SIZE_Ginteger range 1 to ( 2** 24):= 1
USE_BUILT_IN_Gboolean := false
VALID_THOLD_Ginteger range 0 to ( 2** 24):= 1
out prog_fullsl
Definition: Fifo.vhd:56
out rd_data_countslv( ADDR_WIDTH_G- 1 downto 0)
Definition: Fifo.vhd:64
out prog_emptysl
Definition: Fifo.vhd:67
MASTER_AXI_CONFIG_GAxiStreamConfigType := AXI_STREAM_CONFIG_INIT_C
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
Definition: Fifo.vhd:26
std_logic_vector slv
Definition: StdRtlPkg.vhd:29
BYTE_WIDTH_Ginteger := 4
in wr_ensl := '0'
Definition: Fifo.vhd:51