Dataflow Configuration - Dataflow Configuration - 2026.1 English - UG1399

Vitis High-Level Synthesis User Guide (UG1399)

Document ID
UG1399
Release Date
2026-06-23
Version
2026.1 English

Synthesis: Dataflow Options

Configures 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 you use streaming (consecutive reads and writes), a FIFO memory provides better efficiency.

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 forward scalar argument values from dataflow regions to processes that have predecessors in the region.

They do not affect functional correctness. An automatically computed size can result in loss of performance and even deadlock.
syn.dataflow.scalar_fifo_depth=4

If you do not specify this option, the minimum depth is the value of the syn.dataflow.fifo_depth option or 2. The recommended 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, set the value to the average number of times a process should start ahead of 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. ap_ctrl_chain synchronizes the FIFO. 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