Cheat Sheet

Genus & DC Synthesis Commands

Complete Tcl command reference for Cadence Genus and Synopsys Design Compiler (dc_shell) — setup, elaborate, compile, all reports, netlist output, and full flow scripts. Copy-ready.

2
Tools Covered
60+
Commands
8
Categories
2
Full Flow Scripts
Complete Genus Synthesis Flow
Run order: read_libs → read_hdl → elaborate → read_sdc → syn_generic → syn_map → syn_opt → reports → write_hdl
TCL — genus_flow.tcl
# ── 1. Library Setup ────────────────────────────────────────
set_db init_lib_search_path  "/tech/libs /tech/lef"
set_db init_hdl_search_path  "/src/rtl"
set_db library               {slow.lib fast.lib}
set_db lef_library            {tech.lef cells.lef}

# ── 2. Read RTL ──────────────────────────────────────────────
read_hdl -language verilog    top.v sub_a.v sub_b.v

# ── 3. Elaborate ─────────────────────────────────────────────
elaborate                     top_module
check_design -all
check_timing_intent -verbose

# ── 4. Constraints ───────────────────────────────────────────
read_sdc                      constraints.sdc

# ── 5. Synthesis ─────────────────────────────────────────────
set_db syn_global_effort      high
syn_generic
syn_map
syn_opt

# ── 6. Reports ───────────────────────────────────────────────
report_timing                 > reports/timing.rpt
report_qor                    > reports/qor.rpt
report_area                   > reports/area.rpt
report_power                  > reports/power.rpt

# ── 7. Output ────────────────────────────────────────────────
write_hdl                     > outputs/netlist.v
write_sdc                     > outputs/constraints_out.sdc
write_sdf                     > outputs/timing.sdf
Library & Environment Setup
CommandExampleDescription
set_db init_lib_search_pathset_db init_lib_search_path "/tech/libs"Directory where Genus searches for .lib / .lef files
set_db init_hdl_search_pathset_db init_hdl_search_path "/src/rtl"Directory where Genus searches for HDL source files
set_db libraryset_db library {slow.lib fast.lib}Target technology library files (.lib)
set_db lef_libraryset_db lef_library {tech.lef std_cells.lef}LEF files for physical cell dimensions
set_db qrc_tech_fileset_db qrc_tech_file tech.tchQRC tech file for RC parasitic extraction
set_db common_uiset_db common_ui falseRun in legacy (non-unified) UI mode — required for some older scripts
report_libsreport_libsList all loaded libraries and their attributes
Reading RTL & Elaboration
CommandExampleDescription
read_hdlread_hdl -language verilog top.v sub.vRead Verilog/VHDL source files. Builds elaboration database
read_hdl -svread_hdl -sv design.svRead SystemVerilog files explicitly
read_hdl -vhdlread_hdl -vhdl design.vhdRead VHDL files
elaborateelaborate top_moduleElaborate the top-level design — resolves hierarchy and parameters
elaborate -parameterselaborate top -parameters {WIDTH 8}Elaborate with parameter override
check_design -allcheck_design -allRun all design rule checks — reports undriven nets, unresolved refs
check_timing_intentcheck_timing_intent -verboseVerify SDC constraints are complete and consistent
Timing Constraints (SDC)
Best practice: Use read_sdc to load an external .sdc file rather than writing constraints inline — keeps scripts maintainable and reusable across tools.
CommandExampleDescription
read_sdcread_sdc constraints.sdcLoad SDC timing constraint file (recommended)
create_clockcreate_clock -period 5 -name clk [get_ports clk]Define a clock — 5 ns = 200 MHz
create_generated_clockcreate_generated_clock -divide_by 2 -source clk clk_div2Define a derived clock from an existing clock
set_input_delayset_input_delay -clock clk -max 1.5 [all_inputs]Input arrival time relative to clock edge (setup)
set_output_delayset_output_delay -clock clk -max 1.0 [all_outputs]Output required time relative to clock edge (setup)
set_clock_uncertaintyset_clock_uncertainty -setup 0.1 [get_clocks clk]Add clock jitter / margin to timing analysis
set_clock_transitionset_clock_transition 0.05 [get_clocks clk]Set clock edge transition time
set_dont_touchset_dont_touch [get_cells u_clk_buf]Prevent optimization of specific cell/net
set_dont_useset_dont_use [get_lib_cells */SLOW*]Exclude specific library cells from synthesis
set_false_pathset_false_path -from [get_ports rst]Mark path as non-timing-critical (async reset, test)
set_multicycle_pathset_multicycle_path 2 -setup -from [get_cells u_slow*]Relax timing on paths that take multiple cycles
set_max_fanoutset_db [get_designs top] .max_fanout 16Limit fanout — prevents excessive net loading
Synthesis Execution
CommandExampleDescription
syn_genericsyn_genericTechnology-independent optimization — converts RTL to Boolean logic
syn_generic -physicalsyn_generic -physicalGeneric with physical awareness (needs floorplan DEF)
syn_mapsyn_mapTechnology mapping — maps generic logic to library cells
syn_optsyn_optPost-map optimization — fixes timing, reduces area, improves TNS
syn_opt -incrsyn_opt -incrIncremental optimization — faster, targets only violating paths
syn_opt -spatialsyn_opt -spatialPhysically-aware optimization using location data
synthesize -to_mappedsynthesize -to_mapped -effort highRun full synthesis flow (generic+map+opt) in one command
set_db syn_global_effortset_db syn_global_effort highSet effort level: low / medium / high
set_db syn_generic_effortset_db syn_generic_effort highEffort for syn_generic stage specifically
set_db syn_map_effortset_db syn_map_effort highEffort for technology mapping stage
set_db syn_opt_effortset_db syn_opt_effort highEffort for post-map optimization stage
set_db tns_optoset_db tns_opto trueEnable Total Negative Slack optimization (fixes more paths)
ungroupungroup -all -flattenFlatten hierarchy for better cross-boundary optimization
group_pathgroup_path -name critical -weight 5 -critical_range 0.5Group paths for targeted optimization effort
TCL — high-effort incremental
# Initial synthesis
set_db syn_global_effort high
set_db tns_opto true
syn_generic
syn_map
syn_opt

