How does the hybrid Custom Router and Zroute flow split the work, and why?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
In the hybrid flow the Custom Router routes the trunks of special nets and deliberately leaves some or all pin connections unfinished, and Zroute completes them. The two routers connect to pins differently, so letting Zroute make the pin connections avoids inconsistencies and DRCs. The split is set with custom.route.skip_connect_pin_type.
Technical Explanation
custom.route.skip_connect_pin_typedefaults tonone, which disables the hybrid flow. Setting it tells the Custom Router which pin connections to leave for Zroute.- The values are
all(the Custom Router completes no pin connections),stdcell(all except standard cell pins),io(all except I/O cell pins),macro(all except macro pins) andauto(it judges pin routability and completes what it can). custom.route.distance_to_net_pinlimits how far the trunk may stop from an unconnected pin, per net.- After
route_custom, runroute_ecoon the same nets. That is where Zroute makes the pin connections. - Then
remove_redundant_shapeson those nets cleans up leftover pieces, androute_detail -incremental truefixes remaining DRCs. - Layer rules are often set with
-min_layer_mode allow_pin_connectionso trunks stay high but pin connections can drop to the pin layers. - The benefit is that each router does what it is best at: the Custom Router handles shielding, matching and special geometry on long trunks, and Zroute handles dense, rule-heavy pin access.
What To Check
- Open pins after
route_custom, which should match the pins you chose to leave. - Opens after
route_eco, which should be zero. - DRCs at pin connections after incremental detail routing.
- That the trunk kept its constraints after Zroute's changes.
Command Checks & Actions
set_app_options -name custom.route.skip_connect_pin_type -value allCustom Router routes trunks only; Zroute will make every pin connection.
route_custom -nets [get_nets {net1 net2}]Routes the trunks with the Custom Router.
route_eco -nets [get_nets {net1 net2}]Zroute completes the pin connections.
remove_redundant_shapes -nets [get_nets {net1 net2}]Removes leftover dangling and floating shapes on those nets.
route_detail -incremental trueClears remaining DRCs.
check_routesConfirms zero opens and DRCs on the hybrid-routed nets.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): Trunks meet their constraints,
route_ecocloses every pin connection, and the final check is clean. - Suspicious (illustrative): A few DRCs at pins where the trunk stopped too close, fixed by tuning the distance to pin.
- Hard stop: Hybrid flow left at
nonewhile the two routers both try to connect pins, producing mismatched pin connections.
Common Mistake
The Trap: Running route_custom with default settings and then route_detail -incremental true to "clean up". The Custom Router made its own pin connections, some of which Zroute considers illegal, and incremental detail routing cannot connect the pins it had to rip up. The hybrid setting and a route_eco step were both missing.
What The Interviewer Is Testing
- Whether you know why the pin connection split exists.
- Do you know the option values and when to pick each?
- A strong answer shows you remember the clean-up sequence after the handoff.
Follow-up Question & Model Response
"When would you choose stdcell rather than all?"
Candidate Model Response: When the net connects to macros or I/O cells where the Custom Router's connection style is fine or even preferred, but also fans out to many standard cell pins, where Zroute's pin access handling is better. stdcell lets the Custom Router finish macro and I/O connections along with the trunk and hands only the standard cell pins to Zroute. all is the simplest choice when you want every pin handled the same way.
Practical Example
Tapeout Scenario: Two shielded clock nets run from a PLL across the block to 40 standard cell clock gates (illustrative). The engineer sets skip_connect_pin_type to stdcell, sets layer rules M3 to M9 with pin-connection mode on the min layer, and uses a distance to pin of 5 um. route_custom routes the shielded trunks and connects the PLL pins, leaving 40 gate pins open. route_eco connects all 40, remove_redundant_shapes removes 12 leftover stubs, and one incremental detail routing pass clears 3 DRCs. check_routes shows the nets clean.
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