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 arefifoandpingpong. The default ispingpong.syn.dataflow.default_channel=fifoTip: Arrays must be set to streaming using theset_directive_streamcommand 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
pingpongmemories. 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=6Important: 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=12This 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.
- 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=4When this option is not specified, the minimum depth is the value of the
syn.dataflow.fifo_depthoption, 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_starthandshake 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=5When you do not specify this option, the minimum depth is either the value of the
syn.dataflow.fifo_depthoption, 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 iswarning.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 theap_doneof the producer, the read is theap_readyof the consumer. Like a PIPO in terms of synchronization, and like a FIFO in terms of access.syn.dataflow.task_level_fifo_depth=7