SURF  1.0
EthMacTxExportXgmii.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : EthMacTxExportXgmii.vhd
3 -- Author : Ryan Herbst <rherbst@slac.stanford.edu>
4 -- Company : SLAC National Accelerator Laboratory
5 -- Created : 2008-02-11
6 -- Last update: 2016-10-06
7 -------------------------------------------------------------------------------
8 -- Description: 10GbE Export MAC core with GMII interface
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.AxiStreamPkg.all;
25 use work.StdRtlPkg.all;
26 use work.EthMacPkg.all;
27 
28 --! @see entity
29  --! @ingroup ethernet_EthMacCore
31  generic (
32  TPD_G : time := 1 ns);
33  port (
34  -- Clock and Reset
35  ethClk : in sl;
36  ethRst : in sl;
37  -- AXIS Interface
40  -- XAUI Interface
41  phyTxd : out slv(63 downto 0);
42  phyTxc : out slv(7 downto 0);
43  phyReady : in sl;
44  -- Configuration
45  macAddress : in slv(47 downto 0);
46  -- Errors
47  txCountEn : out sl;
48  txUnderRun : out sl;
50 end EthMacTxExportXgmii;
51 
52 architecture rtl of EthMacTxExportXgmii is
53 
54  constant INTERGAP_C : slv(3 downto 0) := x"3";
55 
56  constant AXI_CONFIG_C : AxiStreamConfigType := (
58  TDATA_BYTES_C => 8, -- 64-bit AXI stream interface
64 
65  -- Local Signals
66  signal macMaster : AxiStreamMasterType;
67  signal macSlave : AxiStreamSlaveType;
68  signal intAdvance : sl;
69  signal intDump : sl;
70  signal intRunt : sl;
71  signal intPad : sl;
72  signal intLastLine : sl;
73  signal intLastValidByte : slv(2 downto 0);
74  signal frameShift0 : sl;
75  signal frameShift1 : sl;
76  signal txEnable0 : sl;
77  signal txEnable1 : sl;
78  signal txEnable2 : sl;
79  signal txEnable3 : sl;
80  signal nxtMaskIn : slv(7 downto 0);
81  signal nxtEOF : sl;
82  signal intData : slv(63 downto 0);
83  signal stateCount : slv(3 downto 0);
84  signal stateCountRst : sl;
85  signal exportWordCnt : slv(3 downto 0);
86  signal crcFifoIn : slv(71 downto 0);
87  signal crcFifoOut : slv(71 downto 0);
88  signal crcTx : slv(31 downto 0);
89  signal crcIn : slv(63 downto 0);
90  signal crcInit : sl;
91  signal crcMaskIn : slv(7 downto 0);
92  signal crcInAdj : slv(63 downto 0);
93  signal crcDataWidth : slv(2 downto 0);
94  signal crcDataValid : sl;
95  signal crcReset : sl;
96  signal crcOut : slv(31 downto 0);
97  signal intError : sl;
98  signal nxtError : sl;
99 
100  -- MAC States
101  signal curState : slv(2 downto 0);
102  signal nxtState : slv(2 downto 0);
103  constant ST_IDLE_C : slv(2 downto 0) := "000";
104  constant ST_DUMP_C : slv(2 downto 0) := "001";
105  constant ST_READ_C : slv(2 downto 0) := "010";
106  constant ST_WAIT_C : slv(2 downto 0) := "011";
107  constant ST_PAD_C : slv(2 downto 0) := "100";
108 
109  -- Debug Signals
110  attribute dont_touch : string;
111 
112  attribute dont_touch of intAdvance : signal is "true";
113  attribute dont_touch of intDump : signal is "true";
114  attribute dont_touch of intRunt : signal is "true";
115  attribute dont_touch of intPad : signal is "true";
116  attribute dont_touch of intLastLine : signal is "true";
117  attribute dont_touch of intLastValidByte : signal is "true";
118  attribute dont_touch of frameShift0 : signal is "true";
119  attribute dont_touch of frameShift1 : signal is "true";
120  attribute dont_touch of txEnable0 : signal is "true";
121  attribute dont_touch of txEnable1 : signal is "true";
122  attribute dont_touch of txEnable2 : signal is "true";
123  attribute dont_touch of txEnable3 : signal is "true";
124  attribute dont_touch of nxtMaskIn : signal is "true";
125  attribute dont_touch of nxtEOF : signal is "true";
126  attribute dont_touch of intData : signal is "true";
127  attribute dont_touch of stateCount : signal is "true";
128  attribute dont_touch of stateCountRst : signal is "true";
129  attribute dont_touch of exportWordCnt : signal is "true";
130  attribute dont_touch of crcFifoIn : signal is "true";
131  attribute dont_touch of crcFifoOut : signal is "true";
132  attribute dont_touch of crcTx : signal is "true";
133  attribute dont_touch of crcIn : signal is "true";
134  attribute dont_touch of crcInit : signal is "true";
135  attribute dont_touch of crcMaskIn : signal is "true";
136  attribute dont_touch of crcInAdj : signal is "true";
137  attribute dont_touch of crcDataWidth : signal is "true";
138  attribute dont_touch of crcDataValid : signal is "true";
139  attribute dont_touch of crcReset : signal is "true";
140  attribute dont_touch of crcOut : signal is "true";
141  attribute dont_touch of intError : signal is "true";
142  attribute dont_touch of nxtError : signal is "true";
143 
144 begin
145 
146  DATA_MUX : entity work.AxiStreamFifoV2
147  generic map (
148  -- General Configurations
149  TPD_G => TPD_G,
150  INT_PIPE_STAGES_G => 0,
151  PIPE_STAGES_G => 1,
152  SLAVE_READY_EN_G => true,
153  VALID_THOLD_G => 1,
154  -- FIFO configurations
155  BRAM_EN_G => false,
156  USE_BUILT_IN_G => false,
157  GEN_SYNC_FIFO_G => true,
158  CASCADE_SIZE_G => 1,
159  FIFO_ADDR_WIDTH_G => 4,
160  -- AXI Stream Port Configurations
161  SLAVE_AXI_CONFIG_G => EMAC_AXIS_CONFIG_C, -- 128-bit AXI stream interface
162  MASTER_AXI_CONFIG_G => AXI_CONFIG_C) -- 64-bit AXI stream interface
163  port map (
164  -- Slave Port
165  sAxisClk => ethClk,
166  sAxisRst => ethRst,
167  sAxisMaster => macObMaster, -- 128-bit AXI stream interface
169  -- Master Port
170  mAxisClk => ethClk,
171  mAxisRst => ethRst,
172  mAxisMaster => macMaster, -- 64-bit AXI stream interface
173  mAxisSlave => macSlave);
174 
175  -- Generate read
176  macSlave.tReady <= (intAdvance and (not intPad)) or intDump;
177 
178  -- Data processing
179  process (intPad, macMaster)
180  begin
181  for i in 0 to 7 loop
182  if intPad = '1' or macMaster.tKeep(i) = '0' then
183  intData(i*8+7 downto i*8) <= (others => '0');
184  else
185  intData(i*8+7 downto i*8) <= macMaster.tData(i*8+7 downto i*8);
186  end if;
187  end loop;
188  end process;
189 
190  -- State machine logic
191  process (ethClk)
192  begin
193  if rising_edge(ethClk) then
194  if ethRst = '1' then
195  curState <= ST_IDLE_C after TPD_G;
196  intError <= '0' after TPD_G;
197  stateCount <= (others => '0') after TPD_G;
198  exportWordCnt <= (others => '0') after TPD_G;
199  else
200 
201  -- State transition
202  curState <= nxtState after TPD_G;
203  intError <= nxtError after TPD_G;
204 
205  -- Inter frame gap
206  if stateCountRst = '1' then
207  stateCount <= (others => '0');
208  else
209  stateCount <= stateCount + 1;
210  end if;
211 
212  if stateCountRst = '1' then
213  exportWordCnt <= (others => '0');
214  elsif intAdvance = '1' and intRunt = '1' then
215  exportWordCnt <= exportWordCnt + 1;
216  end if;
217 
218  end if;
219  end if;
220  end process;
221 
222  -- Pad runt frames
223  intRunt <= not exportWordCnt(3);
224  intLastValidByte <= "111" when curState = ST_PAD_C else onesCount(macMaster.tKeep(7 downto 1));
225 
226  -- State machine
227  process (curState, ethRst, intError, intRunt, macMaster, phyReady, stateCount)
228  begin
229 
230  -- Init
231  txCountEn <= '0';
232  txUnderRun <= '0';
233  txLinkNotReady <= '0';
234  nxtError <= intError;
235  crcInit <= '0';
236 
237  case curState is
238 
239  -- IDLE, wait for data to be available
240  when ST_IDLE_C =>
241  stateCountRst <= '1';
242  intPad <= '0';
243  intAdvance <= '0';
244  intLastLine <= '0';
245  nxtError <= '0';
246  intDump <= '0';
247  crcInit <= '1';
248 
249  -- Wait for start flag
250  if macMaster.tValid = '1' and ethRst = '0' then
251 
252  -- Phy is ready
253  if phyReady = '1' then
254  nxtState <= ST_READ_C;
255 
256  -- Phy is not ready dump data
257  else
258  nxtState <= ST_DUMP_C;
259  txLinkNotReady <= '1';
260  end if;
261  else
262  nxtState <= curState;
263  end if;
264 
265  -- Reading from PIC
266  when ST_READ_C =>
267  intDump <= '0';
268  stateCountRst <= '0';
269  intLastLine <= '0';
270  intPad <= '0';
271  intAdvance <= '1';
272  nxtState <= curState;
273 
274  -- Read until we get last
275  if macMaster.tLast = '1' and intRunt = '1' then
276  nxtState <= ST_PAD_C;
277  txCountEn <= '1';
278  nxtError <= intError or axiStreamGetUserBit(EMAC_AXIS_CONFIG_C, macMaster, EMAC_EOFE_BIT_C);
279 
280  elsif macMaster.tLast = '1' and intRunt = '0' then
281  intLastLine <= '1';
282  nxtState <= ST_WAIT_C;
283  txCountEn <= '1';
284  stateCountRst <= '1';
285  nxtError <= intError or axiStreamGetUserBit(EMAC_AXIS_CONFIG_C, macMaster, EMAC_EOFE_BIT_C);
286 
287  -- Detect underflow
288  elsif macMaster.tValid = '0' then
289  txUnderRun <= '1';
290  nxtError <= '1';
291  intAdvance <= '0';
292 
293  -- Keep reading
294  else
295  intAdvance <= '1';
296  end if;
297 
298  -- Reading from PIC, Dumping data
299  when ST_DUMP_C =>
300  intAdvance <= '0';
301  stateCountRst <= '0';
302  intPad <= '0';
303 
304  -- Read until we get last
305  if macMaster.tLast = '1' then
306  intDump <= '0';
307  intLastLine <= '1';
308  nxtState <= ST_WAIT_C;
309  stateCountRst <= '1';
310 
311  -- Keep reading
312  else
313  intDump <= macMaster.tValid;
314  intLastLine <= '0';
315  nxtState <= curState;
316  end if;
317 
318  -- Wait for inter-frame gap
319  when ST_WAIT_C =>
320  intDump <= '0';
321  intAdvance <= '0';
322  stateCountRst <= '0';
323  intPad <= '0';
324  intLastLine <= '0';
325 
326  -- Wait for gap, min 3 clocks
327  if stateCount >= INTERGAP_C and stateCount >= 3 then
328  nxtState <= ST_IDLE_C;
329  else
330  nxtState <= curState;
331  end if;
332 
333  -- Padding frame
334  when ST_PAD_C =>
335  intDump <= '0';
336  stateCountRst <= '0';
337  intAdvance <= '1';
338  intPad <= '1';
339 
340  if intRunt = '1' then
341  intLastLine <= '0';
342  nxtState <= curState;
343  else
344  intLastLine <= '1';
345  nxtState <= ST_WAIT_C;
346  stateCountRst <= '1';
347  end if;
348 
349  when others =>
350  nxtState <= ST_IDLE_C;
351  intAdvance <= '0';
352  intDump <= '0';
353  stateCountRst <= '0';
354  intPad <= '0';
355  intLastLine <= '0';
356  end case;
357  end process;
358 
359 
360  -- Format data for input into CRC delay FIFO.
361  process (ethClk)
362  begin
363  if rising_edge(ethClk) then
364  if ethRst = '1' then
365  frameShift0 <= '0' after TPD_G;
366  frameShift1 <= '0' after TPD_G;
367  txEnable0 <= '0' after TPD_G;
368  txEnable1 <= '0' after TPD_G;
369  txEnable2 <= '0' after TPD_G;
370  txEnable3 <= '0' after TPD_G;
371  crcDataWidth <= (others => '0') after TPD_G;
372  crcMaskIn <= (others => '0') after TPD_G;
373  nxtMaskIn <= (others => '0') after TPD_G;
374  crcIn <= (others => '0') after TPD_G;
375  crcDataValid <= '0' after TPD_G;
376  else
377 
378  -- Shift register to track frame state
379  frameShift0 <= intAdvance after TPD_G;
380  frameShift1 <= frameShift0 after TPD_G;
381 
382  -- Input to transmit enable shift register.
383  -- Asserted with frameShift0
384  if intAdvance = '1'and frameShift0 = '0' then
385  txEnable0 <= '1' after TPD_G;
386 
387  -- De-assert following frame shift0,
388  -- keep one extra clock if nxtMask contains a non-zero value.
389  elsif frameShift0 = '0' and nxtMaskIn = x"00" then
390  txEnable0 <= '0' after TPD_G;
391  end if;
392 
393  -- Transmit enable shift register
394  txEnable1 <= txEnable0 after TPD_G;
395  txEnable2 <= txEnable1 after TPD_G;
396  txEnable3 <= txEnable2 after TPD_G;
397 
398  -- CRC Valid
399  crcDataValid <= intAdvance after TPD_G;
400 
401  -- Word 0, set source mac address
402  if exportWordCnt = 0 then
403  crcIn(63 downto 48) <= macAddress(15 downto 0) after TPD_G;
404  crcIn(47 downto 0) <= intData(47 downto 0) after TPD_G;
405 
406  -- Word 1, set source mac address
407  elsif exportWordCnt = 1 then
408  crcIn(63 downto 32) <= intData(63 downto 32) after TPD_G;
409  crcIn(31 downto 0) <= macAddress(47 downto 16) after TPD_G;
410 
411  -- Normal data
412  else
413  crcIn <= intData after TPD_G;
414  end if;
415 
416  -- Last line
417  if intLastLine = '1' then
418  crcDataWidth <= intLastValidByte after TPD_G;
419  else
420  crcDataWidth <= "111" after TPD_G;
421  end if;
422 
423  -- Generate CRC Mask Value for CRC append after delay buffer.
424  -- depends on number of bytes in last transfer
425  if intLastLine = '1' and frameShift0 = '1' then
426  if intError = '1' then -- Corrupt CRC
427  crcMaskIn <= x"FF" after TPD_G;
428  nxtMaskIn <= x"00" after TPD_G;
429  else
430  case intLastValidByte is
431  when "000" => crcMaskIn <= x"1E" after TPD_G; nxtMaskIn <= x"00" after TPD_G;
432  when "001" => crcMaskIn <= x"3C" after TPD_G; nxtMaskIn <= x"00" after TPD_G;
433  when "010" => crcMaskIn <= x"78" after TPD_G; nxtMaskIn <= x"00" after TPD_G;
434  when "011" => crcMaskIn <= x"F0" after TPD_G; nxtMaskIn <= x"00" after TPD_G;
435  when "100" => crcMaskIn <= x"E0" after TPD_G; nxtMaskIn <= x"01" after TPD_G;
436  when "101" => crcMaskIn <= x"C0" after TPD_G; nxtMaskIn <= x"03" after TPD_G;
437  when "110" => crcMaskIn <= x"80" after TPD_G; nxtMaskIn <= x"07" after TPD_G;
438  when "111" => crcMaskIn <= x"00" after TPD_G; nxtMaskIn <= x"0F" after TPD_G;
439  when others => crcMaskIn <= x"00" after TPD_G; nxtMaskIn <= x"00" after TPD_G;
440  end case;
441  end if;
442  else
443  crcMaskIn <= nxtMaskIn after TPD_G;
444  nxtMaskIn <= (others => '0') after TPD_G;
445  end if;
446  end if;
447  end if;
448  end process;
449 
450  -- Select CRC FIFO Data
451  crcFifoIn(71 downto 64) <= crcMaskIn;
452  crcFifoIn(63 downto 0) <= crcIn;
453 
454  -- CRC Delay FIFO
455  U_CrcFifo : entity work.Fifo
456  generic map (
457  TPD_G => TPD_G,
458  RST_POLARITY_G => '1',
459  RST_ASYNC_G => false,
460  GEN_SYNC_FIFO_G => true,
461  BRAM_EN_G => false,
462  FWFT_EN_G => false,
463  USE_DSP48_G => "no",
464  USE_BUILT_IN_G => false,
465  XIL_DEVICE_G => "7SERIES",
466  SYNC_STAGES_G => 3,
467  DATA_WIDTH_G => 72,
468  INIT_G => "0",
469  FULL_THRES_G => 1,
470  EMPTY_THRES_G => 1
471  ) port map (
472  rst => ethRst,
473  wr_clk => ethClk,
474  wr_en => txEnable0,
475  din => crcFifoIn,
476  wr_data_count => open,
477  wr_ack => open,
478  overflow => open,
479  prog_full => open,
480  almost_full => open,
481  full => open,
482  not_full => open,
483  rd_clk => ethClk,
484  rd_en => txEnable2,
485  dout => crcFifoOut,
486  rd_data_count => open,
487  valid => open,
488  underflow => open,
489  prog_empty => open,
490  almost_empty => open,
491  empty => open
492  );
493 
494 
495  -- Output Stage to PHY
496  process (ethClk)
497  begin
498  if rising_edge(ethClk) then
499  if ethRst = '1' then
500  phyTxd <= (others => '0') after TPD_G;
501  phyTxc <= (others => '0') after TPD_G;
502  nxtEOF <= '0' after TPD_G;
503  else
504 
505  -- EOF Charactor Required If CRC was in last word and there was
506  -- not enough space for EOF
507  if nxtEOF = '1' then
508  phyTxd <= X"07070707070707FD" after TPD_G;
509  phyTxc <= x"FF" after TPD_G;
510  nxtEOF <= '0' after TPD_G;
511 
512  -- Not transmitting
513  elsif (txEnable2 = '0') and (txEnable3 = '0' or crcFifoOut(71 downto 64) = 0) then
514  phyTxd <= X"0707070707070707" after TPD_G;
515  phyTxc <= x"FF" after TPD_G;
516 
517  -- Pre-amble word
518  elsif txEnable2 = '1' and txEnable3 = '0' then
519  phyTxd <= X"D5555555555555FB" after TPD_G;
520  phyTxc <= x"01" after TPD_G;
521 
522  -- Normal data or CRC data. Select CRC / data combination
523  else
524  case crcFifoOut(71 downto 64) is -- CRC MASK
525  when x"00" =>
526  phyTxd <= crcFifoOut(63 downto 0) after TPD_G;
527  phyTxc <= x"00" after TPD_G;
528  when x"80" =>
529  phyTxd(63 downto 56) <= crcTx(7 downto 0) after TPD_G;
530  phyTxd(55 downto 0) <= crcFifoOut(55 downto 0) after TPD_G;
531  phyTxc <= x"00" after TPD_G;
532  when x"07" =>
533  phyTxd(63 downto 24) <= x"07070707FD" after TPD_G;
534  phyTxd(23 downto 0) <= crcTx(31 downto 8) after TPD_G;
535  phyTxc <= x"F8" after TPD_G;
536  when x"0F" =>
537  phyTxd(63 downto 32) <= x"070707FD" after TPD_G;
538  phyTxd(31 downto 0) <= crcTx after TPD_G;
539  phyTxc <= x"F0" after TPD_G;
540  when x"1E" =>
541  phyTxd(63 downto 40) <= x"0707FD" after TPD_G;
542  phyTxd(39 downto 8) <= crcTx after TPD_G;
543  phyTxd(7 downto 0) <= crcFifoOut(7 downto 0) after TPD_G;
544  phyTxc <= x"E0" after TPD_G;
545  when x"3C" =>
546  phyTxd(63 downto 48) <= x"07FD" after TPD_G;
547  phyTxd(47 downto 16) <= crcTx after TPD_G;
548  phyTxd(15 downto 0) <= crcFifoOut(15 downto 0) after TPD_G;
549  phyTxc <= x"C0" after TPD_G;
550  when x"78" =>
551  phyTxd(63 downto 56) <= x"FD" after TPD_G;
552  phyTxd(55 downto 24) <= crcTx after TPD_G;
553  phyTxd(23 downto 0) <= crcFifoOut(23 downto 0) after TPD_G;
554  phyTxc <= x"80" after TPD_G;
555  when x"F0" =>
556  phyTxd(63 downto 32) <= crcTx after TPD_G;
557  phyTxd(31 downto 0) <= crcFifoOut(31 downto 0) after TPD_G;
558  phyTxc <= x"00" after TPD_G;
559  nxtEOF <= '1' after TPD_G;
560  when x"E0" =>
561  phyTxd(63 downto 40) <= crcTx(23 downto 0) after TPD_G;
562  phyTxd(39 downto 0) <= crcFifoOut(39 downto 0) after TPD_G;
563  phyTxc <= x"00" after TPD_G;
564  when x"01" =>
565  phyTxd(63 downto 8) <= x"070707070707FD" after TPD_G;
566  phyTxd(7 downto 0) <= crcTx(31 downto 24) after TPD_G;
567  phyTxc <= x"FE" after TPD_G;
568  when x"C0" =>
569  phyTxd(63 downto 48) <= crcTx(15 downto 0) after TPD_G;
570  phyTxd(47 downto 0) <= crcFifoOut(47 downto 0) after TPD_G;
571  phyTxc <= x"00" after TPD_G;
572  when x"03" =>
573  phyTxd(63 downto 16) <= x"0707070707FD" after TPD_G;
574  phyTxd(15 downto 0) <= crcTx(31 downto 16) after TPD_G;
575  phyTxc <= x"FC" after TPD_G;
576  when x"FF" =>
577  phyTxd(63 downto 32) <= x"070707FD" after TPD_G;
578  phyTxd(31 downto 0) <= not crcTx after TPD_G;
579  phyTxc <= x"F0" after TPD_G;
580  when others =>
581  phyTxd <= x"0707070707070707" after TPD_G;
582  phyTxc <= x"FF" after TPD_G;
583  end case;
584  end if;
585  end if;
586  end if;
587  end process;
588 
589 
590  ------------------------------------------
591  -- CRC Logic
592  ------------------------------------------
593 
594  -- CRC Input
595  crcReset <= crcInit or ethRst or (not phyReady);
596  crcInAdj(63 downto 56) <= crcIn(7 downto 0);
597  crcInAdj(55 downto 48) <= crcIn(15 downto 8);
598  crcInAdj(47 downto 40) <= crcIn(23 downto 16);
599  crcInAdj(39 downto 32) <= crcIn(31 downto 24);
600  crcInAdj(31 downto 24) <= crcIn(39 downto 32);
601  crcInAdj(23 downto 16) <= crcIn(47 downto 40);
602  crcInAdj(15 downto 8) <= crcIn(55 downto 48);
603  crcInAdj(7 downto 0) <= crcIn(63 downto 56);
604 
605  -- CRC
606  U_Crc32 : entity work.Crc32Parallel
607  generic map (
608  BYTE_WIDTH_G => 8
609  ) port map (
610  crcOut => crcOut,
611  crcClk => ethClk,
612  crcDataValid => crcDataValid,
613  crcDataWidth => crcDataWidth,
614  crcIn => crcInAdj,
615  crcReset => crcReset
616  );
617 
618  -- CRC for transmission
619  crcTx(31 downto 24) <= crcOut(7 downto 0);
620  crcTx(23 downto 16) <= crcOut(15 downto 8);
621  crcTx(15 downto 8) <= crcOut(23 downto 16);
622  crcTx(7 downto 0) <= crcOut(31 downto 24);
623 
624 end rtl;
625 
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
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
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
out macObSlaveAxiStreamSlaveType
slv( 15 downto 0) tKeep
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
in macAddressslv( 47 downto 0)
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
INT_PIPE_STAGES_Gnatural range 0 to 16:= 0
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
boolean TSTRB_EN_C
in rd_ensl := '0'
Definition: Fifo.vhd:62
out underflowsl
Definition: Fifo.vhd:66
in macObMasterAxiStreamMasterType
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
out mAxisMasterAxiStreamMasterType
in crcInslv(( BYTE_WIDTH_G* 8- 1) downto 0)
USE_BUILT_IN_Gboolean := false
Definition: Fifo.vhd:37
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 phyTxcslv( 7 downto 0)
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
out phyTxdslv( 63 downto 0)
std_logic_vector slv
Definition: StdRtlPkg.vhd:29
BYTE_WIDTH_Ginteger := 4
in wr_ensl := '0'
Definition: Fifo.vhd:51