Use standard C/C++ variables and arrays to connect the top-level interfaces and
the load, compute and store functions. It can also be useful to use the
hls::stream
class, which models a streaming behavior.
Streaming is a type of data transfer in which data samples are sent in
sequential order starting from the first sample. Streaming requires no address
management and can be implemented with FIFOs. For more information about the hls::stream
class, see the topic on
Using
HLS Streams in the Vitis HLS User Guide
(UG1399).
When connecting the functions, use the canonical form required by the HLS compiler. For more information, see the topic on Dataflow Optimization in the Vitis HLS User Guide (UG1399). This helps the compiler build a high-throughput set of tasks using the dataflow optimization. Key recommendations include:
- Data should be transferred in the forward direction only, avoiding feedback whenever possible.
- Each connection should have a single producer and a single consumer.
- Only the load and store functions should access the primary interface of the kernel.
At this point, the developer has created the top-level function of the kernel, coded the interfaces and the load/store functions with the objective of moving data through the kernel at the desired throughput.