What does report_analysis_coverage check that a slack report alone does not?
From PDVerse STA Mentor Guide ยท pdVerse Mentor Guide
Short Answer
report_analysis_coverage (PT) reports what fraction of the design's paths and endpoints were actually included in the timing run, broken down by exception type and clock group. A design can show a completely clean report_constraint (PT) result and still hide real risk if large parts of it were excluded, disabled, or never constrained in the first place.
Technical Explanation
A clean slack report only covers the paths the tool was told to check โ coverage tells you how much of the design that really is.
report_analysis_coverage(PT) breaks the design down by category โ how many endpoints are covered by real setup/hold checks, how many are excluded by exceptions, and how many have no constraint at all.- A false path or a
set_disable_timing(SDC) call removes a path from analysis; the path itself does not go away, only PrimeTime's obligation to check it. - If too many real paths get excluded โ for example, an over-broad
set_false_path(SDC) meant for one case but written to match many โ the coverage number quietly drops without any VIOLATED line ever appearing. - The report also flags clock groups or modes that received zero coverage, which usually points to a missing mode setup rather than a genuinely clean corner.
- Coverage is a separate axis from slack: a 100% MET
report_constraintresult with only 60% analysis coverage is not the same as a 100% MET result with 99% coverage. - Signoff teams track this number alongside WNS and TNS precisely because a shrinking coverage percentage is invisible in a slack-only view.
Common Mistake
The Trap: reading an all-MET report_constraint result as proof the design is clean.
- A path excluded by a mistaken false path never shows up as VIOLATED โ it simply never gets checked, so the report looks perfect.
- The only way to catch this is to check coverage directly, not to trust the absence of violations.
Follow-up Question & Model Response
If report_analysis_coverage shows 100% coverage, does that guarantee the exceptions themselves โ the false paths and multicycle paths โ are all written correctly?
Candidate Model Response: No, coverage only confirms that every endpoint was assigned to some category โ real check, legitimate exception, or genuinely unconstrained. It cannot tell you whether a set_false_path (SDC) command was written correctly for the case it was meant to cover; a path can be 100% covered by an exception and still be the wrong exception. Verifying that requires reviewing the exception's -from/-through/-to (SDC) arguments against the actual functional intent, which is a design-review step, not something the coverage report checks automatically. Coverage answers whether a path was looked at, not whether it was looked at correctly.
Practical Example
A block reports 94% analysis coverage. Digging into the breakdown, the missing 6% turns out to be one clock domain where a designer left a debug-only set_false_path -from [get_clocks scan_clk] (SDC) command in the production SDC file, quietly excluding real functional paths that happened to share a startpoint with the scan clock.
Complete STA Handbook
Master Signoff-Ready Static Timing Analysis
Get the complete 10-chapter STA handbook covering setup/hold margins, clock modeling, OCV/POCV, crosstalk noise, and PrimeTime closure.

Continue practising