# If timing still fails — incremental pass
syn_opt -incr
report_timing -nworst 5
Reports & Analysis
CommandExampleDescription
report_timingreport_timing > timing.rptShow worst setup timing path with slack
report_timing -nworstreport_timing -nworst 10Show N worst timing paths
report_timing -holdreport_timing -hold -nworst 5Show worst hold timing paths
report_timing -from -toreport_timing -from u_ctrl/state_reg -to u_out/dReport specific start-to-endpoint path
report_qorreport_qor > qor.rptQuality of Results: WNS, TNS, area, logic levels — first check after synthesis
report_areareport_area -hier > area.rptArea breakdown by module hierarchy
report_powerreport_power -hier > power.rptDynamic + leakage power per module
report_gatesreport_gates -hierCell count and gate types per module
report_clock_gatingreport_clock_gatingClock gating statistics — ICG cell count
report_dpreport_dpDatapath component inference report (multipliers, adders)
report_unitsreport_unitsTime/capacitance/resistance units in current design
report_design_rulesreport_design_rulesDRC violations: max fanout, max transition, max cap
report_messagesreport_messages -category WARNINGShow tool warnings/errors from synthesis run
Netlist & Output
CommandExampleDescription
write_hdlwrite_hdl > netlist.vWrite gate-level Verilog netlist
write_hdl -genericwrite_hdl -generic > generic.vWrite post-generic (pre-map) netlist
write_sdcwrite_sdc > out.sdcWrite back-annotated SDC constraints
write_sdfwrite_sdf > timing.sdfWrite Standard Delay Format — used for gate-level sim
write_dbwrite_db -all_root_attributes design.dbSave full Genus design checkpoint for restore
read_dbread_db design.dbRestore a saved Genus checkpoint
write_do_lecwrite_do_lec > lec.doGenerate Conformal LEC script for equivalence check
write_dft_atpgwrite_dft_atpg -library atpg_libWrite DFT netlist for Modus ATPG
DFT Commands
CommandExampleDescription
check_dft_rulescheck_dft_rules -verboseCheck design for DFT rule violations before scan insertion
define_scan_chaindefine_scan_chain chain1 -head scan_in -tail scan_outDefine scan chain routing
connect_scan_chainsconnect_scan_chains -auto_create_chainsAutomatically connect scan chains
report_scan_setupreport_scan_setupReport scan chain configuration
set_db dft_scan_styleset_db dft_scan_style muxed_scanSet scan style: muxed_scan / lssd / clocked_scan
Complete DC Synthesis Flow
DC mode: Run dc_shell -f flow.tcl or start dc_shell interactively. Use dc_shell-t for Tcl-only mode (recommended for scripting).
TCL — dc_flow.tcl
# ── 1. Library Setup ────────────────────────────────────────
set_app_var search_path      ". /tech/db /tech/lef"
set_app_var target_library   "slow.db"
set_app_var link_library     "* $target_library"
set_app_var symbol_library   "generic.sdb"

