IntermediateQuestion 108 of 112Source: Synopsys PrimeTime User Guide: ECO Commands, Sizing Cells

How do you swap a cell to a faster drive strength with size_cell during a PrimeTime ECO?

From PDVerse STA Mentor Guide · pdVerse Mentor Guide

Short Answer

When a path fails setup because one cell along it is too slow, replacing that cell with a stronger drive-strength version of the same function is often the cheapest fix, since it changes delay without touching placement or routing. size_cell (PT) does exactly this inside an ECO session, swapping a named instance to a different library cell while PrimeTime checks the new cell fits the same footprint and pin function.

Technical Reference DiagramHow do you swap a cell to a faster drive strength with size_cell during a PrimeTime ECO?
ECO diagram showing instance U88 swapped from BUFX2 to BUFX8, with setup slack improving from -30ps to +25ps while the paired hold slack drops from +40ps to +8ps on the same net.

Technical Explanation

  • size_cell U234 BUFX4 (PT) replaces the cell at instance U234 with the BUFX4 library cell, provided the two cells share the same logical function and pin order.
  • PrimeTime re-times the affected paths immediately after the swap so the designer can see the slack change before deciding whether to keep it.
  • A stronger drive strength typically reduces cell delay on a loaded net but adds a small amount of extra capacitance seen by the driving stage before it, so the fix must be checked both ways.
  • size_cell (PT) operates only on the timing model inside PrimeTime; the actual physical placement and routing are unchanged until a downstream physical tool re-implements the ECO.
  • Because the swap is a same-footprint substitution, it usually avoids re-running full placement, which is why it is preferred over more disruptive fixes when a suitable stronger cell exists in the library.
  • After sizing, the fix still needs write_changes (PT) to hand the netlist edit to the physical design tool for legalization and re-extraction, since PrimeTime's own timing model does not update parasitics on its own.

Common Mistake

The Trap: Assuming a size_cell fix is complete once PrimeTime's own report shows the slack has improved.

  • The physical implementation still needs to place and re-route around the new cell footprint if the drive strength change affects cell size, and the timing must be re-checked against the resulting real parasitics, not the pre-ECO SPEF still loaded in the session.

Follow-up Question & Model Response

Why might size_cell fail to fix a hold violation even when it clearly improves the setup slack on the same path?

Candidate Model Response: A stronger drive strength usually speeds up a path by reducing cell delay, which helps setup by leaving more time before the next clock edge, but that same speed-up hurts hold by making the data arrive even sooner after the launch edge. If the path already had marginal hold slack, sizing up the cell for setup can push it into a hold violation instead. This is why an ECO session re-checks both -delay_type max and -delay_type min (PT) after any sizing change, rather than only confirming the check the fix was aimed at. A path with both checks tight sometimes needs a different fix, such as buffering elsewhere, instead of resizing the shared cell.

Practical Example

A setup violation of -30ps on a datapath through instance U88, a BUFX2, is fixed with size_cell U88 BUFX8 (PT), bringing the path to +25ps of setup slack. The paired hold check on the same net, previously at +40ps, drops to +8ps after the swap, still passing but close enough that the team reruns report_timing -delay_type min (PT) before signing off the ECO.

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. →