As mentioned previously, the free-running kernel only contains hls::stream
inputs and outputs. The recommended coding
guidelines include:
- Use
hls::stream<ap_axiu<D,0,0,0> >
if the port is interacting with another stream port from the kernel. - Use
hls::stream<qdma_axis<D,0,0,0> >
if the port is interacting with the host. - Use the
hls::stream
data type for the function parameter causes Vitis HLS to infer an AXI4-Stream port (axis
) for the interface. - The free-running kernel must also specify the following special
INTERFACE
pragma.
#pragma HLS interface ap_ctrl_none port=return
Tip:
ap_ctrl_none
means there is no control interface for the kernel so
typically there is no s_axilite
interface generated.
However, the presence of either scalar arguments or m_axi
interfaces requires the use of an s_axilite
interface.The following code example shows a free-running kernel with one input and one output communicating with another kernel.
void kernel_top(hls::stream<ap_axiu<32, 0, 0, 0> >& input,
hls::stream<ap_axiu<32, 0, 0, 0> >& output) {
#pragma HLS interface ap_ctrl_none port=return // Pragma for free-running kernel
#pragma HLS DATAFLOW // The kernel is using DATAFLOW optimization
...
}
Tip: The example shows the
definition of the streaming input/output ports in a free-running kernel. However, the
streaming connection from the free-running kernel to or from another kernel must be
defined during the kernel linking process as described in Specifying Streaming Connections between Compute Units.