The AXI4-Stream interface is implemented as a struct type in Vitis HLS and has the following signature (defined in ap_axi_sdata.h):
template <typename T, size_t WUser, size_t WId, size_t WDest> struct axis { .. };
Where:
-
T
- Stream data type
-
WUser
- Width of the TUSER signal
-
WId
- Width of the TID signal
-
WDest
- Width of the TDest signal
When the stream data type (T
) are simple
integer types, there are two predefined types of AXI4-Stream implementations available:
- A signed implementation of the AXI4-Stream class (or more simply
ap_axis<Wdata, WUser, WId, WDest>
)hls::axis<ap_int<WData>, WUser, WId, WDest>
- An unsigned implementation of the AXI4-Stream class (or more simply
ap_axiu<WData, WUser, WId, WDest>
)hls::axis<ap_uint<WData>, WUser, WId, WDest>
The value specified for the WUser
, WId
, and WDest
template
parameters controls the usage of side-channel signals in the AXI4-Stream interface.
When the hls::axis
class is used, the
generated RTL will typically contain the actual data signal TDATA
, and
the following additional signals: TVALID
, TREADY
,
TKEEP
, TSTRB
, TLAST
,
TUSER
, TID
, and TDEST
.
TVALID
, TREADY
, and TLAST
are necessary control signals for the AXI4-Stream
protocol. TKEEP
, TSTRB
, TUSER
,
TID
, and TDEST
signals are special signals that
can be used to pass around additional bookkeeping data.
WUser
, WId
, and WDest
are set to 0, the generated RTL will not include the
TUSER
, TID
, and TDEST
signals in
the interface.