Description
Reduces the initiation interval (II) for a function or loop by
allowing the concurrent execution of operations as described in Function and Loop Pipelining. A pipelined function or loop can
process new inputs every N clock cycles, where N is the initiation interval (II
). The default II is 1, which processes a new input
every clock cycle, or it can be specified by the -II
option.
The default type of pipeline is defined by the config_compile -pipeline_style
command, but can be
overridden in the PIPELINE pragma or directive.
If Vitis HLS cannot create a design with the specified II, it:
- Issues a warning.
- Creates a design with the lowest possible II.
You can then analyze this design with the warning messages to determine what steps must be taken to create a design that satisfies the required initiation interval.
Syntax
set_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 might have a larger II. The default is 1.
-
-off
- Turns off pipeline for a specific loop or function. This can
be used when
config_compile -pipeline_loops
is used to 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 Flushing Pipelines. 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 a flushable pipeline is not required. For example, when there are no performance or deadlock issue due to stalls.
-
flp
- This option defines the pipeline as a flushable pipeline as described in Flushing Pipelines. This type of pipeline typically consumes more resources and/or can have a larger II because resources cannot be shared 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 is a hint not a hard constraint. The tool checks design conditions for enabling pipelining. Some loops might not conform to a particular style and the tool reverts to the default style (stp
) if necessary. -
Examples
Function foo
is pipelined with
an initiation interval of 1.
set_directive_pipeline foo