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 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_bufferwith-buffer_list. Side-load sizing (-methods size_cell_side_load) works only with-type setupand-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_networkneeds the physically aware flow, and TNS-driven targeting with-target_violation_type tnsalso 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;
-verboseor-estimate_unfixable_reasonsexplains why, onceeco_report_unfixed_reason_max_endpoints(PT) sets how many to report. - You can fix against recalculated slack with
-pba_mode pathor-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
-typeused 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
set_app_var timing_save_pin_arrival_and_slack trueRequired ECO setting before the full timing update.
set_app_var eco_report_unfixed_reason_max_endpoints 50Sets how many unfixable violations get a reason; the reason report needs it.
fix_eco_timing -type setup -estimate_unfixable_reasonsEstimates why violations cannot be fixed without changing the design.
fix_eco_timing -type setupSetup fixing with the default method, sizing only.
fix_eco_timing -type hold -buffer_list {BUFX2 DLY1X2 DLY2X2}Hold fixing with sizing plus buffers and delay cells from this list.
report_global_timing -delay_type maxChecks 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
Master the Physical Design Implementation Flow
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.

Continue practising