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 Explanation
route_ecois for use after signal routing is complete. Before that,route_groupis 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_routesfirst so its DRC information is current. -reroutecontrols how much it may move:any_nets(the default),modified_nets_first_then_othersormodified_nets_only.modified_nets_onlydisturbs least but freezes every connected net, so it suits only very small ECOs and can fail to fix violations;modified_nets_first_then_othersfalls 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 truestarts from the DRC data stored in the block, so runcheck_routesafterroute_ecoto refresh it first.- By default
route_ecouses the detail routing iteration limit of 40, which-max_detail_route_iterationscan change.
What To Check
- Open nets from
check_routesbefore 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
check_routesRefreshes DRC and open net information before ECO routing.
route_eco -nets [get_nets {n1 n2}] -reroute modified_nets_onlyConnects and reroutes only the modified nets, fixing DRCs in their area.
check_routesRefreshes the DRC data after ECO routing.
route_detail -incremental true -initial_drc_from_input trueCleans up remaining DRCs starting from that fresh data.
check_routesConfirms 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_ecofor 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
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