How do you get PrimeTime to report a hold check instead of a setup check with report_timing?
From PDVerse STA Mentor Guide · pdVerse Mentor Guide
Short Answer
By default report_timing (PT) reports the setup (max delay) check for the worst path, so a designer chasing a hold problem can stare at the wrong check without realizing it. Adding -delay_type min (PT) tells the command to report the minimum-delay, hold-side check instead, which uses a different required time and often a different worst path entirely.
Technical Explanation
- Setup checks ask whether data arrives before the next clock edge; hold checks ask whether data stays stable long enough after the current edge, so they use opposite delay assumptions.
report_timing(PT) defaults to-delay_type max, which reports the setup check using worst-case, slowest delays.report_timing -delay_type min(PT) switches to the hold check, which actually means using the fastest, best-case delays, since a hold violation is caused by data arriving too soon.- Because the fastest and slowest paths through a design are often physically different, the worst hold-check path is frequently not the same instance pair as the worst setup-check path.
- Combining
-delay_type minwith-nworst N(PT) shows the N worst hold checks in one pass, the same way-nworstworks for setup. - A design can show a perfectly clean setup report and still carry hold violations, so both delay types need to be checked, not just the default one.
Common Mistake
The Trap: Running report_timing with no options and assuming a clean result means the design has no timing problems at all.
- A clean default report only proves setup is clean; a separate
-delay_type minrun is required before ruling out hold violations.
Follow-up Question & Model Response
Why does a hold fix, adding delay, never trade off against the clock period the way a setup fix does?
Candidate Model Response: A setup check compares data path delay against the clock period, so slowing the clock gives every setup check more room to pass. A hold check compares data path delay against clock skew and uncertainty at a single edge, with no period term in the inequality at all, so changing the clock frequency does nothing for a hold violation. This is why hold fixes always add real delay into the data path, a buffer, a longer wire, a slower cell, rather than relaxing the constraint. It also means hold violations must be fixed before tapeout, since no clock speed a customer could apply would make them pass.
Practical Example
report_timing -delay_type min -nworst 3 (PT) on a datapath domain reports a -22ps hold violation from FF3/Q to FF9/D, a pair that never appears in the top setup violators list because it is a short, physically adjacent connection. The default -delay_type max report on that same domain shows every setup check passing with over 100ps of margin, so a designer who only ran the default command would have signed off a domain that actually carries a real hold violation. The fix is a small delay buffer inserted directly on that net, verified afterward with the same -delay_type min report.
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