Why and how do you route a subset of nets first?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
You route critical nets first so they get clean, direct paths on the layers you want before thousands of other nets fill the tracks. Clocks are the usual example, but timing-critical signals, buses and nets with special rules benefit too. In ICC2 you give the nets their rules, route them with route_group -nets, and can lock them so later routing does not touch them.
Technical Explanation
- Routing is order-dependent. Nets routed early find more free tracks and take shorter paths; nets routed late fit into what remains.
- For critical nets, set the layer range and any NDR with
set_routing_rulefirst, then route them withroute_group -nets. The rules are what make the early routing worth it. - Clock nets have their own form:
route_group -all_clock_nets -reuse_existing_global_route true. Clocks must be routed without violations before signal routing starts. - After pre-routing, you can protect the nets by setting their
physical_statusattribute tolocked. Frozen nets are skipped by later routing and, by default, bycheck_routes. - Locking has a cost. Frozen nets reduce the router's freedom around them, and if too many are frozen the remaining nets can fail to converge.
- Secondary PG pins are also routed with
route_group, naming the supply net, for example the always-on supply. - Keep the list short. Pre-routing hundreds of "critical" nets mostly moves congestion around and makes the rest of the block harder.
What To Check
- Timing and length of the pre-routed nets against their targets.
- That the nets used the intended layers and NDR.
- DRCs on the pre-routed nets before signal routing starts.
- Congestion around the pre-routed nets after full routing.
Command Checks & Actions
set_routing_rule [get_nets crit_*] -min_routing_layer M5 -max_routing_layer M6Sets the layer range for the critical nets before routing them.
route_group -nets [get_nets crit_*]Routes only the named nets.
set_attribute -objects [get_nets crit_*] -name physical_status -value lockedFreezes the pre-routed nets so later routing does not rip them up.
check_routesChecks DRCs and opens before signal routing; note that frozen nets are skipped unless you ask for them.
report_timing -delay_type max -netsChecks timing on the critical paths using the pre-routed nets.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): The critical nets route on their planned layers with no DRCs and meet timing, and the rest of the block still routes cleanly.
- Suspicious (illustrative): Many locked nets and a detail routing DRC count that plateaus near them.
- Hard stop: A pre-routed net left with DRCs and then locked, which hides the violations from routing and from default
check_routes.
Common Mistake
The Trap: Locking critical nets that still had two DRCs, assuming they would be fixed later. Frozen nets are skipped by later routing and by check_routes by default, so the DRCs are never touched and never reported until signoff DRC finds them.
What The Interviewer Is Testing
- Whether you know why routing order changes quality for specific nets.
- Do you set rules before pre-routing rather than after?
- A strong answer shows you consider the cost of frozen nets on the rest of the block.
Follow-up Question & Model Response
"What changes in your checks once nets are locked?"
Candidate Model Response: Default check_routes excludes frozen nets, so a clean report does not cover them. Use the options that include frozen shapes, or check those nets explicitly, before and after full routing. Also watch congestion and DRCs around them, because they act as fixed obstacles. And if timing changes later, remember that route_opt cannot reroute them, so any fix on those nets must come from cell changes, and nearby fixes have to work around them.
Practical Example
Tapeout Scenario: A block has 24 nets on a timing-critical path between two macros (illustrative). The engineer sets M5 to M6 with set_routing_rule, routes them with route_group -nets, and checks: all 24 route on M5 and M6 with 0 DRCs, and path delay is 42 ps better than in the previous run where they were routed with everything else. They are locked and full routing runs. check_routes with frozen shapes included shows them still clean, and no congestion appears around them.
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