Skip to content
Ch 09 / 16 Chapter 9: CTS and post-CTS qualification
CHAPTER 9

CTS and post-CTS qualification

Clock tree synthesis replaces an ideal clock with a real network of buffers, wires and gates, and every later timing number depends on it. This chapter checks that the tree was built to its specification, that its routes and cells are legal, and that timing with real clocks is acceptable before global routing starts.

9.1 Stage purpose

Before this stage, timing was analysed with ideal clocks: every flop saw the clock at the same moment, so the clock network cost nothing. Clock tree synthesis, or CTS, builds the real network. It inserts buffers and inverters, balances the delay from the clock root to every sink (a flop, latch or macro clock pin), and routes the clock nets. The result is described in Figure 12. The delay from the root to a sink is its insertion delay. The spread between the largest and smallest insertion delay in a group of sinks that must be balanced together is the skew, and such a group is a skew group.

block outlinelatest sink 411 psearliest sink 388 psskew group clk/func48 sinks, one groupclock root pinskew 411 - 388 = 23 psL1L1L2L3M6 horizontalM5 verticalM4 horizontalM3 verticalVSS shieldbuffersinkvia, cut and enclosureCost ledger (illustrative)sinks48buffers14 (2 + 4 + 8)vias drawn742W2S + shield540 um x 5 tr2W1S2688 um x 3 trtrack-um used10764same wires at 1W3228routing costx 3.3tr = tracks blocked on the layer1 drawing unit = 1.5 umTracks per rule, 2x zoom1W signal1 track2W1S3 tracks blocked2W2S + VSS shield5 tracks spannedP = track pitch
Figure 12. A buffered clock tree, its skew group and the cost of its routing rules
Read it. The die holds 48 sinks in eight clusters, driven by 14 buffers on three levels from one root pin. The upper levels are drawn as double-width wires with a dark VSS shield on each side, and the branch and leaf wires are double width with default spacing. The red and green boxes mark the latest and earliest sink of the skew group, whose insertion delays differ by 23 ps. The strips on the right show the tracks each rule uses at twice the die scale. The ledger totals the cost, all in illustrative units.

The main command is ccopt_design. Run without options it performs clock concurrent optimization, which builds the tree and optimises the clock and the datapath together. With -cts it performs clock tree synthesis only, with no datapath optimisation or useful skew. After either form the clock nets are detail routed and the clocks are switched to propagated mode, which means timing now uses the real clock latencies. The reference says a clock that was already propagated before CCOpt is not switched and gets no source latency update, and that update_io_latency must not be run after ccopt_design.

Four ideas are kept apart in this chapter. Tool completion means the command returned. Analysis coverage means the timing checks you expect were actually evaluated. Stage qualification means the evidence meets your project budgets for skew, insertion delay, slew, hold and legality. Signoff comes later, after detail routing and signoff extraction. A tree can complete, report no violations, and still be unqualified because a clock never reached its flops. Thus, each card below asks what the output proves, and what it leaves unproven.

9.2 Entry prerequisites

Must already be trueWhy
Chapters 1 to 8 passed, including legal placement and a CTS readiness checkCTS moves and adds cells, so it needs a legal placement that is already timing-aware.
Post-CTS timing constraints are loaded for all active modes, with clocks still idealCTS reads the constraints to define clock trees and skew groups, and switches the clocks to propagated itself.
Setup and hold analysis views are active, and the primary delay corner is chosenBy default the first setup view sets the primary corner. Choose it explicitly when there are several.
Post-CTS uncertainty is jitter only, CPPR is enabled, and OCV or AOCV derates are setThe reference asks for these before CCOpt. Pre-CTS uncertainty left in place counts skew twice once clocks are real.
Route types, NDRs and CTS library cells are definedCTS can only apply rules and cells that exist before it starts.
Project budgets for skew, insertion delay, slew and hold existThis book sets no limits. The reports below show values, and your budget decides.

9.3 Relevant files and analysis context

CTS works from a clock tree specification: the clock trees, skew groups and CTS properties derived from the timing constraints. The command create_ccopt_clock_tree_spec defines it from all active setup and hold views. With -file it only writes the specification as a script and does not execute it. You then run source on the script, once per session, and delete_ccopt_clock_tree_spec or reset_ccopt_config removes a loaded specification. The script is the best record of what CTS was asked to do.

