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 formatfunction[/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_loopsto globally pipeline loops. -
rewind -
Note: Applicable only to a loop.
-
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 - Free-running, flushable pipeline. Runs even when input data is not available. Use this when you need better timing due to reduced pipeline control signal fanout, or when you need improved performance to avoid deadlocks. However, this pipeline style can consume more power as the pipeline registers are clocked even if there is no data.
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
Function func is pipelined with the
specified initiation interval.
syn.directive.pipeline=func II=1