Compile - Compile - 2026.1 English - UG1399

Vitis High-Level Synthesis User Guide (UG1399)

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

Description

Compile (syn.compile.* / config_compile)

Controls synthesis compilation behavior, pipelining thresholds, and math optimizations.

Syntax

Table 1. Configuration Table
Option Config File Tcl Default Type Description
clang_version syn.compile.clang_version=<N> config_compile -clang_version <N> 16 enum: 7|16 Clang frontend version used during compilation.
design_size_maximum_warning syn.compile.design_size_maximum_warning=<N> config_compile -design_size_maximum_warning <N> 100000 int Warn when design exceeds N LUTs.
double_acc_bits syn.compile.double_acc_bits=<N> config_compile -double_acc_bits <N> 269 int Accumulator precision for floating-point type double.
enable_auto_rewind syn.compile.enable_auto_rewind=true config_compile -enable_auto_rewind 1 bool Do not report the long runtime warning.
float_acc_bits syn.compile.float_acc_bits=<N> config_compile -float_acc_bits <N> 45 int Accumulator precision for floating-point type float.
ignore_long_run_time syn.compile.ignore_long_run_time=true config_compile -ignore_long_run_time 0 bool Do not report the long runtime warning.
name_max_length syn.compile.name_max_length=<N> config_compile -name_max_length <N> 256 int Maximum length of function/module names in generated RTL. If longer than the threshold, the last part is truncated and digits are added to ensure uniqueness.
no_signed_zeros syn.compile.no_signed_zeros=true config_compile -no_signed_zeros 0 bool Ignores the signedness of floating-point zero so the compiler can perform aggressive optimizations on floating-point operations. Can cause C/RTL co-simulation mismatch.
performance_budgeter syn.compile.performance_budgeter=[auto|enable|disable] config_compile -performance_budgeter [auto|enable|disable] auto enum Controls automatic performance budgeting across a dataflow region.
pipeline_flush_in_task syn.compile.pipeline_flush_in_task=[always|never|ii1] config_compile -pipeline_flush_in_task [always|never|ii1] ii1 enum Controls pipeline flush (flp) behavior inside hls::tasks to reduce deadlock probability in C/RTL co-simulation. always = always flushable in hls::tasks or dataflow; never = never flushable unless overridden by pragma/directive; ii1 = flushable only when II=1 (default). Note: flp is compatible with pipeline rewind when -enable_auto_rewind is also enabled.
pipeline_loops syn.compile.pipeline_loops=<N> config_compile -pipeline_loops <N> 64 int Specifies the lower limit for automatically pipelining loops. A single un-nested loop is pipelined if its trip count is greater than N. For nested loops, pairs are evaluated from the innermost: if the inner exceeds the threshold it is marked for pipelining, then the parent is checked — if the parent also exceeds the threshold, the parent is pipelined and the inner loop is unrolled into it. Set to 0 to disable.
pipeline_style syn.compile.pipeline_style=[stp|flp|frp] config_compile -pipeline_style [stp|flp|frp] `frp` enum Default pipeline style for PIPELINE pragma/directive and pipeline_loops auto-pipelining: stp (stall pipeline), flp (flushable pipeline), frp (free-running flushable pipeline). This is a hint, not a hard constraint — the tool checks design conditions and reverts to stp if a loop does not conform to the requested style.
pragma_strict_mode syn.compile.pragma_strict_mode=true config_compile -pragma_strict_mode `0` bool Treat unrecognized pragma options as errors instead of warnings.
pre_tcl no config file equivalent config_compile -pre_tcl <script> string Tcl script to source before synthesis compilation begins. Tcl-only; no .cfg equivalent.
unsafe_math_optimizations syn.compile.unsafe_math_optimizations=true config_compile -unsafe_math_optimizations `0` bool Ignores the signedness of floating-point zero and enables associative floating-point operations so the compiler can perform aggressive optimizations. Can cause C/RTL co-simulation mismatch.
use_csim_directives syn.compile_use_csim_directives=true bool Apply C-sim directives during synthesis. Note: uses underscore separator (syn.compile_use_csim_directives), not dot. Tcl-only alternative not available.
Important: no_signed_zeros: Using this option might change the result of any floating-point calculations and result in a mismatch in C/RTL co-simulation. Ensure that your test bench is tolerant of differences and checks for a margin of difference, not exact values.
Note: unsafe_math_optimizations: Using this option might change the result of any floating-point calculations and result in a mismatch in C/RTL co-simulation. Ensure that your test bench is tolerant of differences and checks for a margin of difference, not exact values.

Usage


ini
[hls]
syn.compile.pipeline_loops=64
syn.compile.pipeline_style=frp
syn.compile.pragma_strict_mode=true

tcl
config_compile -pipeline_loops 64 -pipeline_style frp -pragma_strict_mode

Examples

Pipeline the innermost loop with a tripcount higher than 30, or pipeline the parent loop of the innermost loop when its tripcount is less than or equal 30:

config_compile -pipeline_loops 30

Ignore the signedness of floating-point zero:

config_compile -no_signed_zeros

Ignore the signedness of floating-point zero and enable the associative floating-point operations:

config_compile -unsafe_math_optimizations