Description
Compile (syn.compile.* / config_compile)
Controls synthesis compilation behavior, pipelining thresholds, and math optimizations.
Syntax
| 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