# ── 2. Read & Elaborate ──────────────────────────────────────
analyze -format verilog       {top.v sub_a.v sub_b.v}
elaborate                     top_module
current_design                top_module
link
uniquify
check_design

# ── 3. Constraints ───────────────────────────────────────────
source                        constraints.tcl
# OR
create_clock -period 5        [get_ports clk]
set_input_delay  -clock clk -max 1.5  [all_inputs]
set_output_delay -clock clk -max 1.0  [all_outputs]

# ── 4. Synthesis ─────────────────────────────────────────────
compile_ultra -no_autoungroup

# ── 5. Reports ───────────────────────────────────────────────
report_timing -transition_time -nets -attributes -nosplit \
              > reports/timing.rpt
report_qor                    > reports/qor.rpt
report_area  -nosplit -hier    > reports/area.rpt
report_power -nosplit -hier    > reports/power.rpt

# ── 6. Output ────────────────────────────────────────────────
write -format verilog -hier   -output outputs/netlist.v
write -format ddc     -hier   -output outputs/design.ddc
write_sdc                     outputs/constraints_out.sdc
exit
Library & Environment Setup
CommandExampleDescription
set_app_var search_pathset_app_var search_path ". /tech/db"Directories DC searches for library .db files
set_app_var target_libraryset_app_var target_library "slow.db"Standard cell library used for synthesis (must be .db format)
set_app_var link_libraryset_app_var link_library "* $target_library"Libraries for linking. The * includes already-loaded designs
set_app_var symbol_libraryset_app_var symbol_library "generic.sdb"Symbol library for Design Vision schematic view
define_design_libdefine_design_lib WORK -path "./work"Set working directory for compiled design objects
list_liblist_libList all currently loaded libraries
report_libreport_lib slow.dbShow library details — cells, timing arcs, operating conditions
Reading RTL & Elaboration
CommandExampleDescription
analyzeanalyze -format verilog {top.v sub.v}Parse and analyze RTL files — preferred over read_verilog
read_verilogread_verilog top.vRead Verilog files directly (alternative to analyze+elaborate)
read_vhdlread_vhdl design.vhdRead VHDL source files
read_ddcread_ddc design.ddcRead a previously saved DDC checkpoint
elaborateelaborate top_moduleBuild design hierarchy and resolve all references
elaborate -parameterselaborate top -parameters {WIDTH=8}Elaborate with parameter override
current_designcurrent_design top_moduleSet active design context for all subsequent commands
linklinkResolve all submodule references against loaded libraries
uniquifyuniquifyCreate unique copies of multiply-instantiated modules
check_designcheck_designValidate design — reports undriven ports, unknown references
Timing Constraints (SDC)
CommandExampleDescription
create_clockcreate_clock -period 5 -name clk [get_ports clk]Define clock — 5 ns period (200 MHz)
create_generated_clockcreate_generated_clock -divide_by 2 -source clk [get_pins div_reg/Q]Define divided/gated clock
set_clock_uncertaintyset_clock_uncertainty -setup 0.15 [all_clocks]Add jitter/skew margin to setup analysis
set_clock_transitionset_clock_transition 0.08 [all_clocks]Model clock edge slew rate
set_input_delayset_input_delay -clock clk -max 1.5 [all_inputs]Input arrival time (setup). Use -min for hold
set_output_delayset_output_delay -clock clk -max 1.0 [all_outputs]Output required time (setup). Use -min for hold
set_loadset_load 0.05 [all_outputs]Set output load capacitance in pF
set_driving_cellset_driving_cell -lib_cell BUFX4 [all_inputs]Model input drive strength
set_max_fanoutset_max_fanout 20 [current_design]Limit net fanout — triggers buffering
set_max_transitionset_max_transition 0.5 [current_design]Max signal slew constraint (ns)
set_max_capacitanceset_max_capacitance 0.5 [current_design]Max net capacitance constraint
set_dont_touchset_dont_touch [get_cells u_clk_buf]Preserve specific cell — no optimization allowed
set_dont_useset_dont_use [get_lib_cells */SLOW*]Ban specific cells from synthesis mapping
set_false_pathset_false_path -from [get_ports async_rst]Remove async reset / test path from timing analysis
set_multicycle_pathset_multicycle_path 2 -setup -to [get_cells u_slow*]Allow path to take 2 clock cycles
set_case_analysisset_case_analysis 0 [get_ports test_mode]Fix signal value for timing analysis (e.g. test_mode=0 in normal)
read_sdcread_sdc constraints.sdcLoad complete SDC file (preferred for complex designs)
Synthesis & Compilation
CommandExampleDescription
compilecompileStandard synthesis with basic optimization
compile -map_effort highcompile -map_effort high -area_effort mediumHigh-effort mapping with medium area focus
compile_ultracompile_ultraAggressive optimization: retiming, datapath opt, better TNS
compile_ultra -no_autoungroupcompile_ultra -no_autoungroupPreserve hierarchy — prevents automatic flattening
compile_ultra -gate_clockcompile_ultra -gate_clockEnable automatic clock gating insertion
compile_ultra -retimecompile_ultra -retimeEnable register retiming for better timing
compile_ultra -area_high_effort_optocompile_ultra -area_high_effort_optoAggressive area recovery after timing closure
compile -incremental_mappingcompile -incremental_mapping -only_design_ruleIncremental compile — only fix DRC violations
optimize_netlist -areaoptimize_netlist -areaPost-compile area optimization without timing regression
ungroupungroup -all -flattenFlatten hierarchy for cross-boundary optimization
group_pathgroup_path -name reg2out -from [all_registers] -to [all_outputs]Group paths for targeted effort allocation
TCL — compile strategies
# Strategy 1: Safe — preserve hierarchy
compile_ultra -no_autoungroup

