syn.directive.stable - syn.directive.stable - 2026.1 English - UG1399

Vitis High-Level Synthesis User Guide (UG1399)

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

Description

Apply the syn.directive.stable to arguments of a DATAFLOW or PIPELINE region. The pragma indicates you can ignore the region's input or output when generating synchronizations at the DATAFLOW region's entry and exit. Reading accesses of that argument do not need to be part of the “first stage” of the task-level (resp. fine-grain) pipeline for inputs. Write accesses do not need to be part of the last stage of the task-level (resp. fine-grain) pipeline for outputs.

You can specify this pragma at any point in the hierarchy, on a scalar or an array. The pragma automatically applies to all the DATAFLOW or PIPELINE regions below that point. The DATAFLOW or PIPELINE region can start at another iteration even if the value of the previous iteration is unread. For an output, a write of the next iteration can occur even when the previous iteration is not complete.

Syntax

syn.directive.stable=<location> <variable>
  • <location> is the function name or loop name for constraining the directive.
  • <variable> is the name of the array to be constrained.

Examples

In the following example, without the STABLE directive, proc1 and proc2 synchronize to acknowledge the reading of their inputs (including A). With the directive, A is no longer considered as an input requiring synchronization.

void dataflow_region(int A[...], int B[…] ...
    proc1(...);
    proc2(A, ...);

See the directives for this example below.

syn.directive.stable=dataflow_region variable=A
syn.directive.dataflow dataflow_region