CTS behaviour is controlled by CCOpt properties, set with set_ccopt_property and read with get_ccopt_property. The ones that matter for qualification are the target maximum transition, the target skew (which the reference says full ccopt_design ignores, see C-04), the route types for leaf, trunk and top nets, the buffer, inverter and clock gating cells, and the primary delay corner. A route type binds a non-default routing rule (NDR), preferred layers and a shield net, and it is created with create_route_type. The route type is only a request, so Section 9.4 checks the routed result.

Record the following with every report, because two runs with different settings are not comparable.

RecordHowWhy
Specification and propertiescreate_ccopt_clock_tree_spec -file and save_ccopt_configThe exact clock trees, skew groups and targets CTS used.
Primary delay cornerget_ccopt_delay_cornerCTS balances in this corner, and the CTS reports favour its late half.
Analysis mode and viewsgetAnalysisMode and the active view listClock propagation, CPPR and the views decide what timing means.
Hold target slackgetOptMode -opt_hold_target_slackA changed target changes how many cells hold fixing adds.
Report directory and file names-outDir and -prefix (clock_opt_design uses -out_dir)Reports from different stages must not overwrite each other.

One distinction affects how every report is read. The report_ccopt_* reports use the clock tree timing engine, which is the model CTS itself used. report_ccopt_clock_trees and report_ccopt_skew_groups recalculate timing by default, and report_ccopt_clock_tree_structure shows timing details only with -update_timing. The timing reports of timeDesign and the clock reports of report_clock_timing use the common timing engine. The reference does not say how closely the two engines agree (not verified), so compare them once, and treat the common engine as the one that feeds the stage decision.

9.4 Checks and command cards

9.4.1 Pre-stage checks

C-01CTS prerequisites and specification
Question it answersIs the design ready for CTS, and does the specification contain the clocks, skew groups and primary corner you expect?
StageBefore ccopt_design
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateChapters 1 to 8 passed; post-CTS constraints loaded; CTS properties set; specification created.
Legacy UI
ccopt_design -check_prerequisites
check_design -type cts -out_file <report_file>
get_ccopt_clock_trees
get_ccopt_skew_groups
get_ccopt_delay_corner
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-check_prerequisites checks that CTS can run, for example that the design is loaded and the options you set are correct, without doing CTS.
-type cts runs the checks on clock tree definition, such as constraint targets and route types.
-out_file writes the findings as a Tcl dictionary file.
Scope and viewWhole design, all active views.
Effect on sessionwrites files. Some commands in this card only read or report.
OutputConsole messages, a check_design file, and lists of clock tree names, skew group names and the primary corner name.
Fields that matterClock trees against the clocks in your constraints; skew groups against what you intend to balance; the primary delay corner; check_design findings on targets and route types.
HealthyEvery functional clock has a clock tree and a skew group, and the checks report no errors.
WarningThe primary corner is the first setup view by default, which may not be the one you meant.
Hard stopA clock in the constraints has no clock tree, or check_design -type cts reports an error on targets or route types.
Common misuseReading an empty list of clock trees as a pass. No names means no specification yet, or a -file script that was written but not sourced.
Root cause and fixCreate or correct the specification, targets and route types, then rerun the checks.
Rerun after a fixRerun C-01 after any change to the constraints or CTS properties.
VerificationLegacy syntax checked against the Innovus Legacy text reference.

The reference states that check_design -type cts cannot run on the database straight after place_opt_design, and needs the CCOpt options set and the specification loaded. If the block uses UPF, CTS also needs always-on buffers and inverters in its cell lists so that it can buffer across switched domains. That check is not applicable to a flat single-supply block, and the status table in Section 9.6 marks it so. For the clock_opt_design flow the prerequisite check is clock_opt_design -check_cts_config.

9.4.2 Post-stage checks