# Strategy 2: Aggressive timing closure
compile_ultra -retime -no_autoungroup
compile -incremental_mapping -only_design_rule

# Strategy 3: Area focused (after timing met)
compile_ultra -no_autoungroup -area_high_effort_opto
optimize_netlist -area

# Strategy 4: Fully flattened (small designs)
ungroup -all -flatten
compile_ultra
Reports & Analysis
CommandExampleDescription
report_timingreport_timing -trans -nets -attr -nosplitCritical path with transition times, net names, and attributes
report_timing -delay maxreport_timing -delay max -nworst 10 -nosplitTop 10 worst setup paths
report_timing -delay minreport_timing -delay min -nworst 5 -nosplitTop 5 worst hold paths
report_timing -from -toreport_timing -from FF_A/Q -to FF_B/D -nosplitPath between specific points
report_qorreport_qor > syn.qorWNS, TNS, violating paths, area, levels — first check after compile
report_areareport_area -nosplit -hier > area.rptHierarchical area breakdown in cell count and µm²
report_powerreport_power -nosplit -hier > power.rptDynamic + leakage power per module
report_cellreport_cell > cells.rptList all instantiated cells with reference library
report_netreport_net > nets.rptList all nets with driver/load information
report_constraintreport_constraint -all_violatorsList all constraint violations (timing + DRC)
report_design_rulesreport_design_rules -nosplitMax fanout, max transition, max capacitance violations
report_clockreport_clockAll defined clocks, periods, and waveforms
report_path_groupreport_path_groupList all path groups and their weights
all_violatorsreport_timing [all_violators]Report timing on all violating endpoints
Netlist & Output
CommandExampleDescription
write -format verilogwrite -format verilog -hier -output netlist.vWrite hierarchical gate-level Verilog netlist
write -format ddcwrite -format ddc -hier -output design.ddcSave DDC checkpoint — opens in Design Vision
write_sdcwrite_sdc -nosplit output.sdcWrite back-annotated SDC constraints
write_sdfwrite_sdf -version 2.1 timing.sdfWrite Standard Delay Format for gate-level simulation
write_scriptwrite_script -format tcl -output design.tclWrite all applied constraints as a Tcl script
save_upfsave_upf design.upfSave power intent (UPF) from the current design
write_test_modelwrite_test_model -output atpg.vWrite test model for Tetramax ATPG
Useful Object Queries
TCL — dc_shell queries
# Get all flip-flops
get_cells -hier -filter "is_sequential == true"

