syn.directive.pipeline - syn.directive.pipeline - 2026.1 English - UG1399

Vitis High-Level Synthesis User Guide (UG1399)

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

Description

Reduces the initiation interval (II) for a function or loop by allowing the concurrent execution of operations. See the Pipelining Paradigm section of the Vitis High-Level Synthesis User Guide (UG1399) for details. A pipelined function or loop can process new inputs every N clock cycles, where N is the initiation interval (II). An II of 1 processes a new input every clock cycle.

As a default, the tool generates the minimum II for the design according to the clock period constraint. The emphasis is on meeting timing, rather than on achieving II, unless you specified the -II.

syn.compile.pipeline_style defines the default type of pipeline command as described in Compile Options. You can override it with the PIPELINE pragma or directive.

If Vitis HLS cannot create a design with the specified II, it issues a warning and creates a design with the lowest achievable II. You can analyze the design with the warning messages to determine the steps for creating a design satisfying the required initiation interval.

Syntax

syn.directive.pipeline=[OPTIONS] <location>

Where:

  • <location> is the location (in the format function[/label]) to be pipelined.

Options

II=<integer>
Specifies the desired initiation interval for the pipeline. Vitis HLS tries to meet this request. Based on data dependencies, the actual result can have a larger II.
off
Turns off pipeline for a specific loop or function. Use this option when using config_compile -pipeline_loops to globally pipeline loops.
rewind
Note: Applicable only to a loop.
Optional keyword. Enables rewinding as described in Rewiding Pipelined Loops for Performance of Vitis High-Level Synthesis User Guide (UG1399). This enables continuous loop pipelining with no pause between one execution of the loop ending and the next execution starting. Rewinding is effective only if there is one single loop (or a perfect loop nest) inside the top-level function. The code segment before the loop:
  • Is considered as initialization.
  • Is executed only one time in the pipeline.
  • Cannot contain any conditional operations (if-else).
style=<stp | frp | flp>
Specifies the type of pipeline to use for the specified function or loop. For more information on pipeline styles refer to the Flushing Pipeline and Pipeline Types section of the Vitis High-Level Synthesis User Guide (UG1399). The types of pipelines include:
stp
Stall pipeline. Runs only when input data is available otherwise it stalls. This is the default setting, and is the type of pipeline used by Vitis HLS for both loop and function pipelining. Use this when you don't require a flushable pipeline. For example, when there are no performance or deadlock issues due to stalls.
flp
Defines the pipeline as a flushable pipeline. This type of pipeline typically consumes more resources and can have a larger II because you cannot share resources among pipeline iterations.
frp

This setting creates a free‑running, flushable pipeline that runs without input data. Use this setting to improve timing by reducing pipeline control signal fanout. Use this setting to improve performance and avoid deadlocks. This pipeline consumes more power because Vitis pipelines registers even when no data exists.

Important: This constraint is not a hard constraint. The tool checks design conditions for enabling pipelining. It is possible for some loops to not conform to a particular style and the tool reverts to the default style (stp) when necessary.

Examples

Vitis piplelines the func with the initiation interval II.

syn.directive.pipeline=func II=1