ap_fifo
protocol.
However, the AXI4-Stream (axis
) interface only
supports non-blocking read accesses, but not write.The term non-blocking means that lack of data (or too
much data) on the stream does not block the operation of a
function or the iteration of a loop. Non-blocking methods return
a Boolean value indicating the status of a read or write:
true
if successful,
false
otherwise.
However, using non-blocking APIs can lead to non-deterministic
behavior which cannot be fully validated during either
C-simulation or RTL/Co-simulation, and requires an RTL test
bench to test it exhaustively. Non-deterministic behavior can
occur when reading from an empty FIFO or writing to a full
FIFO.
During C simulation, streams have an infinite size. It is therefore not possible to validate with C simulation if the stream is full. These methods can be verified only during RTL simulation when the FIFO sizes are defined (either the default size of 1, or an arbitrary size defined with the STREAM directive).
ap_ctrl_none
and the design
contains any hls::stream
variables that employ non-blocking behavior, C/RTL co-simulation
is not guaranteed to complete.