C-02CTS run and log
Question it answersDid CTS complete, and what did the log say about errors, warnings and optimisation limits?
StageAfter ccopt_design
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateC-01 passed; the post-CTS setup is applied with clocks still ideal.
Legacy UI
ccopt_design
ccopt_design -cts
report_message -errors -count
report_message -warnings -count
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-cts turns off clock concurrent optimization and performs only clock tree synthesis with the CCOpt engine.
Scope and viewWhole design.
Which command to runThe reference describes clock_opt_design as the replacement for ccopt_design when the input database came from place_opt_design V2, and says it legalises placement first. Use the one your flow requires and record it.
Effect on sessionupdates the design database; writes files; runs an expensive analysis. Some commands in this card only read or report.
OutputA log with CTS and optimisation messages, routed clock nets, propagated clocks, and for the full form timing reports in ./timingReports.
Fields that matterError and warning counts by message ID, which accumulate over the whole session, so record them before the run; IMPCCOPT messages; for CCOpt, the table of slack and other metrics at each internal stage, and the worst chain reports in the log.
HealthyThe command returns with no errors, and every warning has been read and either fixed or explained.
WarningWarnings about dont_touch nets or clock instances that cannot be resized, which can limit skew balancing and clock quality.
Hard stopAny error message, or a run that leaves clocks ideal or clock nets unrouted.
Common misuseTreating a returned command as a passing stage. Completion says CTS ran, not that skew, slew or timing meet your budget.
Root cause and fixFix the cause of the first error, restore the saved pre-CTS database, and rerun so the rerun starts from the same state.
Rerun after a fixRerun C-01, then C-02 and every later card.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
C-03Clock tree report and clock DRVs
Question it answersWhat is in each clock tree, and do any clock nets have design rule violations (DRVs) in transition, capacitance, length or fanout?
StageAfter CTS
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateccopt_design completed.
Legacy UI
report_ccopt_clock_trees -summary
report_ccopt_clock_trees -file <report_file>
report_ccopt_clock_trees -histograms
report_ccopt_clock_tree_structure -file <report_file>
report_ccopt_clock_tree_drv -num_nets all -file <report_file>
report_ccopt_clock_tree_drv -drv_types {transition max_cap max_source_to_sink_net_length}
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-summary shows only the summary table.
-file saves a copy of the report.
-histograms adds histograms of key information.
-num_nets all lists every violating clock net. By default only 10 nets are listed.
-drv_types selects the violation types. All types are reported by default.
Scope and viewAll clock trees, delay corners and views unless you restrict them.
Runtime and option notereport_ccopt_clock_trees recalculates timing by default, which takes longer. Its options -no_invalidate and -skip_timing_update reuse existing data. The DRV report has neither option. The reference example for the DRV report writes with -out_file, but its syntax block lists -file, so this card uses -file.
Effect on sessionwrites files. Some commands in this card only read or report.
OutputText reports on the console and, with -file, in files. The DRV report has a constraint summary, a violation summary and a list of violating nets.
Fields that matterSink counts, Total FF and Max Level; clock gates and macro sinks; fanout histogram; counts of slew, capacitance, resistance, length and fanout violations per tree; the targets and where each came from.
HealthyEach clock tree is present, its sink count matches the design, and every violation count is zero.
WarningFewer sinks than the clock has flops, or violations only on dont_touch or pre-routed nets that CTS may not be able to fix.
Hard stopA clock tree with no sinks, or violations on fixable clock nets beyond your budget.
Common misuseReading the numbers as signoff timing, or reading only the default top 10 DRV nets. These reports use the clock tree timing engine, and the summary counts give the total.
Root cause and fixCorrect the specification, the ignore and stop pins, the buffering or the targets, and rerun CTS.
Rerun after a fixRerun C-03 and C-04.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
C-04Skew groups and insertion delay
Question it answersFor each skew group and corner, what are the insertion delay and the skew, and do they meet the target that CTS was given?
StageAfter CTS
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateccopt_design completed.
Legacy UI
report_ccopt_skew_groups -summary
report_ccopt_skew_groups -file <report_file>
report_ccopt_skew_groups -summarize_stage_depth {buffer inverter}
report_ccopt_pin_insertion_delays -file <report_file>
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-summary reports only the summary tables.
-file saves the full report.
-summarize_stage_depth counts cells of the listed types, here buffers and inverters, on the paths instead of reporting delay.
Scope and viewAll skew groups in all delay corners unless restricted.
Targets and reporting-only groupsBy default only the late half of the primary delay corner has a numeric skew target, and the Skew Target Type column shows which corners have one. The reference says target_skew is ignored by ccopt_design, which schedules useful skew, and used by ccopt_design -cts or by a skew group whose constrains property includes ccopt. So for the full form judge insertion delay and slack, not raw skew. Skew groups created for generated clocks are reporting-only by default: they impose no balancing constraint. Add -include_reporting_only_skew_groups to see them.
Effect on sessionwrites files. Some commands in this card only read or report.
OutputSummary tables, then min and max path detail per skew group and corner.
Fields that matterMin and max insertion delay, skew against target, skew window occupancy, the sinks at the ends of the min and max paths, and the number of active sinks.
HealthyInsertion delay and skew of every skew group meet your budget in every corner reported.
WarningSkew meets the budget in the primary corner but another corner has no target or misses it.
Hard stopA skew group beyond a target that CTS enforces, or a skew group with no active sinks.
Common misuseChecking one corner only. CTS reports give priority to the late half of the primary delay corner, so other corners need their own look.
Root cause and fixReview sink membership and constraints of the group, then fix the specification or CTS cells.
Rerun after a fixRerun C-03 and C-04, then C-07.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
C-05Clock routes, NDR and shielding
Question it answersAre the clock nets routed with the NDR, layers and shielding that their route types request?
StageAfter CTS
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateccopt_design completed; route types defined before CTS.
Legacy UI
reportRouteTypeConstraints -summary
reportRouteTypeConstraints -detailed -file <report_file>
report_route -clock
report_route -ndr
report_route -shield
dbGet -p1 top.nets.isCTSClock 1
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-summary prints the constraint usage per layer, per NDR and per constraint type.
-detailed lists each net with a route type constraint and its routing adherence. By default only nets below 80 percent adherence are listed.
-clock reports statistics of clock nets.
-ndr reports NDR statistics of nets.
-shield reports statistics for shielded nets only.
Scope and viewAll clock nets, or all nets for the route type summary.
Link to Chapter 10The command commit_ccopt_clock_tree_route_attributes sets isClock and isCTSClock on clock tree nets and applies the route type layers, NDR and shield, so that early global route models clock nets predictably.
Effect on sessionwrites files. Some commands in this card only read or report.
OutputTables on the console.
Fields that matterRoute type constraints by category, with INNOVUS_CLK_NDR for clock nets that use an NDR; routing adherence; preferred bottom layer used; wire length and via counts of clock nets; shield statistics; the list of CTS clock nets.
HealthyEvery net class that asks for an NDR or a shield shows it in the routed result, with adherence you accept.
WarningAdherence below 100 percent on a few nets. The preferred layers are soft limits that the router may leave.
Hard stopA clock net with an NDR route type that routed at the default rule, or required shielding that is missing.
Common misuseAssuming the NDR exists because the route type was defined. The route type is a request, and only the routed result shows what happened.
Root cause and fixCorrect the route type, the NDR definition or the layer range, and rebuild the clock routes.
Rerun after a fixRerun C-05, C-07 and C-08, because routing changes timing.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
C-06Clock cell legalisation
Question it answersAre the clock cells legally placed, and do they obey the clock halo and density rules you set?
StageAfter CTS
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateccopt_design completed; clock halo properties set if halos are used.
Legacy UI
checkPlace <report_file>
checkPlace -inst <instances>
refinePlace
report_ccopt_cell_halo_violations -summary
cts_refine_clock_tree_placement
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-inst limits checkPlace to the listed instances, here the clock instances.
-summary reports a summary of clock instances with halo violations.
Scope and viewClock instances for the halo report, the whole design for checkPlace.
Side effectcts_refine_clock_tree_placement refines placement in two passes, first the non-clock instances and then the clock instances, so cells can move. Timing and wire length of the affected nets can change, so rerun the clock and timing cards.
Effect on sessionadds GUI violation markers; updates the design database; writes files. Some commands in this card only read or report.
OutputA halo violation summary, markers in the violation browser, and a checkPlace report.
Fields that matterClock instances with a cell halo and how many failed; the violating instances and intrusions; checkPlace violation types such as overlap, grid, row orientation and pin access.
HealthyNo clock halo violations, and checkPlace reports no violations on clock cells.
WarningA message that a clock halo was disabled on a large cell, so the halo you set was not applied.
Hard stopOverlapping or off-grid clock cells, or halo violations that remain after refinement.
Common misuseRunning the halo report with no halo properties set. It checks only the halos defined through the CCOpt halo properties.
Root cause and fixRun cts_refine_clock_tree_placement, rerun the halo report, and fix any remaining overlap with legal placement.
Rerun after a fixRerun C-06, then C-03 to C-05 and C-07.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
C-07Post-CTS setup timing and propagated clocks
Question it answersWith real clock latencies, how does setup timing look, and is every intended clock propagated?
StageAfter CTS
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateC-03 to C-06 reviewed.
Legacy UI
timeDesign -postCTS -outDir <dir>
timeDesign -postCTS -expandedViews -outDir <dir>
getAnalysisMode
get_clocks -filter "is_propagated_clock == true"
get_propagated_clock -clock <clock>
report_clock_timing -type summary
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-postCTS selects post-CTS analysis: it runs early global route, native default extraction and timing, with setAnalysisMode -clkSrcPath true and -clockPropagation sdcControl.
-expandedViews writes view-specific reports in one directory per view. Without it the overall TNS is a worst-over-views value, not a per-view number.
-outDir sets the report directory. The default is timingReports.
Scope and viewWhole design, all active views.
ParasiticstimeDesign -postCTS runs early global route and extraction as part of the command, so these numbers use early-route parasitics. Chapter 10 explains how to judge them.
Effect on sessionchanges analysis configuration; updates the design database; writes files; runs an expensive analysis. Some commands in this card only read or report.
OutputTiming reports and a summary in the report directory, and lists of propagated clocks.
Fields that matterSetup WNS, TNS and violating paths by path group, including the reg2cgate group of paths that end in clock gates; DRV counts; density; propagation mode of each clock; clock skew summary.
HealthySetup WNS and TNS meet the budget in every view, and every intended clock is propagated.
WarningA large jump in negative slack against pre-CTS timing at clock gating endpoints, where real skew now counts.
Hard stopSetup slack beyond budget on register-to-register paths, or a clock still ideal after CTS.
Common misuseUsing -idealClock or -reportOnly and reading the result as post-CTS timing. -idealClock forces ideal clocks, and -reportOnly reuses the extraction already in memory.
Root cause and fixCheck propagation and skew first, then rerun CCOpt or optDesign -postCTS.
Rerun after a fixRerun C-07 and C-09.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
C-08Hold timing and hold fixing
Question it answersHow many hold violations remain, and what did hold fixing add and leave behind?
StageAfter C-07
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateC-07 reviewed; cell padding removed; filler cells identified with setFillerMode if present.
Legacy UI
timeDesign -postCTS -hold -outDir <dir>
optDesign -postCTS -hold -outDir <dir>
optDesign -postCTS -hold -holdVioData <file>
getOptMode -opt_hold_target_slack
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-hold on timeDesign, reports hold violations only; on optDesign, corrects hold violations.
-holdVioData writes the top 50 remaining hold violation paths as text and csv, with a detailed text file.
-outDir sets the report directory.
Scope and viewWhole design, all active hold views.
Hold targetsetOptMode -opt_hold_target_slack sets the hold target in nanoseconds. The reference example uses a negative target to focus on large violations first and finish hold fixing after routing.
Effect on sessionchanges analysis configuration; updates the design database; writes files; runs an expensive analysis. Some commands in this card only read or report.
OutputHold timing reports, prefix_hold.summary, optimisation log messages, and with -holdVioData the remaining-violation files.
Fields that matterHold WNS, TNS and violating endpoints before and after; cells added; the reasons for remaining violations in the log; setup WNS before and after.
HealthyHold WNS and TNS meet the budget after fixing, and setup WNS is no worse than before.
WarningHold violations left for post-route fixing, or a small setup TNS loss, which hold fixing allows by default.
Hard stopSetup WNS worse after hold fixing, or large hold violations with no fix path shown in the log.
Common misuseSetting an unrealistic hold uncertainty. The reference warns that a very large value can insert thousands of extra buffers.
Root cause and fixCorrect the hold uncertainty, allowed cells and hold target slack, then rerun hold fixing.
Rerun after a fixRerun C-07 and C-08, then C-06 and C-09.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
C-09Analysis coverage and clock gating checks
Question it answersWhich checks actually ran, which were untested and why, and do the clock gating checks pass?
StageAfter C-07
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateC-07 completed.
Legacy UI
report_analysis_coverage -verbose {violated untested}
report_analysis_coverage -check_type {clock_gating_setup clock_gating_hold} -verbose {violated untested}
report_clock_gating_check
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-verbose limits the details to checks of the listed status: met, violated or untested.
-check_type limits the report to the listed check types.
Scope and viewAll active views unless -view is given.
Finding the breakreport_clock_propagation needs -clock and -to. Give it an untested clock pin and the clock, and it reports why propagation stops, for example an inactive timing arc.
Effect on sessionreads or reports only
OutputA coverage summary per check type and a details table; a clock gating check table.
Fields that matterNumber of checks, met, violated and untested per type; for each check the pin, reference pin, slack and reason; for gating checks the type, I for inferred or L for library, and the setup and hold margins. report_clock_gating_check lists the checks, not path slack.
HealthyEvery untested check has a known, accepted reason, and no clock gating check is violated.
WarningA few untested checks whose reasons are constants or disabled arcs, and that you have reviewed.
Hard stopUntested checks that give no clock at a flop that should be clocked, or a violated clock gating check.
Common misuseReading a short violation list as a pass. An untested check shows UNTESTED in the slack column, so it can never appear as a violation.
Root cause and fixUse report_clock_propagation with the clock and the pin to see where propagation stops, then repair the path or the constraint.
Rerun after a fixRerun C-09 and C-07.
VerificationLegacy syntax checked against the Innovus Legacy text reference.

