What is a routing corridor, and how strictly is it honoured?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
A routing corridor restricts specific nets to a region made of connected rectangles, optionally with a min and max layer per rectangle. Global routing treats it as a hard constraint, but track assignment and detail routing treat it as soft, so they may step slightly outside to fix a DRC. If a routing guide conflicts with a corridor, the corridor wins.
Technical Explanation
- You create a corridor with
create_routing_corridor, giving a name, a boundary and optionally-min_layer_nameand-max_layer_name. More rectangles are added withcreate_routing_corridor_shape, and nets are assigned withadd_to_routing_corridor. - Path-based corridors are also possible, with
-pathand-width, and end cap styles of flush, full width or half width. - A net or supernet can belong to only one corridor, and the corridor must cover all pins of the nets assigned to it. Otherwise the net cannot be completed inside it.
- The corridor must be contiguous.
check_routing_corridorsverifies that the region is connected and contains the pins of its nets. - Global routing keeps the nets strictly inside the corridor. Track assignment and detail routing treat it as soft, so a net may leave it by a small amount to fix a design rule violation.
- Where a routing guide overlaps a corridor with conflicting settings, the corridor takes precedence.
- Corridors are for a small number of nets that must follow a planned path, such as a bus between two blocks. Using them widely makes routing much harder.
What To Check
check_routing_corridorsresult for each corridor: contiguous and covering all pins.- Which nets are assigned, from
report_routing_corridors. - After routing, whether any assigned net left the corridor, and by how much.
- Congestion inside the corridor, since all its nets compete for the same space.
Command Checks & Actions
create_routing_corridor -name bus_rc -boundary {{10 10} {20 35}} -min_layer_name M2 -max_layer_name M4Creates the first rectangle of the corridor with a layer range.
add_to_routing_corridor bus_rc [get_nets {bus[0] bus[1]}]Assigns the nets to the corridor.
check_routing_corridors bus_rcChecks that the corridor is contiguous and covers the pins of its nets.
route_group -nets [get_nets {bus[0] bus[1]}]Routes the corridor nets as a group.
report_routing_corridorsReports corridors and their nets.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative):
check_routing_corridorsclean, nets routed inside the corridor, with at most small excursions near pins. - Suspicious (illustrative): Several nets leaving the corridor during detail routing, which means it is too narrow for them.
- Hard stop: A corridor that does not cover all pins, or one that is not contiguous. Global routing cannot complete it.
Common Mistake
The Trap: Drawing a corridor that stops a few microns short of one receiver pin. Global routing treats the corridor as hard, so it cannot reach the pin at all, and the net is left open. check_routing_corridors would have reported the missing pin before routing.
What The Interviewer Is Testing
- Whether you remember the hard and soft behaviour by routing stage.
- Do you know the one-corridor-per-net and cover-all-pins rules?
- A strong answer shows you know corridors win over guides.
Follow-up Question & Model Response
"Why is a corridor only soft during detail routing?"
Candidate Model Response: Global routing works on GCells, where keeping a net inside a region is cheap and always possible if the corridor is valid. Detail routing works on exact geometry and has to satisfy spacing and via rules; a hard boundary could leave a DRC with no legal fix. Making it soft lets the router step out by a small amount to resolve a violation, while still keeping the net on its planned path almost everywhere.
Practical Example
Tapeout Scenario: A 16-bit bus must run from an interface block along the left edge and then across to a macro (illustrative). The engineer builds an L-shaped corridor from two rectangles, M4 to M6, assigns the 16 nets, and runs check_routing_corridors, which reports that bit 15's receiver pin sits 2 um outside the second rectangle. After extending it, the check passes and route_group -nets routes all 16 nets inside. Detail routing moves two segments 0.2 um outside the corridor at the macro pins to clear spacing violations, which the soft behaviour allows.
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