IntermediateQuestion 100 of 112Source: Synopsys PrimeTime User Guide: Reporting Timing Paths

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 Reference DiagramHow do you get PrimeTime to report a hold check instead of a setup check with report_timing?
Two report_timing outputs side by side, the default -delay_type max setup report and a -delay_type min hold report, showing different worst paths FF3/Q-to-FF9/D versus the setup violator.

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 min with -nworst N (PT) shows the N worst hold checks in one pass, the same way -nworst works 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 min run 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

Get the complete 10-chapter STA handbook covering setup/hold margins, clock modeling, OCV/POCV, crosstalk noise, and PrimeTime closure.

Static Timing Analysis (STA) Handbook — ten chaptersSTA HandbookTen chapters on setup, hold, OCV, and PrimeTime signoff. →