Dataflow Configuration - 2025.2 English - UG1702

Vitis Reference Guide (UG1702)

Document ID
UG1702
Release Date
2025-11-20
Version
2025.2 English

Synthesis: Dataflow Options

The syn.dataflow commands configure the dataflow analysis for the whole design. These settings specify the default memory channel and FIFO depth used by syn.directive.dataflow.

syn.dataflow.default_channel

By default, when configuring RAM memory in ping-pong fashion and use dataflow pipelining, the Vitis tool uses the data between functions or loops. When using streaming (where the data is always read and written in consecutive order), a FIFO memory is more efficient. You can select the FIFO memory as the default memory type.

The available channels are fifo and pingpong. The default is pingpong.
syn.dataflow.default_channel=fifo
Tip: Arrays must be set to streaming using the set_directive_stream command to perform FIFO accesses.
syn.dataflow.disable_fifo_sizing_opt
Disable FIFO sizing optimizations that increase resource usage; this can improve performance and reduce deadlocks.
syn.dataflow.disable_fifo_sizing_opt=1
syn.dataflow.fifo_depth
An integer value specifying the default depth of FIFOs. This option has no effect when using pingpong memories. By default, the depth of FIFOs in the channel sets to the size of the largest producer or consumer (whichever is largest). In some cases, this approach can be too conservative and results in FIFOs larger than needed. This option can specify the depth when you know the FIFOs are larger than required.
syn.dataflow.fifo_depth=6
Important: Incorrect use of this option can result in a design that fails to operate correctly.
syn.dataflow.override_user_fifo_depth
Specify a depth for every hls::stream, overriding any user settings.
syn.dataflow.override_user_fifo_depth=12

This setting is useful for checking if a deadlock is due to insufficient FIFO depths in the design. By setting the override to a very large value, if there is no deadlock, you can:

  • Use the FIFO depth profiling options of co-simulation.
  • Use the GUI to find the minimum depth that ensures performance and avoids deadlocks.
A large value for example is the maximum depth printed by co-simulation at the end of simulation.
syn.dataflow.scalar_fifo_depth
An integer value specifying the minimum depth of the scalar value propagation FIFOs. See the Specifying Compiler-Created FIFO Depth section of the Vitis High-Level Synthesis User Guide (UG1399). These FIFOs are used to forward the value of scalar arguments of the dataflow regions to processes which have predecessors in the region itself. They do not affect functional correctness. An sufficient automatically computed size can result in loss of performance and even deadlock.
syn.dataflow.scalar_fifo_depth=4

When this option is not specified, the minimum depth is the value of the syn.dataflow.fifo_depth option, or it is 2. As a rule of thumb, a good value is the average number of times the process forwarding the scalar value can start before the last process that reads it starts.

syn.dataflow.start_fifo_depth
An integer value specifying the minimum depth of the start propagation FIFOs. See Specifying Compiler-Created FIFO Depth in the Vitis High-Level Synthesis User Guide (UG1399). These FIFOs forward the ap_start handshake signal to processes that have predecessors in the region. They do not affect functional correctness, but an insufficient automatically computed size can result in loss of performance.
syn.dataflow.start_fifo_depth=5

When you do not specify this option, the minimum depth is either the value of the syn.dataflow.fifo_depth option, or the value 2. As a rule of thumb, a good value is the expected average number of times a process should be allowed to start in advance compared to its successors.

syn.dataflow.strict_mode
Sets the severity for dataflow canonical form messages. The available modes are: error, warning, off. The default is warning.
syn.dataflow.strict_mode=error
syn.dataflow.strict_stable_sync
Force synchronization of stable ports with ap_done. Refer to the Stable Arrays section of the Vitis High-Level Synthesis User Guide (UG1399) for more information.
syn.dataflow.strict_stable_sync=1
syn.dataflow.task_level_fifo_depth
Default task-level FIFO depth. For FIFOs automatically created to transfer scalars between processes. A FIFO is synchronized by ap_ctrl_chain. The write is the ap_done of the producer, the read is the ap_ready of the consumer. Like a PIPO in terms of synchronization, and like a FIFO in terms of access.
syn.dataflow.task_level_fifo_depth=7