Description
Dataflow (syn.dataflow.* / config_dataflow)
Controls dataflow channel types and FIFO sizing for task-level pipelining regions.
Syntax
| 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