Cadence Innovus (Legacy UI) · stage 9 of 16

CTS and post-CTS qualification

Sanity checks and commands for clock tree synthesis setup, skew groups, clock DRVs, post-CTS timing, hold fixing, and clock gating coverage.

7 min read · Free, no login

Get Innovus + ICC2 Cheat Sheets at ₹199

This stage covers clock tree synthesis and the post-CTS stage that follows it: confirming CCOpt prerequisites, reviewing the built clock trees and skew groups, checking clock DRVs and NDR routing, legalising cells after CTS, and running post-CTS setup and hold timing through to clock gating coverage.

Sanity check cheat sheet

One row per command card. Read left to right: the check, the command that answers it, then what a healthy result, a result to review and a hard stop look like.

CardCheck and whenCommandHealthyReviewHard stop
S-01 CTS prerequisites and specification
Before ccopt_design
ccopt_design -check_prerequisites
check_design -type cts -out_file <report_file>
get_ccopt_clock_trees
Every functional clock has a clock tree and a skew group, and the checks report no errors. The primary corner is the first setup view by default, which may not be the one you meant. A clock in the constraints has no clock tree, or check_design -type cts reports an error on targets or route types.
S-02 CTS run and log
After ccopt_design
ccopt_design
ccopt_design -cts
report_message -errors -count
The command returns with no errors, and every warning has been read and either fixed or explained. Warnings about dont_touch nets or clock instances that cannot be resized, which can limit skew balancing and clock quality. Any error message, or a run that leaves clocks ideal or clock nets unrouted.
S-03 Clock tree report and clock DRVs
After CTS
report_ccopt_clock_trees -summary
report_ccopt_clock_trees -file <report_file>
report_ccopt_clock_trees -histograms
Each clock tree is present, its sink count matches the design, and every violation count is zero. Fewer sinks than the clock has flops, or violations only on dont_touch or pre-routed nets that CTS may not be able to fix. A clock tree with no sinks, or violations on fixable clock nets beyond your budget.
S-04 Skew groups and insertion delay
After CTS
report_ccopt_skew_groups -summary
report_ccopt_skew_groups -file <report_file>
report_ccopt_skew_groups -summarize_stage_depth {buffer inverter}
Insertion delay and skew of every skew group meet your budget in every corner reported. Skew meets the primary corner but another corner has no target or misses it. A skew group beyond a target that CTS enforces, or a skew group with no active sinks.
S-05 Clock routes, NDR and shielding
After CTS
reportRouteTypeConstraints -summary
reportRouteTypeConstraints -detailed -file <report_file>
report_route -clock
Every net class that asks for an NDR or a shield shows it in the routed result, with adherence you accept. Adherence below 100 percent on a few nets. The preferred layers are soft limits that the router may leave. A clock net with an NDR route type that routed at the default rule, or required shielding that is missing.
S-06 Clock cell legalisation
After CTS
checkPlace <report_file>
checkPlace -inst <instances>
refinePlace
No clock halo violations, and checkPlace reports no violations on clock cells. A message that a clock halo was disabled on a large cell, so the halo you set was not applied. Overlapping or off-grid clock cells, or halo violations that remain after refinement.
S-07 Post-CTS setup timing and propagated clocks
After CTS
timeDesign -postCTS -outDir <dir>
timeDesign -postCTS -expandedViews -outDir <dir>
getAnalysisMode
Setup WNS and TNS meet the budget in every view, and every intended clock is propagated. A large jump in negative slack against pre-CTS timing at clock gating endpoints, where real skew now counts. Setup slack beyond budget on register-to-register paths, or a clock still ideal after CTS.
S-08 Hold timing and hold fixing
After C-07
timeDesign -postCTS -hold -outDir <dir>
optDesign -postCTS -hold -outDir <dir>
optDesign -postCTS -hold -holdVioData <file>
Hold WNS and TNS meet the budget after fixing, and setup WNS is no worse than before. Hold violations left for post-route fixing, or a small setup TNS loss, which hold fixing allows by default. Setup WNS worse after hold fixing, or large hold violations with no fix path shown in the log.
S-09 Analysis coverage and clock gating checks
After C-07
report_analysis_coverage -verbose {violated untested}
report_analysis_coverage -check_type {clock_gating_setup clock_gating_hold} -verbose {violated untested}
report_clock_gating_check
Every untested check has a known, accepted reason, and no clock gating check is violated. A few untested checks whose reasons are constants or disabled arcs, and that you have reviewed. Untested checks that give no clock at a flop that should be clocked, or a violated clock gating check.

Command cheat sheet

Legacy UI commands. Angle brackets are placeholders, and values shown are examples, not project limits.

