Dataflow - Dataflow - 2026.1 English - UG1399

Vitis High-Level Synthesis User Guide (UG1399)

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

Description

Dataflow (syn.dataflow.* / config_dataflow)

Controls dataflow channel types and FIFO sizing for task-level pipelining regions.

Syntax

Table 1. Configuration Table
Option Config File Tcl Default Description
default_channel syn.dataflow.default_channel=[fifo|pingpong] config_dataflow -default_channel [fifo|pingpong] pingpong Default channel type for dataflow producer-consumer connections.
disable_fifo_sizing_opt syn.dataflow.disable_fifo_sizing_opt=true config_dataflow -disable_fifo_sizing_opt 0 Disable FIFO sizing optimizations that can increase resource usage and might improve performance and reduce deadlocks.
enable_canonicalization syn.dataflow.enable_canonicalization=true config_dataflow -enable_canonicalization true Enable transformations into a dataflow canonical form when possible.
fifo_depth syn.dataflow.fifo_depth=<N> config_dataflow -fifo_depth <N> 2 Default depth for all dataflow FIFOs. Has no effect when ping-pong memories are used. If an array is converted into a FIFO with no explicit depth, the original array size is used.
override_user_fifo_depth syn.dataflow.override_user_fifo_depth=<N> config_dataflow -override_user_fifo_depth <N> 0 Override the depth of every hls::stream FIFO with value N, ignoring any user settings. 0 = disabled. Tip: Set to a very large value during co-simulation to determine if a deadlock is caused by insufficient FIFO depth — if deadlock disappears, increase depths using FIFO profiling in the GUI.
scalar_fifo_depth config_dataflow -scalar_fifo_depth <N> config_dataflow -scalar_fifo_depth <N> 2 Minimum depth for scalar propagation FIFOs (scalars converted from C/C++ code into FIFOs). Falls back to fifo_depth if not specified.
start_fifo_depth syn.dataflow.start_fifo_depth=<N> config_dataflow -start_fifo_depth <N> 2 Minimum depth for start propagation FIFOs. Same default as fifo_depth. Start FIFOs can sometimes cause deadlocks — increase this value if deadlocks occur in start FIFOs.
strict_mode syn.dataflow.strict_mode=[error|warning|off] config_dataflow -strict_mode [error|warning|off] warning Severity for messages related to dataflow canonical form violations: error = abort synthesis, warning = continue with warning, off = suppress messages.
strict_stable_sync syn.dataflow.strict_stable_sync=true config_dataflow -strict_stable_sync 0 Force synchronization of stable ports with ap_done.
task_level_fifo_depth syn.dataflow.task_level_fifo_depth=<N> config_dataflow -task_level_fifo_depth <N> `2` Depth of task-level FIFOs, which are synchronized by ap_ctrl_chain (write = ap_done of producer, read = ap_ready of consumer).
Tip: Set arrays to streaming using the set_directive_stream command to perform FIFO accesses, then use default_channel=fifo for streaming data workloads.
Note: fifo_depth: Be careful when using this option. Insufficient FIFO depth might lead to deadlock situations. If the design requires a FIFO deeper than the value specified, the design will fail RTL verification.

Usage


ini
[hls]
syn.dataflow.default_channel=pingpong
syn.dataflow.fifo_depth=2
syn.dataflow.strict_mode=error
syn.dataflow.override_user_fifo_depth=4

tcl
config_dataflow -default_channel pingpong -fifo_depth 2 -strict_mode error -override_user_fifo_depth 4

Example


tcl
# Change the default channel from ping-pong memories to FIFOs:
config_dataflow -default_channel fifo

# Change to FIFOs with a depth of 6:
config_dataflow -default_channel fifo -fifo_depth 6