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.