9.5 Required reports, artefacts and how to read them

ReportFields that support qualificationEvidence class
CTS log (C-02)error and warning counts, IMPCCOPT messages, worst chain, stage tableimplementation
Clock tree and DRV reports (C-03)sink counts, levels, gates, violation counts, targets, worst netsimplementation
Skew group report (C-04)insertion delay, skew, target, sink countsimplementation
Route type and clock route reports (C-05)NDR use, adherence, shield, layersimplementation
Halo and placement reports (C-06)halo violations, overlaps, grid errorsimplementation
timeDesign summaries (C-07, C-08)setup and hold WNS, TNS, DRV counts, early-route parasiticspreliminary for routing-dependent values
Coverage and gating reports (C-09)untested checks and reasons, gating check statusimplementation
Clock power reportclock network power, optional leaf flop powerpreliminary

Evidence classes follow the earlier chapters. Preliminary means useful for direction but built on estimates. Implementation means measured on the implemented database at this stage. Signoff means produced by signoff extraction and signoff timing, which this chapter never claims. Post-CTS timing uses early-route parasitics, so it is preliminary for any value that depends on the final routes.

Clock power comes from report_power -clock_network all, which reports the power of the clock networks including generated clocks. Adding -count_seq_elements_in_clock_network includes the leaf flop power. The value depends on the switching activity and the analysis setup, so use it to compare runs made with the same settings, not as a pass or fail number.