# Count total flip-flops
llength [get_cells -hier -filter "is_sequential == true"]

# Get all clock gating cells
get_cells -hier -filter "is_clock_gating_cell == true"

# Find all violating timing endpoints
report_timing -delay max [all_violators]

# Get all paths between two modules
report_timing -from [get_cells u_ctrl/*] \
              -to   [get_cells u_dp/*]

# Check for unclocked registers
foreach_in_collection reg [all_registers] {
  if { [get_attribute $reg clocks] == {} } {
    echo "Unclocked: [get_attribute $reg full_name]"
  }
}

# Report worst slack per path group
report_timing -group [get_path_groups]
Genus vs DC — Equivalent Commands
Both tools use industry-standard SDC constraints (create_clock, set_input_delay, etc.) — the constraint syntax is identical. The main differences are in library setup, synthesis execution, and reporting.
OperationCadence GenusSynopsys DC
Set library pathset_db init_lib_search_path "/path"set_app_var search_path "/path"
Set target libraryset_db library {slow.lib}set_app_var target_library "slow.db"
Read Verilogread_hdl -language verilog top.vanalyze -format verilog top.v
Elaborateelaborate topelaborate top; link; uniquify
Check designcheck_design -allcheck_design
Load constraintsread_sdc constraints.sdcread_sdc constraints.sdc
Generic synthesissyn_generic(part of compile)
Technology mapsyn_map(part of compile)
Full compilesynthesize -to_mapped -effort highcompile_ultra -no_autoungroup
Incremental optsyn_opt -incrcompile -inc -only_design_rule
Set effortset_db syn_global_effort highcompile_ultra (always high)
TNS optimizationset_db tns_opto trueset_cost_priority -delay (default)
Flatten hierarchyungroup -all -flattenungroup -all -flatten
Timing reportreport_timingreport_timing -trans -nets -nosplit
QoR reportreport_qorreport_qor
Area reportreport_area -hierreport_area -nosplit -hier
Power reportreport_power -hierreport_power -nosplit -hier
Write netlistwrite_hdl > netlist.vwrite -format verilog -hier -out netlist.v
Write SDCwrite_sdc > out.sdcwrite_sdc out.sdc
Write SDFwrite_sdf > timing.sdfwrite_sdf timing.sdf
Save checkpointwrite_db design.dbwrite -format ddc -hier -out design.ddc
Restore checkpointread_db design.dbread_ddc design.ddc
Don't touchset_dont_touch [get_cells u_buf]set_dont_touch [get_cells u_buf]
Don't use cellsset_dont_use [get_lib_cells */SLOW*]set_dont_use [get_lib_cells */SLOW*]
False pathset_false_path -from [get_ports rst]set_false_path -from [get_ports rst]
Multicycle pathset_multicycle_path 2 -setup -to ...set_multicycle_path 2 -setup -to ...
Exit toolexitexit
Key Differences to Remember
Library format: Genus uses .lib files directly. DC requires .db (compiled binary) format — convert with lc_shell: read_lib + write_lib
Synthesis steps: Genus exposes three explicit steps (syn_generic / syn_map / syn_opt). DC bundles these inside compile/compile_ultra — you don't call them separately.
compile_ultra -no_autoungroup: Always use this flag unless you intentionally want DC to flatten your hierarchy. Without it, DC may silently ungroup modules and break downstream flows.
Genus set_db vs DC set_app_var: Genus uses set_db for most settings. DC uses set_app_var for application variables and set_attribute for design object attributes. They are not interchangeable.
SDC is identical: create_clock, set_input_delay, set_output_delay, set_false_path, set_multicycle_path — these are industry-standard SDC and work the same in both tools.
Incremental flow: After initial compile, use syn_opt -incr (Genus) or compile -inc (DC) for fast targeted fixes — much faster than re-running full synthesis.
Frequently Asked Questions
What is the difference between syn_generic, syn_map, and syn_opt in Genus?
syn_generic converts RTL to technology-independent Boolean logic (GTECH). syn_map maps that generic logic onto actual library cells from your technology. syn_opt does incremental post-map optimization — fixing timing, reducing area, improving TNS. You can run them in sequence or use synthesize -to_mapped to execute all three in one call.
What is the difference between compile and compile_ultra in DC?
compile performs standard synthesis. compile_ultra enables more aggressive algorithms: register retiming, advanced datapath optimization, and better TNS reduction. Always use compile_ultra -no_autoungroup to prevent DC from automatically flattening your hierarchy — without this flag, DC may silently destroy your module boundaries.
What does report_qor show and why is it important?
report_qor is the one-stop Quality of Results summary: Worst Negative Slack (WNS), Total Negative Slack (TNS), number of violating paths, total cell area, estimated wire length, and critical path logic levels. It's the first report you check after synthesis — WNS tells you the worst path, TNS tells you how much total work remains to close timing.
How do I write a gate-level netlist in Genus vs DC?
Genus: write_hdl > netlist.v. DC: write -format verilog -hierarchy -output netlist.v. Always export the SDC alongside it (write_sdc) so downstream STA (PrimeTime) and P&R (Innovus/ICC2) tools use the same timing intent.
What is the difference between set_dont_touch and set_dont_use?
set_dont_touch prevents the tool from modifying a specific cell instance or net already in the design — used for manually-placed clock buffers, test logic, etc. set_dont_use prevents the tool from picking certain library cell types when creating new logic — used to exclude cells with high leakage, cells not characterized for your corner, or cells incompatible with DFT rules.
Why does Genus need .lib files but DC needs .db files?
Genus can read Liberty (.lib) text format directly. Synopsys DC requires .db (Design Compiler binary database) format for faster loading. Convert .lib to .db using lc_shell: read_lib slow.lib; write_lib slow_lib -format db -output slow.db. Some foundry kits provide both formats; if only .lib is given, you need to compile it first.

© EcrioniX. All rights reserved.