How does a PrimeTime ECO fix a setup violation by resizing or buffering instead of re-placing cells?
From PDVerse STA Mentor Guide · pdVerse Mentor Guide
Short Answer
A PrimeTime setup ECO reduces delay along the failing path, usually by upsizing an undersized cell to drive its load faster or by inserting a buffer to split a long, slow net into two shorter, faster-driven segments -- both changes that fix_eco_timing -type setup (PT) can select automatically. This works without re-placement whenever a larger cell or an extra buffer fits into the existing site or a small nearby gap; when it doesn't fit, the ECO has to fall back to a fix that does require moving something, which is why setup fixes are less reliably placement-free than hold fixes.
Technical Explanation
fix_eco_timing -type setup (PT) looks for cells along a violating path whose current size is smaller than the load and delay budget on that arc need, and proposes size_cell (PT) as the fix -- swapping in a functionally identical but stronger drive-strength variant from the same library.
- For a long net whose delay is dominated by wire resistance and capacitance rather than by the driving cell's strength, resizing the driver has limited benefit; inserting a buffer partway along the net using
insert_buffer(PT) instead splits it into two shorter segments, each of which the tool can drive faster. - A
-physical_mode open_site(PT) option restricts the fix to a cell or buffer that fits into an already-open site or a small legal gap, so the command never proposes a resize or insertion that would need to displace another cell -- exactly the constraint a placement-locked ECO needs. - A resized cell generally reuses its existing site's footprint if a same-footprint, higher-drive variant exists in the library; when it doesn't, the larger cell needs a bigger site, which can require nudging a neighboring cell -- the placement disturbance a hold fix usually avoids.
- An inserted buffer on a long net needs a physical location along that net's route, which the ECO flow either takes from a nearby spare cell site or, if none exists close enough, has to place fresh -- again requiring the place-and-route tool's involvement rather than a placement-free connection.
- Because setup fixes reduce delay while hold fixes add it, and reducing delay usually means either a bigger cell or a mid-net buffer, setup ECOs are inherently more likely to touch the physical layout than hold ECOs are.
Common Mistake
The Trap: running a setup ECO with the same no-placement-changes method restriction used successfully for hold fixes, assuming the restriction is equally safe for both directions of fix.
- Consequence:
fix_eco_timing -type setuprestricted to only same-footprint resizes can fail to find any fix at all for a path whose delay is dominated by long wire -- leaving the violation unresolved and reporting no available fix, when relaxing the restriction to allow a buffer insertion, with its placement implications acknowledged, would have closed it.
Follow-up Question & Model Response
If a setup fix does end up needing a slightly larger cell footprint, how does the flow avoid a full re-placement of the whole block?
Candidate Model Response: The ECO change list from write_changes (PT) identifies exactly which single cell needs a larger footprint, so the place-and-route tool only needs to legalize placement locally around that one site rather than re-run global placement across the block. A local legalization pass nudges the minimum number of neighboring cells needed to make room, typically within a small radius of the resized cell, and re-routes only the nets that were disturbed by that shift. This keeps the physical impact proportional to the size of the change instead of triggering a full placement and routing re-run, which is the entire point of running a late-stage ECO instead of going back through synthesis and place-and-route from scratch. The re-verification step afterward confirms the local legalization didn't itself introduce a new violation on a neighboring path.
Practical Example
A setup violation of -22 ps on a path through u_mac/mult_stage2/Y is fixed by fix_eco_timing -type setup -methods {size_cell insert_buffer} (PT), which upsizes that one AND gate from an X1 to an X4 drive-strength variant, cutting its output delay by 30 ps and clearing the violation with 8 ps of margin. Because the X4 variant shares the same cell footprint as the X1 in this library, the site itself needs no change, but the increased output current draw requires the place-and-route tool to verify the local power rail still meets its IR-drop budget before the ECO is accepted -- a check the timing fix itself does not perform.
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