IntermediateQuestion 165 of 192Source: Synopsys PrimeTime User Guide U-2022.12-SP2: ECO Flow (Timing Violation Fixing, Order of ECO Fixing Steps, ECO Fixing Methods)

What does fix_eco_timing do by default for setup vs hold?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

fix_eco_timing (PT) will not run without -type setup or -type hold, because the two problems need opposite changes. By default, setup fixing uses cell sizing alone to cut data path delay, and hold fixing uses sizing plus buffer insertion to add delay. Both work only on data paths, not clock networks. Setup fixing avoids new DRC violations but may create hold violations, while hold fixing avoids creating either setup or DRC violations.

Technical Reference DiagramWhat does fix_eco_timing do by default for setup vs hold?
A two-column table comparing fix_eco_timing -type setup and -type hold defaults: methods, scope, what each may and may not degrade, and which options change the default.

Technical Explanation

  • The type is mandatory on every call because setup needs less delay and hold needs more. There is no combined mode.
  • The default methods differ. Setup uses cell sizing only; hold uses sizing and buffer insertion. To buffer for setup, add -methods insert_buffer with -buffer_list. Side-load sizing (-methods size_cell_side_load) works only with -type setup and -cell_type combinational.
  • Precedence is asymmetric. Setup fixing honours DRC but may alter hold slack, because the PT UG treats setup as the harder problem. Hold fixing honours both setup slack and DRC.
  • Only data paths change by default. Clock-network fixing with -cell_type clock_network needs the physically aware flow, and TNS-driven targeting with -target_violation_type tns also needs a PrimeTime-ADV license.
  • By default the command does not fix timing on paths that carry DRC violations. fix_eco_timing -ignore_drc (PT) reverses that and may degrade max transition, max capacitance and max fanout.
  • It iterates from the worst violation until everything is fixed or further work is not worth the runtime, minimizing area and power. It then prints the remaining and unfixable violations; -verbose or -estimate_unfixable_reasons explains why, once eco_report_unfixed_reason_max_endpoints (PT) sets how many to report.
  • You can fix against recalculated slack with -pba_mode path or -pba_mode exhaustive, which avoids spending cells on graph-based pessimism.
  • Before any ECO command, set timing_save_pin_arrival_and_slack (PT) to true and run a full timing update, as the ECO setup steps require.

What To Check

  • The -type used and the method list reported in the log.
  • The Final ECO Summary: number of size_cell and insert_buffer commands and the area increase.
  • Unfixable reason codes, for example W (fixing might degrade DRC) or B (delay improvement too small).
  • Hold after the setup pass, and setup after the hold pass.

Command Checks & Actions

PrimeTime (pt_shell)set_app_var timing_save_pin_arrival_and_slack true

Required ECO setting before the full timing update.

PrimeTime (pt_shell)set_app_var eco_report_unfixed_reason_max_endpoints 50

Sets how many unfixable violations get a reason; the reason report needs it.

PrimeTime (pt_shell)fix_eco_timing -type setup -estimate_unfixable_reasons

Estimates why violations cannot be fixed without changing the design.

PrimeTime (pt_shell)fix_eco_timing -type setup

Setup fixing with the default method, sizing only.

PrimeTime (pt_shell)fix_eco_timing -type hold -buffer_list {BUFX2 DLY1X2 DLY2X2}

Hold fixing with sizing plus buffers and delay cells from this list.

PrimeTime (pt_shell)report_global_timing -delay_type max

Checks setup WNS and TNS after each pass.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): A setup pass made only of size_cell changes with a small area increase and no new DRC violations.
  • Suspicious (illustrative): Setup clears but hold violations jump from 60 to 150 because upsized cells sped up short paths.
  • Hard stop: Paths left unfixed with reason W on every stage. DRC violations are blocking timing fixing and must be fixed first.

Common Mistake

The Trap: Expecting fix_eco_timing -type setup (PT) to buffer a long wire. It sizes only by default, so a wire-dominated path is reported unfixable, and the engineer spends a day relaxing margins instead of adding -methods insert_buffer.

What The Interviewer Is Testing

  • Knowing the default method sets and precedence rules without looking them up.
  • Can you explain why setup may spend hold margin but hold may not spend setup?

Follow-up Question & Model Response

"Why may setup fixing create hold violations when hold fixing may not create setup violations?"

Candidate Model Response: The PT UG says it directly: setup is the harder problem. A setup fix needs delay removed, and there are only so many faster cells and shorter wires. A hold fix needs delay added, which is almost always possible somewhere on the path with a buffer or load cell. So the tool protects the scarce resource, setup slack, and lets hold absorb the cost. That is also why setup runs before hold in the recommended order.

Practical Example

Tapeout Scenario: A block has 140 setup violations with WNS -48 ps and 60 hold violations with WNS -18 ps (illustrative). fix_eco_timing -type setup (PT) resizes 276 cells and leaves 9 setup violations with reason B on long nets. Hold violations rise to 71 because some upsized cells sped up short paths. A second setup pass with -methods insert_buffer clears 7 of the 9. Then fix_eco_timing -type hold (PT) fixes all 71 with 18 resizes and 64 buffers, and the setup recheck still shows the same 2 violations, none new.

PnR Flow Mentor Guide

Read the complete 8-chapter PnR Flow Mentor Guide free on the web — library setup through placement, clock tree synthesis, routing, chip finishing, hierarchical implementation, and ECO, all the way to stream-out.

PnR Flow Physical Design Mentor Guide — eight chaptersPnR Flow Mentor GuideEight chapters, library setup through to stream-out. →