ExpertQuestion 121 of 121Source: Synopsys ICC2 Implementation User Guide: Routing

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 Reference DiagramA late functional ECO lands on a fully routed, timing-clean block. How do you implement it with minimum disturbance?
Flow: apply the netlist change, place ECO cells using spare or free sites, lock or protect clean nets, ECO route only modified nets, then re-extract and run the full set of checks, with an inset of one rerouted ECO net.

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_cells places new cells. Its default legalize mode uses free sites only; allow_move_other_cells lets neighbours shift, and minimum_physical_impact is for legalizing cells you have already placed (it needs -legalize_only).
  • Protect what matters: lock clock nets and timing-critical nets by setting physical_status to locked, or use minor_change for 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_others lets 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_opt only 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

ICC2place_eco_cells -eco_changed_cells -legalize_mode allow_move_other_cells

Places the ECO cells, letting nearby cells shift slightly when no free site is close enough.

ICC2route_eco -nets [get_nets eco_*] -reroute modified_nets_only

Routes only the nets changed by the ECO.

ICC2check_routes

Checks DRCs, opens and antenna after the ECO.

ICC2check_lvs -max_errors 0

Checks shorts, opens and floating shapes across all nets.

ICC2route_opt

Only 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

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