BeginnerQuestion 101 of 127Source: Synopsys ICC2 Implementation User Guide: Routing

What are Zroute's engines, and which command drives each?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

Zroute, the ICC2 router, has five engines: global routing, track assignment, detail routing, ECO routing and routing verification. The first three can be run one at a time with route_global, route_track and route_detail, or all together with route_auto. ECO routing and verification are only reached through their own task commands, route_eco and check_routes.

Technical Reference DiagramWhat are Zroute's engines, and which command drives each?
Five Zroute engines drawn as stages: global routing, track assignment, detail routing, ECO routing and routing verification, with the ICC2 command under each.

Technical Explanation

  • Global routing (route_global) assigns net segments to global routing cells and produces the congestion map. It is the only engine that can run in congestion-map-only mode, without keeping any routes.
  • Track assignment (route_track) puts each global segment on a real track. After it finishes, the block no longer has global routes; it has real metal shapes with many violations, especially near pins.
  • Detail routing (route_detail) fixes those violations. It also handles antenna rules, via optimization and concurrent redundant vias during its iterations.
  • ECO routing (route_eco) is for changes after signal routing is complete. It connects open nets and fixes DRCs; with -nets, DRC fixing stays inside those nets' ECO area, while without it the whole block is covered.
  • Routing verification (check_routes) reports DRCs, open nets, antenna violations and voltage area violations on routed signal nets. It writes its results to the zroute.err error data.
  • route_auto chains global routing, track assignment and detail routing. It is the normal choice once the flow is stable; the separate commands are for when you want to stop and look between steps.
  • All engines read the same route.common application options, and each engine also has its own option group, such as route.global, route.track and route.detail.

What To Check

  • After route_global, the overflow summary it prints and the stored congestion map.
  • After route_track, the wire length and via count summary.
  • After route_detail, the DRC count per iteration and whether it is still falling.
  • After any routing step, check_routes for DRCs, opens and antenna violations.

Command Checks & Actions

ICC2route_global

Runs the global routing engine and reports overflow.

ICC2route_track

Runs track assignment on the existing global routes.

ICC2route_detail

Runs detail routing and search-and-repair iterations.

ICC2route_eco -nets {n1 n2} -reroute modified_nets_only

Runs the ECO routing engine on changed nets after signal routing is complete.

ICC2check_routes

Runs routing verification: DRC, opens, antenna and voltage area checks.

ICC2route_auto

Runs global routing, track assignment and detail routing in one command.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): Each engine finishes with its expected output: overflow near zero after global routing, a steadily falling DRC count in detail routing, and check_routes showing zero opens.
  • Suspicious (illustrative): Detail routing DRC count flattens at a few hundred after 10 or more iterations.
  • Hard stop: Open nets after detail routing, or check_routes never run. Opens need route_eco; incremental detail routing does not connect them.

Common Mistake

The Trap: Using route_detail -incremental true to fix open nets reported by check_routes. Incremental detail routing only cleans up DRCs; it does not connect opens. The engineer reruns it three times, the opens stay, while one route_eco run would have connected them.

What The Interviewer Is Testing

  • Whether you know which engines have their own commands and which are only reached through task commands.
  • Do you pick the right engine for a symptom: opens go to ECO routing, DRC clean-up goes to detail routing?
  • A strong answer shows you understand route_auto as a convenience wrapper, not a different router.

Follow-up Question & Model Response

"After route_auto finishes, why run check_routes separately?"

Candidate Model Response: Detail routing reports its own DRC summary, but check_routes is the verification engine and checks the block as it now stands, including antenna and voltage area rules and open nets. It also refreshes zroute.err, which later commands such as incremental detail routing and remove_redundant_shapes can read. If anything has been edited since routing, only a fresh check_routes sees it.

Practical Example

Tapeout Scenario: On a 400k-instance block (illustrative), route_auto finishes with 212 DRCs. check_routes confirms 212 DRCs and also reports 3 open nets on cells that were resized after routing. The engineer runs route_eco on those three nets, which connects them, then check_routes and route_detail -incremental true -initial_drc_from_input true, which drops the DRC count to 18. A final check_routes shows 0 opens and 18 DRCs, all in one macro corner, which go to a separate review.

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