An AXI4-Stream is used without
side-channels when the function argument, ap_axis
or
ap_axiu
data type, does not contain any AXI4 side-channel elements (that is, when the WUser
, WId
, and WDest
parameters are set to 0). In the following example,
both interfaces are implemented using an AXI4-Stream:
#include "ap_axi_sdata.h"
#include "hls_stream.h"
typedef ap_axiu<32, 0, 0, 0> trans_pkt;
void example(hls::stream< trans_pkt > &A, hls::stream< trans_pkt > &B)
{
#pragma HLS INTERFACE mode=axis port=A
#pragma HLS INTERFACE mode=axis port=B
trans_pkt tmp;
A.read(tmp);
tmp.data += 5;
B.write(tmp);
}
After synthesis, both arguments are implemented with a data port (TDATA
) and the standard AXI4-Stream protocol ports, TVALID
,
TREADY
, TKEEP
,
TLAST
, and TSTRB
,
as shown in the following figure.
hls::stream
object with a data type other than ap_axis
or ap_axiu
, the
tool will infer an AXI4-Stream interface without the
TLAST
signal, or any of the side-channel signals.
This implementation of the AXI4-Stream interface
consumes fewer device resources, but offers no visibility into when the stream is
ending.Multiple variables can be combined into the same AXI4-Stream interface by using a struct, which is aggregated by Vitis HLS by default. Aggregating the elements of a struct into a single wide-vector, allows all elements of the struct to be implemented in the same AXI4-Stream interface.