Reading a skew group summary and a CTS warningSynthetic report, not tool output
report_ccopt_skew_groups -summary             ## illustrative layout, ccopt_design -cts
Skew group  Corner            Min ID   Max ID   Skew    Target  Sinks
clk/func    slow:setup.late   0.388    0.411    0.023   0.040   48
clk/func    fast:hold.early   0.201    0.236    0.035   -       48
clk/scan    slow:setup.late   0.392    0.470    0.078   0.040   21

**WARN: (IMPCCOPT-1437): Found 6 clock tree instances which are
user dont_touch and are not resizable - this can impact clock QoR.

The numbers are illustrative, in nanoseconds. The layout is simplified and omits the Skew Target Type column, and the example is read as a run of ccopt_design -cts, where the skew target is enforced. A dash means the corner has no numeric target, which is the reference default for the hold early half. Read the table row by row. The functional group has 48 sinks, which matches Figure 12, and its skew of 0.023 ns is inside the 0.040 ns target in the setup late corner. In the hold early corner it shows 0.035 ns with no target, so there is nothing to meet there and you judge it against your hold budget. The scan group has a skew of 0.078 ns against the same target, so it misses its target even though CTS completed without an error. The warning is a separate finding. Six clock instances are protected from resizing, which can limit how well CTS balances the groups they feed, and it is a likely reason for the scan result.

