Specifies that dataflow optimization be performed on the functions or loops, improving the concurrency of the RTL implementation.

All operations are performed sequentially in a C description. In the absence of any directives that limit resources (such as set_directive_allocation), Vitis HLS seeks to minimize latency and improve concurrency.

Data dependencies can limit this. For example, functions or loops that access arrays must finish all read/write accesses to the arrays before they complete. This prevents the next function or loop that consumes the data from starting operation.

It is possible for the operations in a function or loop to start operation before the previous function or loop completes all its operations.

When dataflow optimization is specified, Vitis HLS:

  • Analyzes the dataflow between sequential functions or loops.
  • Seeks to create channels (based on pingpong RAMs or FIFOs) that allow consumer functions or loops to start operation before the producer functions or loops have completed.
    TIP: The config_dataflow command specifies the default memory channel and FIFO depth used in dataflow optimization.

This allows functions or loops to operate in parallel, which in turn:

  • Decreases the latency
  • Improves the throughput of the RTL design

If no initiation interval (number of cycles between the start of one function or loop and the next) is specified, Vitis HLS attempts to minimize the initiation interval and start operation as soon as data is available.


set_directive_dataflow <location> -disable_start_propagation
  • <location> is the location (in the format function[/label]) at which dataflow optimization is to be performed.
  • -disable_start_propagation: disables the creation of a start FIFO used to propagate a start token to an internal process. Such FIFOs can sometimes be a bottleneck for performance.


Specifies dataflow optimization within function foo.

set_directive_dataflow foo

See Also