Why does a clean graph-based timing report still need a path-based rerun before signoff?
From PDVerse STA Mentor Guide · pdVerse Mentor Guide
Short Answer
Graph-based analysis (GBA) times every stage of every path using the single worst-case delay for that stage, so it never actually walks one real path start to finish. That worst case might come from a completely different path than the one being reported, which stacks extra pessimism onto the number PrimeTime prints. Path-based analysis (PBA) re-times the specific path in question using its own real delays, so signoff only trusts a report once the paths that look like they fail under GBA have been re-checked with PBA.
Technical Explanation
- GBA builds one timing graph for the whole design and, at each pin, keeps only the worst arrival and required time seen across every path that touches that pin.
- Because GBA mixes worst-case numbers from different paths at every stage, the "path" it reports is a worst-case composite that no signal actually travels.
- This composite is always pessimistic, never optimistic, so a path that fails setup under GBA might have real slack once every stage is timed along its own actual path.
- PBA re-times a single path with
report_timing -pba_mode exhaustive(PT) or-pba_mode path(PT), using only the real delays that path's signal passes through. - PBA typically recovers some slack because the worst-case-per-stage assumption is removed, but it never makes a genuinely failing path look clean, it only tightens the number.
- PBA on every path in a design costs far more compute than a graph-based sweep, so it is usually reserved for the paths GBA reports as violating or marginal.
- Signoff practice runs GBA everywhere first, then reruns PBA on the reported violators before deciding a fix is really needed.
Common Mistake
The Trap: Treating a GBA violation as proof the path is broken and starting an ECO before checking whether PBA clears it.
- This wastes engineering time fixing a path that was never actually failing, and can hide the real worst path if attention moves to the wrong fix first.
Follow-up Question & Model Response
If PBA always shows less pessimism, why does signoff not just run PBA everywhere and skip GBA entirely?
Candidate Model Response: PBA is dramatically slower because it re-times each path independently instead of reusing one shared graph, so running it on every path in a multi-million-instance design would make signoff impractical. GBA gives a fast, guaranteed-pessimistic sweep of the whole design, and its output is exactly the list PBA needs to check next. Using PBA only on GBA's reported violators keeps the full-chip pass fast while still confirming the small number of paths that matter with real numbers. This two-pass approach is standard in PrimeTime signoff flows for exactly this reason.
Practical Example
A 400MHz core reports a launch-to-capture path with -35ps of setup slack under GBA. Rerunning the same path with report_timing -from FF12/CP -to FF47/D -pba_mode exhaustive (PT) shows +18ps of slack, because the GBA number had borrowed a worse cell delay from a neighboring instance of the same standard cell that happened to sit on a slower stage elsewhere in the design. The design team drops the ECO request for this path and keeps it on a watch list instead.
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