In a kernel, the streaming interface directly sending or receiving data to
another kernel streaming interface is defined by hls::stream
with the ap_axiu<D,0,0,0>
data type. The ap_axiu<D,0,0,0>
data type requires the use of the ap_axi_sdata.h header file.
Important: Host-to-kernel and
kernel-to-host streaming requires the use of the
qdma_axis
data type. Both the ap_axiu
and qdma_axis
data types are defined inside the ap_axi_sdata.h header file that is distributed with the Vitis software platform installation.The following example shows the streaming interfaces of the producer and consumer kernels.
// Producer kernel - provides output as a data stream
// The example kernel code does not show any other inputs or outputs.
void kernel1 (.... , hls::stream<ap_axiu<32, 0, 0, 0> >& stream_out) {
for(int i = 0; i < ...; i++) {
int a = ...... ; // Internally generated data
ap_axiu<32, 0, 0, 0> v; // temporary storage for ap_axiu
v.data = a; // Writing the data
stream_out.write(v); // Writing to the output stream.
}
}
// Consumer kernel - reads data stream as input
// The example kernel code does not show any other inputs or outputs.
void kernel2 (hls::stream<ap_axiu<32, 0, 0, 0> >& stream_in, .... ) {
for(int i = 0; i < ....; i++) {
ap_axiu<32, 0, 0, 0> v = stream_in.read(); // Reading the input stream
int a = v.data; // Extract the data
// Do further processing
}
}
Because the hls::stream
data type is
defined, the Vitis HLS tool infers axis
interfaces. The following INTERFACE pragmas are shown as an
example, but are not added to the code.
#pragma HLS INTERFACE axis port=stream_out
#pragma HLS INTERFACE axis port=stream_in
Tip: These example kernels show the
definition of the streaming input/output ports in the kernel signature, and the handling of
the input/output stream in the kernel code. The connection of
kernel1
to kernel2
must be defined during the
kernel linking process as described in Specifying Streaming Connections between Compute Units.
For more information on mapping streaming connections, refer to Building and Running the Application.