Before CTS: checks and configuration record
ccopt_design -check_prerequisitesChecks that CTS can run, without doing CTS.
check_design -type cts -out_file <report_file>Checks clock tree definition such as targets and route types. Needs the specification loaded. Writes a file.
get_ccopt_clock_treesThe names of the defined clock trees.
get_ccopt_skew_groupsThe names of the defined skew groups.
get_ccopt_delay_cornerThe primary-half delay corner that CTS uses to balance the trees.
get_ccopt_property primary_delay_cornerThe primary corner you set, or {} if unset; see get_ccopt_delay_corner.
create_ccopt_clock_tree_spec -file <spec_file>Without -file, defines the trees in the session. With -file, only writes a script to load with source. Changes the database.
save_ccopt_config <dir>Writes the CCOpt configuration to a directory, for restore_ccopt_config only. Writes files.
create_route_type -name <type> -non_default_rule <ndr> -top_preferred_layer <layer> -shield_net <net>Defines a route type that binds an NDR, preferred layers and a shield net. Changes the session.
set_ccopt_property -net_type trunk route_type <type>Selects the route type for trunk nets. Changes the CCOpt configuration.
Run CTS
ccopt_designClock tree synthesis with clock concurrent optimization. Changes the database and writes timing reports to ./timingReports.
ccopt_design -ctsClock tree synthesis only, with no datapath optimization or useful skew. Changes the database.
clock_opt_designCCOpt for a place_opt_design V2 database. Legalises placement first; uses -check_cts_config and -out_dir. Changes the database.
ccopt_proRepairs clock DRVs and skew after a routing step. After ccopt_design it also runs earlyGlobalRoute on datapath nets. Changes the database.
Log and messages
report_message -errors -count{ID count} pairs for every error ID since the tool started.
report_message -warnings -count{ID count} pairs for every warning ID since the tool started.
Clock tree reports
report_ccopt_clock_trees -summaryOnly the summary table of all clock trees.
report_ccopt_clock_trees -file <report_file>Per-tree statistics and violation counts. Recalculates timing unless -no_invalidate is given. Writes a file.
report_ccopt_clock_tree_structure -file <report_file>The tree as text: levels, clock gates, macro sinks and the sink count. Timing details only with -update_timing. Writes a file.
report_ccopt_clock_tree_convergence -file <report_file>Convergence above clock sinks, and the sinks with most paths. Writes a file.
Skew groups and insertion delay
report_ccopt_skew_groups -summaryThe skew group tables: insertion delay and skew per corner, with the target where one exists.
report_ccopt_skew_groups -file <report_file>Summary tables plus min and max path detail. Writes a file.
report_ccopt_skew_groups -summarize_stage_depth {buffer inverter}Counts of buffers and inverters on the paths instead of delay.
report_ccopt_pin_insertion_delays -file <report_file>Distribution of pin insertion delay values set at sinks, not measured delay. Writes a file.
report_ccopt_worst_chain -check_type setupThe chain with the worst negative slack path, and why it cannot improve.
Clock DRVs, routes and NDR
report_ccopt_clock_tree_drv -num_nets all -file <report_file>Constraint summary, violation counts and every violating clock net. Writes a file.
report_ccopt_clock_tree_drv -drv_types {transition max_cap max_source_to_sink_net_length}The same report limited to the listed violation types.
reportRouteTypeConstraints -summaryRoute type constraints per layer, NDR and category, such as INNOVUS_CLK_NDR.
reportRouteTypeConstraints -detailed -file <report_file>Nets with route type constraints and adherence; default only below 80 percent. Writes a file.
report_route -clockRouting statistics of the clock nets.
report_route -ndrNDR statistics of nets.
report_route -shieldStatistics of shielded nets only.
dbGet -p1 top.nets.isCTSClock 1Pointers to all CTS clock nets.
Legalisation after CTS
report_ccopt_cell_halo_violations -summaryA summary of clock instances with halo violations.
checkPlace <report_file>Placement violations such as overlap, grid and pin access, with markers. Writes a file.
refinePlaceFinds legal locations for instances. Changes the placement only if it is not legal.
cts_refine_clock_tree_placementRefines placement against clock halo and density rules, non-clock then clock cells. Changes the database.
Post-CTS timing and propagated clocks
getAnalysisModeThe current analysis settings, including the clock propagation mode.
get_clocks -filter "is_propagated_clock == true"The clocks that are in propagated mode.
get_propagated_clock -clock <clock>Whether the clock is ideal or propagated.
report_clock_timing -type summaryA clock timing summary from the timing engine.
timeDesign -postCTS -outDir <dir>Post-CTS setup timing reports. Runs early global route and extraction first. Writes files.
timeDesign -postCTS -expandedViews -outDir <dir>The same, with one report directory per view. Writes files.
timeDesign -postCTS -hold -outDir <dir>Post-CTS hold timing reports. Runs early global route and extraction first. Writes files.
timeDesign -postCTS -reportOnlyReports from the extraction already in memory, with no new extraction.
Hold fixing
getOptMode -opt_hold_target_slackThe current hold target slack in nanoseconds.
setOptMode -opt_hold_target_slack <ns>Sets the hold target slack. Changes the session; record the value.
optDesign -postCTS -hold -outDir <dir>Fixes hold violations after CTS and writes prefix_hold.summary. Changes the database.
optDesign -postCTS -hold -holdVioData <file>Fixes hold and writes the top 50 remaining hold paths as text and csv. Changes the database.
Coverage, clock gating and clock propagation
report_analysis_coverageA coverage summary per check type: checks, met, violated and untested.
report_analysis_coverage -verbose {violated untested}The coverage details limited to violated and untested checks.
report_analysis_coverage -check_type {clock_gating_setup clock_gating_hold} -verbose {violated untested}Clock gating checks only, with details and slack of violated and untested checks.
report_clock_gating_checkEvery clock gating check, I or L, with setup and hold margins. No path slack.
report_clock_propagation -clock <clock> -to <pin>Why a clock does not propagate to a pin, for example an inactive timing arc.
check_timingConsistency and completeness checks on the timing constraints.
Clock power
report_power -clock_network allPower consumed by the clock networks, including generated clocks.
report_power -clock_network all -count_seq_elements_in_clock_networkThe same, with the leaf flip-flop power included.
Only if the block uses UPF or CPF
report_ccopt_cell_filtering_reasons -power_domain <domain>The filtering reasons within one power domain.