Connect the Load, Compute, and Store Functions - 2023.2 English

Vitis Unified Software Platform Documentation: Application Acceleration Development (UG1393)

Document ID
Release Date
2023.2 English

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.