ExpertQuestion 115 of 121Source: Synopsys ICC2 Implementation User Guide: Routing

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 Reference DiagramHow does the hybrid Custom Router and Zroute flow split the work, and why?
Two lanes: the Custom Router routes trunks and leaves chosen pin connections open, then Zroute completes the pin connections, followed by cleanup and incremental detail routing.

Technical Explanation

  • custom.route.skip_connect_pin_type defaults to none, 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) and auto (it judges pin routability and completes what it can).
  • custom.route.distance_to_net_pin limits how far the trunk may stop from an unconnected pin, per net.
  • After route_custom, run route_eco on the same nets. That is where Zroute makes the pin connections.
  • Then remove_redundant_shapes on those nets cleans up leftover pieces, and route_detail -incremental true fixes remaining DRCs.
  • Layer rules are often set with -min_layer_mode allow_pin_connection so 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

ICC2set_app_options -name custom.route.skip_connect_pin_type -value all

Custom Router routes trunks only; Zroute will make every pin connection.

ICC2route_custom -nets [get_nets {net1 net2}]

Routes the trunks with the Custom Router.

ICC2route_eco -nets [get_nets {net1 net2}]

Zroute completes the pin connections.

ICC2remove_redundant_shapes -nets [get_nets {net1 net2}]

Removes leftover dangling and floating shapes on those nets.

ICC2route_detail -incremental true

Clears remaining DRCs.

ICC2check_routes

Confirms zero opens and DRCs on the hybrid-routed nets.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): Trunks meet their constraints, route_eco closes 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 none while 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

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