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

When would you run route_global, route_track and route_detail separately instead of route_auto?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

Run the steps separately when you want to look at the result of global routing before paying for detail routing. route_auto runs all three engines back to back, which is fine on a stable block. On a new or congested block, stopping after route_global lets you read the congestion map and fix a hot spot in minutes instead of discovering it hours later as thousands of DRCs.

Technical Reference DiagramWhen would you run route_global, route_track and route_detail separately instead of route_auto?
Two lanes: one running route_auto straight through, the other stopping after route_global at a congestion-check decision point before continuing.

Technical Explanation

  • route_auto runs global routing, track assignment and detail routing in one command. It runs the same three engines as the separate commands.
  • Global routing is the cheap part. Detail routing is where most of the runtime goes, often many times longer than global routing on a large block.
  • Stopping after route_global gives you the overflow report and the congestion map from real global routes. If one channel is badly overflowing, you can change placement, add a routing guide or adjust layer usage before any detail routing time is spent.
  • For an even cheaper look, route_global -congestion_map_only true builds the congestion map without keeping any global routes. This is what report_congestion falls back to when no map exists.
  • Running route_track on its own is less common but useful for checking wire length and via counts, or for timing and crosstalk-driven experiments on track assignment.
  • Once a block has been through a few iterations and congestion is known to be fine, route_auto is simpler to maintain in scripts and runs the same engines.

What To Check

  • Overflow reported by route_global, per layer and in total.
  • The congestion map in the GUI, looking for clusters rather than scattered single cells.
  • Wire length and via count summary after route_track.
  • DRC count per detail routing iteration, and whether it is still falling.

Command Checks & Actions

ICC2route_global -congestion_map_only true

Builds a congestion map without saving global routes; the cheapest routability look.

ICC2report_congestion

Summarizes overflow per layer from the stored map.

ICC2route_global

Runs real global routing so you can inspect routes and overflow before continuing.

ICC2route_track

Assigns tracks to the global routes.

ICC2route_detail

Runs detail routing and DRC clean-up.

ICC2route_auto

Runs all three engines in one command once the block is known to be routable.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): Global route overflow at 0 on every layer, so the flow continues straight into track assignment and detail routing.
  • Suspicious (illustrative): Overflow below 0.5% of global routing cells, spread thinly; worth one look at the map, then continue.
  • Hard stop: Overflow concentrated in one channel or next to one macro. Stop, fix placement or add a routing guide, and rerun route_global before any detail routing.

Common Mistake

The Trap: Running route_auto on the first routing pass of a new floorplan. The job runs overnight, detail routing grinds through its iterations and ends with 6,000 DRCs in one channel. The engineer then has to diagnose congestion from DRC markers, when a ten-minute route_global would have shown the overflow directly.

What The Interviewer Is Testing

  • Whether you understand where routing runtime is spent.
  • Do you use global routing as a decision point rather than a formality?
  • A strong answer shows you know the congestion-map-only option exists and when it is enough.

Follow-up Question & Model Response

"Is the congestion map from -congestion_map_only true as good as the one from a full route_global?"

Candidate Model Response: It is built by the same global router, so the overflow picture is the same kind of data, but no global routes are kept afterwards. That is fine when you only want to know where the crowding is. If you want to continue into track assignment, or run timing on global route parasitics, you need real global routes. So use the map-only run for quick what-if checks and a real route_global when you intend to carry on.

Practical Example

Tapeout Scenario: On the first routing pass of a new floorplan, the engineer runs route_global alone. It reports 1.8% of global routing cells overflowing on M3 and M4, all in the 12 um channel between two SRAMs (illustrative). The channel is widened to 20 um in the floorplan and route_global is rerun: overflow drops to 0.1%, scattered. Only then is route_auto launched, finishing with 40 DRCs instead of the thousands the narrow channel would have produced.

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