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

When do you use the Custom Router instead of Zroute?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

Use the Custom Router for nets that need geometry Zroute is not built to produce: shielded buses, differential pairs, matched-length groups, and variable-width or variable-spacing routes. Typical cases are DDR interfaces, analog-sensitive nets and critical clocks between blocks. It pre-routes those nets with route_custom, and ICC2 then finishes the rest of the design normally.

Technical Reference DiagramWhen do you use the Custom Router instead of Zroute?
A matched-length bundle of four nets with single-loop extensions on the shorter nets, and a ledger showing each net's length against the tolerance.

Technical Explanation

  • The Custom Router is a shape-based router that can work gridded or gridless. It is aimed at custom digital, mixed-signal and analog routing needs.
  • Its constraint types cover net shielding, differential pairs, matched length, variable width and spacing, and pin width matching and tapering.
  • Constraints are defined as objects: create_bundle groups nets, create_wire_matching sets a length-matching target with a tolerance, create_differential_group defines a pair with its layers, widths, spacings and twisting, and create_net_shielding defines shielding for a bundle.
  • It supports many ICC2 NDR features, including routing layers and vias, width and spacing, routing grids, group spacing, taper halos, blockages, corridors and shielding.
  • Matched-length routing adds single loops to shorter nets to bring them up to the target, which is what DDR flows rely on.
  • Before using it, the technology rules must be complete, pin blockages and connectivity checked, and power and ground already routed.
  • Zroute stays the router for everything else. The Custom Router handles a small set of nets with special rules first, and the normal flow completes the block around them.

What To Check

  • Length mismatch per net against the matching tolerance, from the route log.
  • Shield coverage and differential pair spacing on the custom-routed nets.
  • DRCs on the custom nets with check_routes, including against user shapes.
  • Timing on the bundle after extraction.

Command Checks & Actions

ICC2create_bundle -name ddr_dq0 [get_nets {dq[0] dq[1] dq[2] dq[3]}]

Groups the nets that must be routed and matched together.

ICC2create_wire_matching -for ddr_dq0 -match_type length -tolerance 1

Requires the bundle's net lengths to match within the tolerance.

ICC2route_custom -nets [get_nets {dq[0] dq[1] dq[2] dq[3]}]

Routes the nets with the Custom Router, honouring the constraints.

ICC2check_routes

Checks DRCs and opens on the routed nets.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): All nets in each matched group within tolerance, shielding and pair spacing as specified, no DRCs.
  • Suspicious (illustrative): A few nets outside tolerance, usually fixed by allowing more loop spacing or another layer for the loops.
  • Hard stop: Custom constraints applied to hundreds of ordinary nets, or custom nets routed before power and ground exist.

Common Mistake

The Trap: Trying to hit length matching in Zroute by adding manual detours. The engineer spends a week hand-editing jogs, each ECO disturbs them, and the mismatch creeps back. The Custom Router's matching constraints do this as part of routing and hold it in place.

What The Interviewer Is Testing

  • Whether you can name the net types that need the Custom Router.
  • Do you know how constraints are expressed as objects?
  • A strong answer shows you see it as a pre-routing step inside the normal flow.

Follow-up Question & Model Response

"What does a DDR routing flow look like with the Custom Router?"

Candidate Model Response: Group the DDR nets into bundles, create routing rules and layer ranges for them, and route them with route_custom. Then define single-loop matching and wire matching constraints with a match box covering the available channel, and route again to match lengths. Check the log for mismatches, rebalance layers or loop spacing if needed, then insert buffers on the routes, legalize them, protect the clock shapes, limit rerouting to minor changes, and finish with ECO routing and checks.

Practical Example

Tapeout Scenario: Eight DQ nets and one strobe for a DDR byte lane must match within 20 um (illustrative). They are grouped with create_bundle, constrained to M4 and M5, and routed with route_custom. The log shows lengths from 1,480 um to 1,562 um. With single-loop matching enabled and create_wire_matching set to -match_type length -tolerance 20, a second route_custom adds loops on the six shorter nets and all nine end between 1,548 um and 1,562 um. check_routes reports no DRCs, and the rest of the block is then routed with Zroute around them.

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