RTL - RTL - 2026.1 English - UG1399

Vitis High-Level Synthesis User Guide (UG1399)

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

Description

RTL (syn.rtl.* / config_rtl)

Controls RTL generation, reset behavior, FSM encoding, and profiling features.

Note: cosim_trace_generation maps to syn.rtl.cosim_trace_generation in the config file, but its Tcl equivalent is config_export -cosim_trace_generation (not config_rtl).

Syntax

Table 1. Configuration Table
Option Config File Tcl Default Type/Values Description
deadlock_detection syn.rtl.deadlock_detection=[none|sim|hw|hw_diagnosis] config_rtl -deadlock_detection [none|sim|hw|hw_diagnosis] sim enum Deadlock detection: none = disabled; sim = simulation/emulation only (default); hw = enabled in synthesized RTL IP, adds ap_local_deadlock and ap_local_block signals; hw_diagnosis = hardware detection with additional diagnosis logic in generated RTL.
deadlock_diagnosis syn.rtl.deadlock_diagnosis=true config_rtl -deadlock_diagnosis bool Enable detailed deadlock diagnosis output.
fsm_encoding syn.rtl.fsm_encoding=[auto|gray|johnson|one_hot|sequential|none] config_rtl -fsm_encoding [auto|gray|johnson|one_hot|sequential|none] enum FSM state encoding style. auto: tool chooses; none: binary.
fsm_safe_state syn.rtl.fsm_safe_state=[auto_safe_state|reset_state|power_on_state|default_state|none] config_rtl -fsm_safe_state [auto_safe_state|reset_state|power_on_state|default_state|none] none enum State to recover to on illegal FSM state. auto_safe_state = Hamming-3 encoding; reset_state = return to RESET state; power_on_state = return to POWER_ON state; default_state = return to default state; none = no safe state logic (attribute not added to RTL). May reduce performance and increase area.
header syn.rtl.header=<file> config_rtl -header <file> path Header comment file prepended to all generated RTL files.
kernel_profile syn.rtl.kernel_profile=true config_rtl -kernel_profile 0 bool Enable kernel profiling counters in generated RTL.
module_auto_prefix syn.rtl.module_auto_prefix=true config_rtl -module_auto_prefix 1 bool Automatically prefix all RTL module names to avoid name collisions.
module_prefix syn.rtl.module_prefix=<prefix> config_rtl -module_prefix <s> string Custom prefix string for all generated RTL module names.
mult_keep_attribute syn.rtl.mult_keep_attribute=true config_rtl -mult_keep_attribute 0 bool Add keep attributes to multiplier outputs to prevent synthesis optimization.
register_all_io syn.rtl.register_all_io=true config_rtl -register_all_io 0 bool Register all top-level I/O ports.
register_reset_num syn.rtl.register_reset_num=<N> config_rtl -register_reset_num <N> 0 int Number of pipeline stages for reset signal fanout (reduces reset timing pressure).
reset syn.rtl.reset=[none|control|state|all] config_rtl -reset [none|control|state|all] control enum Which signals to reset: none, control (control logic only), state (state registers), all.
reset_async syn.rtl.reset_async=true config_rtl -reset_async 0 bool Use asynchronous reset instead of synchronous reset.
reset_level syn.rtl.reset_level=[high|low] config_rtl -reset_level [high|low] high enum Active level for reset signal: high (active-high, default) or low (active-low).
Tip: reset_level: The AXI protocol requires an active-Low reset. If your design uses AXI interfaces, the tool will define this reset level with a warning if config_rtl -reset_level is active-High. Set -reset_level low for AXI designs.

Usage


ini
[hls]
syn.rtl.reset=state
syn.rtl.reset_level=low
syn.rtl.fsm_encoding=one_hot
syn.rtl.module_prefix=myproj_

tcl
config_rtl -reset state -reset_level low -fsm_encoding one_hot -module_prefix myproj_

Examples


tcl
# Configure all registers to use an asynchronous active-Low reset:
config_rtl -reset all -reset_async -reset_level low

# Add a header comment from file to all output RTL files:
config_rtl -header my_message.txt