ExpertQuestion 16 of 69

Walk through the fix_eco_timing flow for setup versus hold, and explain why the recommended ECO fixing order matters.

From PDVerse STA Mentor Guide, part of the pdVerse Mentor Guide

Short Answer

fix_eco_timing fixes setup violations by default using cell sizing alone, reducing data path delay without adding buffers, while it fixes hold violations using both cell sizing and buffer insertion, adding delay where a path is too fast. Setup is fixed first because it is the harder violation to repair and is allowed to introduce new hold violations along the way; hold is fixed second, and it deliberately avoids reintroducing setup or design-rule violations, since fixing hold after setup means the setup picture is already considered final.

Technical Reference DiagramWalk through the fix_eco_timing flow for setup versus hold, and explain why the recommended ECO fixing order matters.

Technical Explanation

  • fix_eco_timing -type setup (PT) reduces data path delay to close setup violations, using cell sizing (swapping in a faster-drive version of the same logical cell) by default, without inserting buffers or touching the clock network.
  • fix_eco_timing -type hold (PT) instead needs to add delay to a path that is too fast, and by default uses both cell sizing (toward slower drive strength) and buffer or inverter-pair insertion to add controlled delay, since sizing alone often cannot add enough delay margin the way it can remove it.
  • The -type argument is mandatory on every invocation โ€” you must explicitly choose setup or hold each time, because the two violation types need fundamentally different fixing strategies and cannot share one default behavior.
  • Setup fixing is done first in the recommended order because setup violations are generally harder to fix (there is less headroom for aggressive sizing before running into area, power, or design-rule limits), and the command explicitly allows setup fixing to introduce new hold violations as a side effect, since hold is comparatively easier to fix afterward.
  • Hold fixing is done second and deliberately avoids introducing new setup or design rule violations, because at that point the setup timing has already been accepted as the target to preserve โ€” reordering this (fixing hold first) risks the subsequent setup pass undoing or conflicting with delay just added for hold.
  • -pba_mode exhaustive (PT) can be added to either fixing pass to use path-based timing (real, path-specific delays) instead of the default graph-based estimate, reducing unnecessary over-fixing caused by graph-based pessimism, at the cost of additional runtime.
  • -methods {size_cell insert_buffer} (PT) lets a designer explicitly restrict or expand which fixing techniques are allowed for a given pass, and -cell_type clock_network (PT) extends fixing into the clock tree specifically, which is off by default since clock-network changes carry more downstream risk than local data-path changes.
  • What breaks: running hold fixing before setup fixing, or running both without respecting this dependency, risks the setup-repair pass later undoing delay the hold pass just added, forcing another iteration and consuming more ECO turns than the recommended order needs.

Common Mistake

The Trap: running fix_eco_timing -type hold before -type setup because hold violations happen to be reported first, or seem simpler.

  • Fixing hold first means any buffers inserted to add delay can shift the data path delay enough to affect the subsequent setup-fixing pass's starting point, risking an extra iteration that the recommended setup-then-hold order avoids by design.
  • Assuming hold fixing never affects setup, or setup fixing never affects hold, ignores that the command's own default behavior explicitly acknowledges the interaction โ€” setup fixing is allowed to introduce hold violations, and hold fixing is required to avoid reintroducing setup violations, precisely because the two are coupled through the same physical cells and nets.

Follow-up Question & Model Response

"After a setup fixing pass introduces a few new hold violations, as the command allows, how would you decide whether the follow-up hold fixing pass actually resolved them cleanly, without silently reopening any of the setup fixes?"

Candidate Model Response: I would re-run report_timing -delay_type min (PT) style checks, or more directly rerun a full setup and hold summary via report_global_timing (PT), after the hold pass completes, rather than trusting the hold pass's own completion message alone. Since hold fixing by default is required to avoid introducing new setup or DRC violations, a clean completion should mean the setup numbers from the prior pass are unchanged; I would specifically diff the worst setup slack values before and after the hold pass to confirm nothing regressed, and check the -estimate_unfixable_reasons (PT) output for any hold violations the tool could not resolve without touching setup-critical cells.

Practical Example

Worked case: a block has 40 setup violations and 12 hold violations before ECO. fix_eco_timing -type setup (PT) using cell sizing alone resolves 38 of the 40 setup violations, but its sizing changes introduce 5 new hold violations, bringing the hold count to 17. fix_eco_timing -type hold -pba_mode exhaustive -buffer_list {BUFX2 DLY1X2 DLY2X2} (PT) then resolves all 17 hold violations using a mix of sizing and buffer insertion, without touching the 38 already-fixed setup paths, leaving only the original 2 unfixable setup violations for manual review โ€” exactly the outcome the setup-first, hold-second order is designed to produce.

Complete STA Handbook

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

Offline PDF Bundle

Want all 1109 questions offline?

Get the complete 4-book PDF bundle (PnR, STA, MMMC, Low Power) with a clickable table of contents - no ads, no internet needed.

See what's inside the bundle
PnR Flow Physical Design Mentor Guide โ€” eight chaptersPnR Flow Mentor GuideEight chapters, library setup through to stream-out.