syn.directive.stable - 2025.2 English - UG1399

Vitis High-Level Synthesis User Guide (UG1399)

Document ID
UG1399
Release Date
2025-11-20
Version
2025.2 English

Description

Apply the syn.directive.stable to arguments of a DATAFLOW or PIPELINE region. The pragma indicates that an input or output of this region can be ignored when generating the synchronizations at entry and exit of the DATAFLOW region. 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.

This pragma can be specified 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. A DATAFLOW or PIPELINE region can start another iteration even though the value of the previous iteration has not been read yet. 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, ...);

The directives for this example are described below.

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