IntermediateQuestion 154 of 162Source: Synopsys ICC2 Implementation User Guide: Routing

After optimization changes nets, how do you reroute without disturbing clean routing?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

Use ECO routing limited to the changed nets; for a small ECO that is route_eco -reroute modified_nets_only. It connects open nets first and then fixes DRCs in the ECO area, leaving everything else as it was. Remember that incremental detail routing does not fix opens, so after netlist changes route_eco is the right tool, not route_detail -incremental.

Technical Reference DiagramAfter optimization changes nets, how do you reroute without disturbing clean routing?
A clean routed area in grey with only two modified nets rerouted in blue, the rest of the wires untouched.

Technical Explanation

  • route_eco is for use after signal routing is complete. Before that, route_group is the tool for routing selected nets.
  • With -nets, it first connects the open nets in the list and then fixes design rule violations in the ECO routing area, which is at least the bounding box of those nets.
  • When fixing DRCs, it works on all nets inside the ECO area, not only the listed ones, but it does not look at violations outside that area. Run check_routes first so its DRC information is current.
  • -reroute controls how much it may move: any_nets (the default), modified_nets_first_then_others or modified_nets_only. modified_nets_only disturbs least but freezes every connected net, so it suits only very small ECOs and can fail to fix violations; modified_nets_first_then_others falls back to other nets if it must.
  • Incremental detail routing, route_detail -incremental true, is a DRC clean-up pass. It does not connect opens.
  • route_detail -incremental true -initial_drc_from_input true starts from the DRC data stored in the block, so run check_routes after route_eco to refresh it first.
  • By default route_eco uses the detail routing iteration limit of 40, which -max_detail_route_iterations can change.

What To Check

  • Open nets from check_routes before and after ECO routing.
  • DRC count before and after, and whether any new DRCs appeared outside the modified nets' area.
  • How many unmodified nets were rerouted, which should be zero or very few with modified_nets_only.
  • Timing on nets near the ECO area after re-extraction.

Command Checks & Actions

ICC2check_routes

Refreshes DRC and open net information before ECO routing.

ICC2route_eco -nets [get_nets {n1 n2}] -reroute modified_nets_only

Connects and reroutes only the modified nets, fixing DRCs in their area.

ICC2check_routes

Refreshes the DRC data after ECO routing.

ICC2route_detail -incremental true -initial_drc_from_input true

Cleans up remaining DRCs starting from that fresh data.

ICC2check_routes

Confirms zero opens and no new DRCs after the ECO.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): Zero opens after route_eco, DRCs equal to or below the pre-ECO count, and unmodified nets untouched.
  • Suspicious (illustrative): A few new DRCs in the ECO area that one incremental detail routing pass clears.
  • Hard stop: Opens left after running only incremental detail routing, or many unmodified nets rerouted because the reroute mode allowed it.

Common Mistake

The Trap: Running route_detail -incremental true three times after an ECO and wondering why check_routes still reports opens. Incremental detail routing only fixes DRCs. One route_eco on the changed nets would have connected them.

What The Interviewer Is Testing

  • Whether you pick route_eco for opens and incremental detail routing for DRCs.
  • Do you know what the ECO routing area is and what happens outside it?
  • A strong answer shows you control disturbance with the reroute mode.

Follow-up Question & Model Response

"Why run check_routes before route_eco -nets?"

Candidate Model Response: When you give -nets, route_eco only looks for violations inside the ECO area and relies on the stored DRC information. If that information is stale, from before the netlist change, it may miss violations that the change created or chase ones that no longer exist. A fresh check_routes makes sure the ECO step works from the current state of the block.

Practical Example

Tapeout Scenario: A timing ECO resizes 30 cells and inserts 6 buffers (illustrative). check_routes then reports 12 open nets, the new buffer connections, and 4 new DRCs. The engineer runs route_eco -nets on the 12 nets with -reroute modified_nets_only, which connects all 12 and leaves 2 of the new DRCs. After a fresh check_routes, one route_detail -incremental true -initial_drc_from_input true clears those. A final check_routes shows 0 opens and the same 3 old DRCs the block had before the ECO, and only 14 nets have new geometry.

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