9.6 Healthy, suspicious and hard-stop examples

FindingStatusWhy
ccopt_design returned and nothing else was readNOT EVALUATEDCompletion is not qualification.
Every skew group with a CTS target meets itPASSThe tree is balanced as specified.
Skew meets target in the primary corner onlyWARN / REVIEWCorners without a target may fail later.
A skew group that CTS constrains misses its targetHARD STOPTiming closure will fight an unbalanced group.
Clock DRVs only on dont_touch netsWARN / REVIEWCTS may be unable to fix them.
A clock net with an NDR route type routed at the default ruleHARD STOPResistance and coupling differ from the design intent.
A clock is still ideal after CTSHARD STOPTiming shows no clock latency.
Untested checks with a constant or disabled arc as reasonWARN / REVIEWAcceptable once each is reviewed.
Always-on buffer checks in a single-supply blockNOT APPLICABLENo power domains exist.

9.7 Debugging, corrective action and reruns

Work from the clock outwards. Start with propagation and sink membership, because a clock that does not reach its flops makes every later number meaningless. Then read skew and insertion delay, then DRVs, then routes, and only then post-CTS timing. A timing failure that appears only after CTS is usually a clock problem, and fixing it in the datapath treats the symptom.

When a card fails, rerun from the earliest affected card. A change to the specification or to a CTS property needs the whole chapter again, because CTS rebuilds the tree. A route type is a CCOpt property, so changing it also needs the whole chapter. A legalisation fix needs C-03 to C-09 only. Keep the report from the failing run next to the report from the fixed run, so that the improvement is shown rather than assumed.

