Every command, option and example on this page is checked against the engines' command table when the docs are built. Commands are grouped by the engine you will usually run them in; the common commands work in all three.
Common: design, library and constraints
These commands work in all three engines.
set_pdk
Select a process kit profile (for example sky130).
set_pdk <key>set_pdk sky130read_builtin_lib
Load the built-in standard-cell library for a process kit.
read_builtin_lib <pdk>read_builtin_lib sky130read_verilog
Read Verilog RTL or a gate-level netlist.
read_verilog <file.v>read_verilog design.vread_liberty
Read a Liberty cell library.
read_liberty <file.lib>read_liberty my_cells.libread_lef
Read LEF technology and cell geometry.
read_lef <file.lef>read_lef sky130_fd_sc_hd.lefread_sdc
Read constraints from an SDC file.
read_sdc <file.sdc>read_sdc constraints.sdcset_top_module
Set the top-level module.
set_top_module <name>set_top_module topcreate_clock
Define a clock and its period in picoseconds.
create_clock -name <n> -period <ps> [get_ports <port>]| Option | Meaning |
|---|---|
-name <n> | Clock name |
-period <ps> | Clock period in picoseconds |
create_clock -name clk -period 2000 [get_ports clk]create_generated_clock
Define a clock derived from another, such as a divider output.
create_generated_clock -name <n> -source <clk> [-divide_by <N>] [-multiply_by <M>] [-invert] [get_ports <port>]| Option | Meaning |
|---|---|
-name <n> | Clock name |
-source <clk> | Master clock |
-divide_by <N> | Divide the master frequency |
-multiply_by <M> | Multiply the master frequency |
-invert | Invert the generated clock |
create_generated_clock -name clk_div2 -source clk -divide_by 2 [get_ports clk_div2]set_input_delay
Set the arrival time of input ports relative to a clock.
set_input_delay -max <ps> -clock <clk> [get_ports <p>]| Option | Meaning |
|---|---|
-max <ps> | Delay in picoseconds |
-clock <clk> | Reference clock |
set_input_delay -max 200 -clock clk [all_inputs]set_output_delay
Set the required time of output ports relative to a clock.
set_output_delay -max <ps> -clock <clk> [get_ports <p>]| Option | Meaning |
|---|---|
-max <ps> | Delay in picoseconds |
-clock <clk> | Reference clock |
set_output_delay -max 200 -clock clk [all_outputs]set_clock_uncertainty
Add clock uncertainty (jitter and skew margin) in picoseconds.
set_clock_uncertainty <ps> [get_clocks <clk>] [-setup] [-hold]| Option | Meaning |
|---|---|
-setup | Apply to setup checks only |
-hold | Apply to hold checks only |
set_clock_uncertainty 50 [get_clocks clk]set_false_path
Exclude paths from timing analysis.
set_false_path [-from <f>] [-to <t>]| Option | Meaning |
|---|---|
-from <f> | Start points |
-to <t> | End points |
set_false_path -from [get_ports rst_n]set_multicycle_path
Allow a path more than one clock cycle.
set_multicycle_path <n> [-from <f>] [-to <t>]| Option | Meaning |
|---|---|
-from <f> | Start points |
-to <t> | End points |
set_multicycle_path 2 -from [get_cells u_div*]set_clock_groups
Declare clocks that are asynchronous to each other.
set_clock_groups -asynchronous -group {clks} -group {clks}| Option | Meaning |
|---|---|
-asynchronous | The groups never time against each other |
-group {clks} | One group of clocks; repeat for each group |
set_clock_groups -asynchronous -group {clk_a} -group {clk_b}set_driving_cell
Model the cell that drives input ports.
set_driving_cell -lib_cell <cell> [get_ports <port>]| Option | Meaning |
|---|---|
-lib_cell <cell> | Library cell that drives the port |
set_driving_cell -lib_cell sky130_fd_sc_hd__buf_2 [get_ports din]set_load
Set the capacitive load on output ports, in femtofarads.
set_load <fF> [get_ports <port>]set_load 5 [get_ports dout]write_sdc
Write the active constraints to an SDC file.
write_sdc [file.sdc]write_sdc design.sdchelp
Show help for one command or list all commands.
help [command]help create_clockagni: synthesis
elaborate
Build the design hierarchy from the top module and report its size.
elaborate [<top_module>]elaborate topcheck_design
Check for undriven wires, floating outputs, latches, multi-driven nets and missing constraints.
check_designcheck_designcompile
Run standard-effort synthesis.
compile [-incremental]| Option | Meaning |
|---|---|
-incremental | Reoptimise the current netlist without starting over |
compilecompile_ultra
Run high-effort synthesis.
compile_ultra [-no_retime] [-physical]| Option | Meaning |
|---|---|
-no_retime | Do not move registers |
-physical | Use placement-aware optimisation |
compile_ultraoptimize_logic
Run technology-independent logic optimisation on its own.
optimize_logic [-no_const_prop] [-no_dce] [-no_cse] [-passes <n>]| Option | Meaning |
|---|---|
-no_const_prop | Skip constant propagation |
-no_dce | Skip dead-code removal |
-no_cse | Skip shared-subexpression removal |
-passes <n> | Number of passes |
optimize_logic -passes 2insert_clock_gates
Replace enable multiplexers in front of registers with clock-gating cells.
insert_clock_gates [-cell <icg_cell>] [-dry_run]| Option | Meaning |
|---|---|
-cell <icg_cell> | Clock-gating cell to use |
-dry_run | List candidates without changing the netlist |
insert_clock_gates -dry_runinsert_scan
Replace flip-flops with scan flip-flops and stitch them into a scan chain.
insert_scaninsert_scanset_golden
Save the current design as the reference for the equivalence check.
set_goldenset_goldenrun_lec
Check the current netlist against the saved reference.
run_lecrun_lecreport_area
Report cell area.
report_areareport_areareport_qor
Report a quality-of-results summary.
report_qorreport_qorreport_power
Estimate leakage, internal and switching power.
report_power [-activity <α>] [-voltage <V>] [-temp <C>]| Option | Meaning |
|---|---|
-activity <a> | Switching activity factor |
-voltage <V> | Supply voltage |
-temp <C> | Temperature in degrees Celsius |
report_power -activity 0.2report_registers
List every flip-flop and latch.
report_registersreport_registerswrite_verilog
Write the gate-level netlist.
write_verilog [file.v]write_verilog design_net.vsutra: place and route
run_flow
Run synthesis, floorplan, placement, clock tree, routing and timing in one command, using the loaded design and constraints.
run_flowrun_flowinit_floorplan
Create the die, core and placement rows.
init_floorplan [-utilization <f>] [-die_width <w>] [-die_height <h>]| Option | Meaning |
|---|---|
-utilization <f> | Target core utilization, from 0 to 1 |
-die_width <w> | Die width in micrometres |
-die_height <h> | Die height in micrometres |
init_floorplan -utilization 0.6create_power_plan
Create the VDD and VSS rings and stripes.
create_power_plan [-ring_width <µm>] [-stripe_width <µm>] [-stripe_pitch <µm>] [-ring_layer <n>] [-stripe_layer <n>] [-nets <VDD VSS>]| Option | Meaning |
|---|---|
-ring_width <um> | Ring width |
-stripe_width <um> | Stripe width |
-stripe_pitch <um> | Distance between stripes |
-ring_layer <n> | Metal layer for the rings |
-stripe_layer <n> | Metal layer for the stripes |
-nets <VDD VSS> | Power and ground net names |
create_power_plan -ring_width 2.0 -stripe_width 1.0 -stripe_pitch 10.0insert_tap_cells
Place well-tap cells across every row on a fixed pitch.
insert_tap_cells [-cell <tapcell>] [-endcap <cell>] [-distance <um>] [-no_alternate] [-prefix <pfx>]| Option | Meaning |
|---|---|
-cell <tapcell> | Tap cell to use |
-endcap <cell> | End-cap cell for the row ends |
-distance <um> | Tap pitch in micrometres |
-no_alternate | Do not offset alternate rows |
-prefix <pfx> | Instance name prefix |
insert_tap_cells -distance 13place_design
Place the standard cells (routability-driven by default) and legalize them.
place_design [-effort <1-3>] [-seed <n>]| Option | Meaning |
|---|---|
-effort <1-3> | Placement effort |
-seed <n> | Random seed, for reproducible runs |
place_design -effort 2place_opt
Place the design, then optimise timing.
place_opt [-effort <1-3>]| Option | Meaning |
|---|---|
-effort <1-3> | Placement effort |
place_optclock_tree_synthesis
Build and buffer the clock tree.
clock_tree_synthesisclock_tree_synthesisoptimize_cts
Balance the clock tree after it is built.
optimize_cts [-max_skew <ps>] [-max_latency <ps>] [-verbose]| Option | Meaning |
|---|---|
-max_skew <ps> | Skew target |
-max_latency <ps> | Latency limit |
-verbose | Print details |
optimize_cts -max_skew 80route_design
Run global and detailed routing.
route_design [-layers <n>] [-max_ripup <n>] [-no_detail]| Option | Meaning |
|---|---|
-layers <n> | Number of routing layers to use |
-max_ripup <n> | Rip-up and reroute iterations |
-no_detail | Stop after global routing |
route_designoptimize_route
Reroute congested nets after routing.
optimize_route [-iters <n>] [-overflow_threshold <f>] [-verbose]| Option | Meaning |
|---|---|
-iters <n> | Iterations |
-overflow_threshold <f> | Overflow level that triggers a reroute |
-verbose | Print details |
optimize_route -iters 5optimize_vias
Add redundant via cuts on critical routes.
optimize_vias [-max_vias <n>] [-verbose]| Option | Meaning |
|---|---|
-max_vias <n> | Maximum vias to change |
-verbose | Print details |
optimize_viascheck_antenna
Report nets that exceed the per-layer antenna ratio limits.
check_antenna [-limit_m1 <r>] [-limit_m2 <r>] [-limit_upper <r>]| Option | Meaning |
|---|---|
-limit_m1 <r> | Ratio limit on metal 1 |
-limit_m2 <r> | Ratio limit on metal 2 |
-limit_upper <r> | Ratio limit on upper layers |
check_antennaopt_design
Optimise timing at a given stage of the flow.
opt_design [-pre_place] [-in_place] [-post_place] [-post_route] [-hold] [-setup]| Option | Meaning |
|---|---|
-pre_place | Before placement |
-in_place | During placement |
-post_place | After placement |
-post_route | After routing |
-setup | Fix setup timing |
-hold | Fix hold timing |
opt_design -post_route -setupinsert_fillers
Fill the gaps between cells with filler and decap cells.
insert_fillers [-cell <type>] [-prefix <pfx>]| Option | Meaning |
|---|---|
-cell <type> | Filler cell to use |
-prefix <pfx> | Instance name prefix |
insert_fillersreport_ir_drop
Estimate supply voltage droop across the die.
report_ir_drop [-vdd <V>] [-grid <n>] [-threshold <mV>] [-freq <MHz>]| Option | Meaning |
|---|---|
-vdd <V> | Supply voltage |
-grid <n> | Analysis grid size |
-threshold <mV> | Report tiles above this drop |
-freq <MHz> | Operating frequency |
report_ir_drop -vdd 1.8report_congestion
Report routing demand against capacity.
report_congestion [-grid <n>] [-layers <n>]| Option | Meaning |
|---|---|
-grid <n> | Analysis grid size |
-layers <n> | Layers to include |
report_congestionextract_parasitics
Extract wire resistance and capacitance from the routes.
extract_parasitics [-effort low|medium|high] [-si | -no_si]| Option | Meaning |
|---|---|
-effort low|medium|high | Extraction effort |
-si | Include crosstalk coupling |
-no_si | Exclude crosstalk coupling |
extract_parasitics -siwrite_def
Write the placed and routed design as DEF.
write_def [file.def]write_def design.defwrite_spef
Write the extracted parasitics as SPEF.
write_spef [file.spef]write_spef design.spefwrite_gds
Write the layout as GDSII.
write_gds [file.gds] [-design <name>]| Option | Meaning |
|---|---|
-design <name> | Top cell name in the GDSII file |
write_gds design.gdswrite_layout_html
Write a self-contained HTML view of the layout.
write_layout_html [file.html]write_layout_html layout.htmlkala: static timing
read_spef
Back-annotate wire parasitics from SPEF.
read_spef <file.spef>read_spef design.spefread_mmmc
Load analysis views (modes and corners) from a view file.
read_mmmc <file.mmmc>read_mmmc views.mmmcupdate_timing
Propagate arrival and required times through the design.
update_timingupdate_timingreport_timing
Report the worst timing paths.
report_timing [-nworst <n>] [-max_paths <n>] [-through <obj>] [-delay min|max]| Option | Meaning |
|---|---|
-nworst <n> | Number of paths to report |
-max_paths <n> | Maximum paths per endpoint |
-through <obj> | Only paths through these nets or pins |
-delay min|max | Report hold (min) or setup (max) paths |
report_timing -delay min -nworst 5report_timing_summary
Report a one-page timing summary.
report_timing_summary [-max_paths <n>]| Option | Meaning |
|---|---|
-max_paths <n> | Paths to include |
report_timing_summaryreport_global_timing
Report WNS and TNS for the whole design.
report_global_timingreport_global_timingreport_wns
Report the worst negative slack.
report_wnsreport_wnsreport_tns
Report the total negative slack.
report_tnsreport_tnsgroup_path
Define a path group for reporting and optimisation.
group_path -name <n> [-from <sp>] [-to <ep>] [-weight <w>] [-critical_range <ps>]| Option | Meaning |
|---|---|
-name <n> | Group name |
-from <sp> | Start points |
-to <ep> | End points |
-weight <w> | Optimisation weight |
-critical_range <ps> | Also optimise paths within this range of the worst |
group_path -name reg2reg -from [all_registers] -to [all_registers]get_path_groups
List the defined path groups.
get_path_groups [<pattern>]get_path_groupsreport_mmmc
Report timing for every mode and corner.
report_mmmc [-verbose]| Option | Meaning |
|---|---|
-verbose | Show the full cross-view table |
report_mmmc -verbosereport_crpr
Apply common clock path pessimism removal and report corrected WNS and TNS.
report_crprreport_crprreport_si
Report crosstalk delay impact.
report_si [-verbose]| Option | Meaning |
|---|---|
-verbose | Print per-net details |
report_sireport_clock_skew
Report clock skew against the target.
report_clock_skew [-clock <clk>]| Option | Meaning |
|---|---|
-clock <clk> | Clock to report |
report_clock_skew