SURF  1.0
AxiStreamDmaWrite.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : AxiStreamDmaWrite.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2014-04-25
5 -- Last update: 2016-12-02
6 -------------------------------------------------------------------------------
7 -- Description:
8 -- Block to transfer a single AXI Stream frame into memory using an AXI
9 -- interface.
10 -------------------------------------------------------------------------------
11 -- This file is part of 'SLAC Firmware Standard Library'.
12 -- It is subject to the license terms in the LICENSE.txt file found in the
13 -- top-level directory of this distribution and at:
14 -- https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html.
15 -- No part of 'SLAC Firmware Standard Library', including this file,
16 -- may be copied, modified, propagated, or distributed except according to
17 -- the terms contained in the LICENSE.txt file.
18 -------------------------------------------------------------------------------
19 
20 library ieee;
21 use ieee.std_logic_1164.all;
22 use ieee.std_logic_arith.all;
23 use ieee.std_logic_unsigned.all;
24 
25 use work.StdRtlPkg.all;
26 use work.AxiStreamPkg.all;
27 use work.AxiPkg.all;
28 use work.AxiDmaPkg.all;
29 
30 --! @see entity
31  --! @ingroup axi
33  generic (
34  TPD_G : time := 1 ns;
35  AXI_READY_EN_G : boolean := false;
38  AXI_BURST_G : slv(1 downto 0) := "01";
39  AXI_CACHE_G : slv(3 downto 0) := "1111";
40  SW_CACHE_EN_G : boolean := false;
41  ACK_WAIT_BVALID_G : boolean := true;
42  PIPE_STAGES_G : natural := 1;
43  BYP_SHIFT_G : boolean := false;
44  BYP_CACHE_G : boolean := false);
45  port (
46  -- Clock/Reset
47  axiClk : in sl;
48  axiRst : in sl;
49  -- DMA Control Interface
52  swCache : in slv(3 downto 0) := "0000";
53  -- Streaming Interface
56  -- AXI Interface
60 end AxiStreamDmaWrite;
61 
62 architecture rtl of AxiStreamDmaWrite is
63 
64  constant LOC_AXIS_CONFIG_C : AxiStreamConfigType := (
69  TKEEP_MODE_C => TKEEP_NORMAL_C, -- Override
71  TUSER_MODE_C => TUSER_NORMAL_C); -- Override
72 
73  constant DATA_BYTES_C : integer := LOC_AXIS_CONFIG_C.TDATA_BYTES_C;
74  constant ADDR_LSB_C : integer := bitSize(DATA_BYTES_C-1);
75  constant AWLEN_C : slv(7 downto 0) := getAxiLen(AXI_CONFIG_G, 4096);
76  constant FIFO_ADDR_WIDTH_C : natural := (AXI_CONFIG_G.LEN_BITS_C+1);
77 
78  type StateType is (
79  IDLE_S,
80  FIRST_S,
81  NEXT_S,
82  MOVE_S,
83  DUMP_S,
84  WAIT_S,
85  DONE_S);
86 
87  type RegType is record
90  threshold : slv(FIFO_ADDR_WIDTH_C-1 downto 0);
91  shift : slv(3 downto 0);
92  shiftEn : sl;
93  first : sl;
94  last : sl;
95  reqCount : slv(31 downto 0);
96  ackCount : slv(31 downto 0);
97  stCount : slv(15 downto 0);
98  awlen : slv(AXI_CONFIG_G.LEN_BITS_C-1 downto 0);
99  wMaster : AxiWriteMasterType;
100  slave : AxiStreamSlaveType;
101  state : StateType;
102  end record RegType;
103 
104  constant REG_INIT_C : RegType := (
107  threshold => (others => '1'),
108  shift => (others => '0'),
109  shiftEn => '0',
110  first => '0',
111  last => '0',
112  reqCount => (others => '0'),
113  ackCount => (others => '0'),
114  stCount => (others => '0'),
115  awlen => (others => '0'),
116  wMaster => axiWriteMasterInit(AXI_CONFIG_G, '1', AXI_BURST_G, AXI_CACHE_G),
117  slave => AXI_STREAM_SLAVE_INIT_C,
118  state => IDLE_S);
119 
120  signal r : RegType := REG_INIT_C;
121  signal rin : RegType;
122  signal pause : sl;
123  signal shiftMaster : AxiStreamMasterType;
124  signal shiftSlave : AxiStreamSlaveType;
125  signal cache : AxiStreamCtrlType;
126  signal intAxisMaster : AxiStreamMasterType;
127  signal intAxisSlave : AxiStreamSlaveType;
128  signal wrEn : sl;
129  signal rdEn : sl;
130  signal lastDet : sl;
131 
132  -- attribute dont_touch : string;
133  -- attribute dont_touch of r : signal is "true";
134 
135 begin
136 
137  assert LOC_AXIS_CONFIG_C.TDATA_BYTES_C = AXI_CONFIG_G.DATA_BYTES_C
138  report "AXIS (" & integer'image(LOC_AXIS_CONFIG_C.TDATA_BYTES_C) & ") and AXI ("
139  & integer'image(AXI_CONFIG_G.DATA_BYTES_C) & ") must have equal data widths" severity failure;
140 
141  pause <= '0' when (AXI_READY_EN_G) else axiWriteCtrl.pause;
142 
143  U_AxiStreamShift : entity work.AxiStreamShift
144  generic map (
145  TPD_G => TPD_G,
147  AXIS_CONFIG_G => LOC_AXIS_CONFIG_C,
149  port map (
150  axisClk => axiClk,
151  axisRst => axiRst,
152  axiStart => r.shiftEn,
153  axiShiftDir => '0',
154  axiShiftCnt => r.shift,
157  mAxisMaster => shiftMaster,
158  mAxisSlave => shiftSlave);
159 
160  GEN_CACHE : if (BYP_CACHE_G = false) generate
161 
162  U_Cache : entity work.AxiStreamFifoV2
163  generic map (
164  TPD_G => TPD_G,
167  SLAVE_READY_EN_G => true,
168  VALID_THOLD_G => 1,
169  BRAM_EN_G => true,
170  GEN_SYNC_FIFO_G => true,
171  CASCADE_SIZE_G => 1,
172  FIFO_ADDR_WIDTH_G => FIFO_ADDR_WIDTH_C,
173  FIFO_FIXED_THRESH_G => false, -- Using r.threshold
174  SLAVE_AXI_CONFIG_G => LOC_AXIS_CONFIG_C,
175  MASTER_AXI_CONFIG_G => LOC_AXIS_CONFIG_C)
176  port map (
177  -- Slave Port
178  sAxisClk => axiClk,
179  sAxisRst => axiRst,
180  sAxisMaster => shiftMaster,
181  sAxisSlave => shiftSlave,
182  sAxisCtrl => cache,
183  -- FIFO Port
184  fifoPauseThresh => r.threshold,
185  -- Master Port
186  mAxisClk => axiClk,
187  mAxisRst => axiRst,
188  mAxisMaster => intAxisMaster,
189  mAxisSlave => intAxisSlave);
190 
191  wrEn <= shiftMaster.tValid and shiftMaster.tLast and shiftSlave.tReady;
192  rdEn <= intAxisMaster.tValid and intAxisMaster.tLast and intAxisSlave.tReady;
193 
194  U_Last : entity work.FifoSync
195  generic map (
196  TPD_G => TPD_G,
197  BYP_RAM_G => true,
198  FWFT_EN_G => true,
199  ADDR_WIDTH_G => FIFO_ADDR_WIDTH_C)
200  port map (
201  clk => axiClk,
202  rst => axiRst,
203  wr_en => wrEn,
204  rd_en => rdEn,
205  din => (others => '0'),
206  valid => lastDet);
207 
208  end generate;
209 
210  BYP_CACHE : if (BYP_CACHE_G = true) generate
211 
212  intAxisMaster <= shiftMaster;
213  shiftSlave <= intAxisSlave;
214  cache.pause <= '1';
215  cache.overflow <= '0';
216  cache.idle <= '0';
217  lastDet <= '0';
218 
219  end generate;
220 
221  comb : process (axiRst, axiWriteSlave, cache, dmaReq, intAxisMaster, lastDet, pause, r, swCache) is
222  variable v : RegType;
223  variable bytes : natural;
224  variable ibValid : sl;
225  begin
226  -- Latch the current value
227  v := r;
228 
229  -- Set cache value if enabled in software
230  if SW_CACHE_EN_G then
231  v.wMaster.awcache := swCache;
232  end if;
233 
234  -- Reset strobing Signals
235  ibValid := '0';
236  v.slave.tReady := '0';
237  v.shiftEn := '0';
238  if (axiWriteSlave.awready = '1') or (AXI_READY_EN_G = false) then
239  v.wMaster.awvalid := '0';
240  end if;
241  if (axiWriteSlave.wready = '1') or (AXI_READY_EN_G = false) then
242  v.wMaster.wvalid := '0';
243  v.wMaster.wlast := '0';
244  end if;
245 
246  -- Wait for memory bus response
247  if (axiWriteSlave.bvalid = '1') and (ACK_WAIT_BVALID_G = true) then
248  -- Increment the counter
249  v.ackCount := r.ackCount + 1;
250  -- Check for error response
251  if (axiWriteSlave.bresp /= "00") then
252  -- Set the flag
253  v.dmaAck.writeError := '1';
254  -- Latch the response value
256  end if;
257  end if;
258 
259  -- Check for handshaking
260  if (dmaReq.request = '0') and (r.dmaAck.done = '1') then
261  -- Reset the flags
262  v.dmaAck.done := '0';
263  end if;
264 
265  -- Count number of bytes in return data
266  bytes := getTKeep(intAxisMaster.tKeep(DATA_BYTES_C-1 downto 0));
267 
268  -- Check the AXI stream data cache
269  if (lastDet = '1') or (cache.pause = '1') then
270  ibValid := '1';
271  end if;
272 
273  -- State machine
274  case r.state is
275  ----------------------------------------------------------------------
276  when IDLE_S =>
277  -- Update the variables
278  v.dmaReq := dmaReq;
279  -- Reset the counters and threshold
280  v.reqCount := (others => '0');
281  v.ackCount := (others => '0');
282  v.shift := (others => '0');
283  v.stCount := (others => '0');
284  v.threshold := (others => '1');
285  -- Align shift and address to transfer size
286  if (DATA_BYTES_C /= 1) then
287  v.dmaReq.address(ADDR_LSB_C-1 downto 0) := (others => '0');
288  v.shift(ADDR_LSB_C-1 downto 0) := dmaReq.address(ADDR_LSB_C-1 downto 0);
289  end if;
290  -- Check for DMA request
291  if (dmaReq.request = '1') then
292  -- Reset the flags and counters
293  v.dmaAck.size := (others => '0');
294  v.dmaAck.overflow := '0';
295  v.dmaAck.writeError := '0';
296  v.dmaAck.errorValue := (others => '0');
297  -- Set the flags
298  v.shiftEn := '1';
299  v.last := '0';
300  v.first := '0';
301  -- Check if we are dumping AXIS frames
302  if (dmaReq.drop = '1') then
303  -- Next state
304  v.state := DUMP_S;
305  else
306  -- Next state
307  v.state := FIRST_S;
308  end if;
309  end if;
310  ----------------------------------------------------------------------
311  when FIRST_S =>
312  -- Check if ready to make memory request
313  if (v.wMaster.awvalid = '0') then
314  -- Set the memory address
315  v.wMaster.awaddr(AXI_CONFIG_G.ADDR_WIDTH_C-1 downto 0) := r.dmaReq.address(AXI_CONFIG_G.ADDR_WIDTH_C-1 downto 0);
316  -- Determine transfer size to align address to AXI_BURST_BYTES_G boundaries
317  -- This initial alignment will ensure that we never cross a 4k boundary
318  if (AWLEN_C > 0) then
319  -- Set the burst length
320  v.wMaster.awlen := AWLEN_C - r.dmaReq.address(ADDR_LSB_C+AXI_CONFIG_G.LEN_BITS_C-1 downto ADDR_LSB_C);
321  -- Limit write burst size
322  if r.dmaReq.maxSize(31 downto ADDR_LSB_C) < v.wMaster.awlen then
323  v.wMaster.awlen := resize(r.dmaReq.maxSize(ADDR_LSB_C+AXI_CONFIG_G.LEN_BITS_C-1 downto ADDR_LSB_C)-1, 8);
324  end if;
325  end if;
326  -- Latch AXI awlen value
327  v.awlen := v.wMaster.awlen(AXI_CONFIG_G.LEN_BITS_C-1 downto 0);
328  -- Update the threshold
329  v.threshold := '0' & v.awlen;
330  v.threshold := v.threshold + 1;
331  -- DMA request has dropped. Abort. This is needed to disable engine while it
332  -- is still waiting for an inbound frame.
333  if dmaReq.request = '0' then
334  -- Next state
335  v.state := IDLE_S;
336  -- Check if enough room and data to move
337  elsif (pause = '0') and (ibValid = '1') then
338  -- Set the flag
339  v.wMaster.awvalid := '1';
340  -- Increment the counter
341  v.reqCount := r.reqCount + 1;
342  -- Next state
343  v.state := MOVE_S;
344  end if;
345  end if;
346  ----------------------------------------------------------------------
347  when NEXT_S =>
348  -- Check if ready to make memory request
349  if (v.wMaster.awvalid = '0') then
350  -- Set the memory address
351  v.wMaster.awaddr(AXI_CONFIG_G.ADDR_WIDTH_C-1 downto 0) := r.dmaReq.address(AXI_CONFIG_G.ADDR_WIDTH_C-1 downto 0);
352  -- Bursts after the FIRST are garunteed to be aligned.
353  v.wMaster.awlen := AWLEN_C;
354  if r.dmaReq.maxSize(31 downto ADDR_LSB_C) < v.wMaster.awlen then
355  v.wMaster.awlen := resize(r.dmaReq.maxSize(ADDR_LSB_C+AXI_CONFIG_G.LEN_BITS_C-1 downto ADDR_LSB_C)-1, 8);
356  end if;
357  -- Latch AXI awlen value
358  v.awlen := v.wMaster.awlen(AXI_CONFIG_G.LEN_BITS_C-1 downto 0);
359  -- Update the threshold
360  v.threshold := '0' & v.awlen;
361  v.threshold := v.threshold + 1;
362  -- DMA request has dropped. Abort. This is needed to disable engine while it
363  -- is still waiting for an inbound frame.
364  if dmaReq.request = '0' then
365  -- Next state
366  v.state := IDLE_S;
367  -- Check if enough room and data to move
368  elsif (pause = '0') and (ibValid = '1') then
369  -- Set the flag
370  v.wMaster.awvalid := '1';
371  -- Increment the counter
372  v.reqCount := r.reqCount + 1;
373  -- Next state
374  v.state := MOVE_S;
375  end if;
376  end if;
377  ----------------------------------------------------------------------
378  when MOVE_S =>
379  -- Reset the threshold
380  v.threshold := (others => '1');
381  -- Check if ready to move data
382  if (v.wMaster.wvalid = '0') and ((intAxisMaster.tValid = '1') or (r.last = '1')) then
383  -- Accept the data
384  v.slave.tReady := not(r.last);
385  -- Move the data
386  v.wMaster.wvalid := '1';
387  v.wMaster.wdata((DATA_BYTES_C*8)-1 downto 0) := intAxisMaster.tData((DATA_BYTES_C*8)-1 downto 0);
388  -- Address and size increment
390  v.dmaReq.address(ADDR_LSB_C-1 downto 0) := (others => '0');
391  -- Check if tLast not registered yet
392  if (r.last = '0') then
393  -- Increment the byte counter
394  v.dmaAck.size := r.dmaAck.size + bytes;
395  end if;
396  -- -- Check for first AXIS word
397  if (r.first = '0') then
398  -- Set the flag
399  v.first := '1';
400  -- Latch the tDest/tId/tUser values
401  v.dmaAck.dest := intAxisMaster.tDest;
402  v.dmaAck.id := intAxisMaster.tId;
403  v.dmaAck.firstUser(LOC_AXIS_CONFIG_C.TUSER_BITS_C-1 downto 0) := axiStreamGetUserField(LOC_AXIS_CONFIG_C, intAxisMaster, conv_integer(r.shift));
404  end if;
405  -- -- Check for last AXIS word
406  if (intAxisMaster.tLast = '1') and (r.last = '0') then
407  -- Set the flag
408  v.last := '1';
409  -- Latch the tUser value
410  v.dmaAck.lastUser(LOC_AXIS_CONFIG_C.TUSER_BITS_C-1 downto 0) := axiStreamGetUserField(LOC_AXIS_CONFIG_C, intAxisMaster);
411  end if;
412  -- Check if done
413  if (r.last = '1') then
414  -- Reset byte write strobes
415  v.wMaster.wstrb := (others => '0');
416  -- Check the read size
417  elsif (bytes > r.dmaReq.maxSize) then
418  -- Set the error flag
419  v.dmaAck.overflow := '1';
420  -- Reset byte write strobes
421  v.wMaster.wstrb := (others => '0');
422  else
423  -- Decrement the counter
424  v.dmaReq.maxSize := r.dmaReq.maxSize - bytes;
425  -- Set byte write strobes
426  v.wMaster.wstrb(DATA_BYTES_C-1 downto 0) := intAxisMaster.tKeep(DATA_BYTES_C-1 downto 0);
427  end if;
428  -- Check for last AXI transfer
429  if (AWLEN_C = 0) or (r.awlen = 0) then
430  -- Set the flag
431  v.wMaster.wlast := '1';
432  -- Check if AXIS is completed
433  if (v.last = '1') then
434  -- Next state
435  v.state := WAIT_S;
436  -- Check the error flags
437  elsif (v.dmaAck.overflow = '1') or (v.dmaAck.writeError = '1') then
438  -- Next state
439  v.state := DUMP_S;
440  -- Continue to the next memory request transaction
441  else
442  -- Next state
443  v.state := NEXT_S;
444  end if;
445  else
446  -- Decrement the counter
447  v.awlen := r.awlen - 1;
448  end if;
449  end if;
450  ----------------------------------------------------------------------
451  when DUMP_S =>
452  -- Blowoff data
453  v.slave.tReady := '1';
454  -- Check for data
455  if (intAxisMaster.tValid = '1') then
456  -- Check for first AXIS word
457  if (r.first = '0') then
458  -- Set the flag
459  v.first := '1';
460  -- Latch the tDest/tId/tUser values
461  v.dmaAck.dest := intAxisMaster.tDest;
462  v.dmaAck.id := intAxisMaster.tId;
463  v.dmaAck.firstUser(LOC_AXIS_CONFIG_C.TUSER_BITS_C-1 downto 0) := axiStreamGetUserField(LOC_AXIS_CONFIG_C, intAxisMaster, conv_integer(r.shift));
464  end if;
465  -- Check for last AXIS word
466  if (intAxisMaster.tLast = '1') then
467  -- Latch the tUser value
468  v.dmaAck.lastUser(LOC_AXIS_CONFIG_C.TUSER_BITS_C-1 downto 0) := axiStreamGetUserField(LOC_AXIS_CONFIG_C, intAxisMaster);
469  -- Next state
470  v.state := WAIT_S;
471  end if;
472  end if;
473  ----------------------------------------------------------------------
474  when WAIT_S =>
475  -- Check if ACK counter caught up with REQ counter
476  if (r.ackCount >= r.reqCount) or (ACK_WAIT_BVALID_G = false) then
477  -- Set the flag
478  v.dmaAck.done := '1';
479  -- Next state
480  v.state := DONE_S;
481  -- Check for ACK timeout
482  elsif (r.stCount = x"FFFF") then
483  -- Set the flags
484  v.dmaAck.done := '1';
485  v.dmaAck.writeError := '1';
486  -- Next state
487  v.state := DONE_S;
488  else
489  -- Increment the counter
490  v.stCount := r.stCount + 1;
491  end if;
492  ----------------------------------------------------------------------
493  when DONE_S =>
494  -- Check for ACK completion
495  if (r.dmaAck.done = '0') then
496  -- Next state
497  v.state := IDLE_S;
498  end if;
499  ----------------------------------------------------------------------
500  end case;
501 
502  -- Forward the state of the state machine
503  if (v.state = IDLE_S) then
504  -- Set the flag
505  v.dmaAck.idle := '1';
506  else
507  -- Reset the flag
508  v.dmaAck.idle := '0';
509  end if;
510 
511  -- Reset
512  if (axiRst = '1') then
513  v := REG_INIT_C;
514  end if;
515 
516  -- Register the variable for next clock cycle
517  rin <= v;
518 
519  -- Outputs
520  dmaAck <= r.dmaAck;
521  intAxisSlave <= v.slave;
522  axiWriteMaster <= r.wMaster;
523 
524  end process comb;
525 
526  seq : process (axiClk) is
527  begin
528  if (rising_edge(axiClk)) then
529  r <= rin after TPD_G;
530  end if;
531  end process seq;
532 
533 end rtl;
BYP_SHIFT_Gboolean := false
in dmaReqAxiWriteDmaReqType
slv( 7 downto 0) tId
FIFO_ADDR_WIDTH_Ginteger range 4 to 48:= 9
out dmaAckAxiWriteDmaAckType
natural range 0 to 8 TDEST_BITS_C
slv( 63 downto 0) address
Definition: AxiDmaPkg.vhd:49
ADDR_WIDTH_Ginteger range 4 to 48:= 4
Definition: FifoSync.vhd:40
out sAxisCtrlAxiStreamCtrlType
AxiCtrlType
Definition: AxiPkg.vhd:198
in wr_ensl
Definition: FifoSync.vhd:47
slv( 7 downto 0) dest
Definition: AxiDmaPkg.vhd:78
out axiWriteMasterAxiWriteMasterType
sl wvalid
Definition: AxiPkg.vhd:124
PIPE_STAGES_Gnatural range 0 to 16:= 1
sl bvalid
Definition: AxiPkg.vhd:178
in rstsl :=not RST_POLARITY_G
Definition: FifoSync.vhd:45
slv( 7 downto 0) firstUser
Definition: AxiDmaPkg.vhd:76
out sAxisSlaveAxiStreamSlaveType
std_logic sl
Definition: StdRtlPkg.vhd:28
sl wlast
Definition: AxiPkg.vhd:123
in axiWriteCtrlAxiCtrlType := AXI_CTRL_UNUSED_C
slv( 1023 downto 0) wdata
Definition: AxiPkg.vhd:122
slv( 7 downto 0) awlen
Definition: AxiPkg.vhd:113
ACK_WAIT_BVALID_Gboolean := true
SLAVE_AXI_CONFIG_GAxiStreamConfigType := AXI_STREAM_CONFIG_INIT_C
slv( 7 downto 0) id
Definition: AxiDmaPkg.vhd:79
sl awready
Definition: AxiPkg.vhd:173
in sAxisMasterAxiStreamMasterType
slv( 15 downto 0) tKeep
out validsl
Definition: FifoSync.vhd:53
SLAVE_READY_EN_Gboolean := true
slv( 127 downto 0) wstrb
Definition: AxiPkg.vhd:126
FIFO_FIXED_THRESH_Gboolean := true
sl writeError
Definition: AxiDmaPkg.vhd:74
AxiCtrlType :=(pause => '0',overflow => '0') AXI_CTRL_UNUSED_C
Definition: AxiPkg.vhd:206
natural range 1 to 16 TDATA_BYTES_C
in axiShiftCntslv( 3 downto 0)
GEN_SYNC_FIFO_Gboolean := false
TkeepModeType TKEEP_MODE_C
TPD_Gtime := 1 ns
Definition: FifoSync.vhd:29
AxiWriteDmaAckType
Definition: AxiDmaPkg.vhd:69
positive range 12 to 64 ADDR_WIDTH_C
Definition: AxiPkg.vhd:214
AxiWriteMasterType
Definition: AxiPkg.vhd:108
TPD_Gtime := 1 ns
slv( 7 downto 0) lastUser
Definition: AxiDmaPkg.vhd:77
natural range 0 to 8 TID_BITS_C
slv( 127 downto 0) tData
sl wready
Definition: AxiPkg.vhd:175
in dinslv( DATA_WIDTH_G- 1 downto 0)
Definition: FifoSync.vhd:49
out mAxisMasterAxiStreamMasterType
INT_PIPE_STAGES_Gnatural range 0 to 16:= 0
BYP_CACHE_Gboolean := false
AXI_CACHE_Gslv( 3 downto 0) := "1111"
sl awvalid
Definition: AxiPkg.vhd:110
AxiStreamSlaveType :=(tReady => '0') AXI_STREAM_SLAVE_INIT_C
BYP_SHIFT_Gboolean := false
SW_CACHE_EN_Gboolean := false
BRAM_EN_Gboolean := true
boolean TSTRB_EN_C
AxiWriteDmaReqType
Definition: AxiDmaPkg.vhd:46
AxiConfigType
Definition: AxiPkg.vhd:213
TUserModeType TUSER_MODE_C
TPD_Gtime := 1 ns
in axiWriteSlaveAxiWriteSlaveType
AxiWriteSlaveType
Definition: AxiPkg.vhd:171
natural range 0 to 8 TUSER_BITS_C
AxiWriteDmaAckType :=(idle => '1',done => '0',size =>( others => '0'),overflow => '0',writeError => '0',errorValue => "00",firstUser =>( others => '0'),lastUser =>( others => '0'),dest =>( others => '0'),id =>( others => '0')) AXI_WRITE_DMA_ACK_INIT_C
Definition: AxiDmaPkg.vhd:83
in clksl
Definition: FifoSync.vhd:46
AXI_BURST_Gslv( 1 downto 0) := "01"
out sAxisSlaveAxiStreamSlaveType
in rd_ensl
Definition: FifoSync.vhd:48
in axisMasterAxiStreamMasterType
slv( 3 downto 0) awcache
Definition: AxiPkg.vhd:118
AxiStreamConfigType :=(TSTRB_EN_C => false,TDATA_BYTES_C => 16,TDEST_BITS_C => 4,TID_BITS_C => 0,TKEEP_MODE_C => TKEEP_NORMAL_C,TUSER_BITS_C => 4,TUSER_MODE_C => TUSER_NORMAL_C) AXI_STREAM_CONFIG_INIT_C
slv( 7 downto 0) tDest
slv( 63 downto 0) awaddr
Definition: AxiPkg.vhd:111
positive range 1 to 128 DATA_BYTES_C
Definition: AxiPkg.vhd:215
slv( 31 downto 0) size
Definition: AxiDmaPkg.vhd:72
slv( 1 downto 0) errorValue
Definition: AxiDmaPkg.vhd:75
slv( 31 downto 0) maxSize
Definition: AxiDmaPkg.vhd:50
in swCacheslv( 3 downto 0) := "0000"
in sAxisMasterAxiStreamMasterType
in mAxisSlaveAxiStreamSlaveType
FWFT_EN_Gboolean := false
Definition: FifoSync.vhd:34
out mAxisMasterAxiStreamMasterType
PIPE_STAGES_Gnatural := 1
AXIS_CONFIG_GAxiStreamConfigType := AXI_STREAM_CONFIG_INIT_C
PIPE_STAGES_Ginteger range 0 to 16:= 0
in fifoPauseThreshslv( FIFO_ADDR_WIDTH_G- 1 downto 0) :=( others => '1')
AXIS_CONFIG_GAxiStreamConfigType := AXI_STREAM_CONFIG_INIT_C
in mAxisSlaveAxiStreamSlaveType
CASCADE_SIZE_Ginteger range 1 to ( 2** 24):= 1
sl request
Definition: AxiDmaPkg.vhd:47
VALID_THOLD_Ginteger range 0 to ( 2** 24):= 1
BYP_RAM_Gboolean := false
Definition: FifoSync.vhd:33
slv( 1 downto 0) bresp
Definition: AxiPkg.vhd:177
AxiConfigType :=axiConfig(ADDR_WIDTH_C => 32,DATA_BYTES_C => 4,ID_BITS_C => 12,LEN_BITS_C => 4) AXI_CONFIG_INIT_C
Definition: AxiPkg.vhd:227
AXI_CONFIG_GAxiConfigType := AXI_CONFIG_INIT_C
MASTER_AXI_CONFIG_GAxiStreamConfigType := AXI_STREAM_CONFIG_INIT_C
out axisSlaveAxiStreamSlaveType
AXI_READY_EN_Gboolean := false
std_logic_vector slv
Definition: StdRtlPkg.vhd:29
natural range 0 to 8 LEN_BITS_C
Definition: AxiPkg.vhd:217
AxiWriteDmaReqType :=(request => '0',drop => '0',address =>( others => '0'),maxSize =>( others => '0')) AXI_WRITE_DMA_REQ_INIT_C
Definition: AxiDmaPkg.vhd:54