9.7.1 Worked example: a clean run of ccopt_design -cts with a scan skew group that misses its target

Suppose C-02 shows no errors, and C-03 shows both clock trees with the expected sink counts and no clock DRVs. C-04 then gives the summary in Section 9.5: the functional group is balanced and the scan group is not. The CTS warning about six non-resizable clock instances is the first lead. Compare the sinks at the ends of the min and max paths of the scan group, which the full skew group report lists with their pin names, against the instances the warning names. The warning says only that those instances cannot be resized, so check whether the late sinks sit behind one before blaming it. In a full ccopt_design run the same skew would not be a failure by itself, because CCOpt schedules useful skew.

The decision for C-04 is HARD STOP. The fix belongs to whoever owns the protection: allow resizing with the dont_touch value that permits it, or move the affected sinks out of the group or mark them as ignore pins if the specification allows it. Then restore the pre-CTS database and rerun from C-01. Note that the numbers in this example are illustrative, and your project budget decides what skew is acceptable.

9.8 Exit criteria and stage checklist

  • Specification. Clock trees, skew groups and primary corner match the constraints, and the specification is saved.
  • Completion. ccopt_design finished with no errors, and every warning is fixed or explained.
  • Tree. Sink counts match the design, and no unexplained special pins remain.
  • Balance. Every skew group meets the target CTS enforced, and insertion delay and slack meet budget in every corner reported.
  • DRVs. Clock DRV counts are zero, or only on nets you have reviewed and accepted.
  • Routes. Clock nets show the NDR, layers and shielding their route types request.
  • Legality. No clock halo or placement violations on clock cells.
  • Timing. Post-CTS setup and hold meet the budget with every intended clock propagated.
  • Coverage. Untested checks and clock gating checks are reviewed, and each reason is accepted.

Thus, CTS is qualified when the tree matches its specification, its nets and cells are legal, and timing with real clocks is acceptable and fully covered. A tree that only completed can hide a skew group, a missing NDR or an unclocked flop until detail routing, where the repair costs far more. Chapter 10 builds on this state: it estimates routing congestion and parasitics with the clock routes and rules kept in place.

CHAPTER 9 SANITY CHECKS

9.9 Sanity check cheat sheet: CTS and post-CTS

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. Judge every row against your project budgets, because this book sets no universal limits.

CardCheck and whenCommandHealthyReviewHard stop
C-01CTS 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.
C-02CTS 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.
C-03Clock 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.
C-04Skew 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 budget in 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.
C-05Clock 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.
C-06Clock 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.
C-07Post-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.
C-08Hold 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.
C-09Analysis 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.
CHAPTER 9 CHEAT SHEET

9.10 Command cheat sheet: CTS and post-CTS

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

CommandWhat it produces
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.