A late functional ECO lands on a fully routed, timing-clean block. How do you implement it with minimum disturbance?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
Change as little geometry as possible and then re-check everything. Place new cells on spare cells or free sites near their connections, protect the clean nets you cannot afford to move, and ECO route only the modified nets. Then re-extract and rerun the full set of checks: DRC, LVS, antenna, and timing in every scenario.
Technical Explanation
- Start from the netlist change and list exactly which cells and nets it touches. Everything else should stay as it is.
- If spare cells were placed earlier, map the new logic onto them where possible. Otherwise
place_eco_cellsplaces new cells. Its default legalize mode uses free sites only;allow_move_other_cellslets neighbours shift, andminimum_physical_impactis for legalizing cells you have already placed (it needs-legalize_only). - Protect what matters: lock clock nets and timing-critical nets by setting
physical_statustolocked, or useminor_changefor nets that can take small adjustments. - Route with
route_eco -reroute modified_nets_only, so only the changed nets get new geometry; if it cannot converge,modified_nets_first_then_otherslets it move nearby nets as well. Follow with incremental detail routing if a few DRCs remain. - Re-extract parasitics and rerun timing in every scenario, with signal integrity on. Even an untouched path can change if a new wire runs beside it.
- Run the full checks again:
check_routes,check_lvs, antenna, and multivoltage checks if the block has power domains. - Use
route_optonly if timing needs it, and prefer a size-only mode so the fix does not trigger more placement and routing changes.
What To Check
- The list of changed cells and nets against the ECO request.
- Nets rerouted, compared with nets that should have changed.
- Opens, shorts, DRCs and antenna after the ECO.
- Timing in every scenario on re-extracted parasitics.
Command Checks & Actions
place_eco_cells -eco_changed_cells -legalize_mode allow_move_other_cellsPlaces the ECO cells, letting nearby cells shift slightly when no free site is close enough.
route_eco -nets [get_nets eco_*] -reroute modified_nets_onlyRoutes only the nets changed by the ECO.
check_routesChecks DRCs, opens and antenna after the ECO.
check_lvs -max_errors 0Checks shorts, opens and floating shapes across all nets.
route_optOnly if timing needs it, preferably in a size-only mode.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): Only the ECO nets and cells changed, all checks clean, and timing moves by a picosecond or two outside the ECO paths.
- Suspicious (illustrative): A few neighbouring nets rerouted to fix DRCs, with small timing shifts to re-check.
- Hard stop: A large number of unrelated cells moved or nets rerouted, meaning the ECO was implemented as a small re-implementation.
Common Mistake
The Trap: Implementing the ECO and running a full route_opt "to be safe". It resizes and moves hundreds of cells that had nothing to do with the change and reroutes their nets. The block that was clean now needs a full re-verification of paths that were never part of the ECO.
What The Interviewer Is Testing
- Whether you plan each step to limit disturbance.
- Do you re-verify fully despite the small change?
- A strong answer shows you know which tools limit changes at each step.
Follow-up Question & Model Response
"What changes if the ECO must be metal-only?"
Candidate Model Response: Then you cannot add or move cells, because base layers are fixed. New logic must be built from spare cells or programmable spare cells already on the die, and only metal and via layers change. The flow maps the ECO onto those spares, routes the connections, and checks everything again. It is slower to plan, but no base masks change.
Practical Example
Tapeout Scenario: A late ECO adds a 3-gate enable qualifier and changes 5 nets on a routed, timing-clean block (illustrative). Spare cells within 20 um cover two of the gates, and place_eco_cells with allow_move_other_cells places the third, nudging two filler cells. The engineer locks 180 clock nets, runs route_eco -reroute modified_nets_only on the 5 nets plus 2 new ones, and one incremental detail routing pass clears 2 DRCs. Re-extraction and SI timing show WNS unchanged at +2 ps and one hold path at +1 ps. check_routes, check_lvs -max_errors 0 and the antenna check all come back clean.
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