How and why do you set min and max routing layers?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
Min and max routing layers set the band of metal that signal nets are allowed to use. M1 is usually kept for standard cell pins and the top layers for power and top-level routing, so the block routes in the layers between. Set them with set_ignored_layers before placement, because RC estimation and congestion analysis use them as well as the router.
Technical Explanation
set_ignored_layers -min_routing_layer M2 -max_routing_layer M7tells the tool that signal routing lives in M2 to M7. RC estimation and congestion analysis ignore layers outside the band, and routing treats it as a limit (soft by default).- Setting them before placement matters because placement already uses congestion and estimated parasitics. If the band changes later, the placement was optimized against the wrong resources.
- The global min and max are soft by default, so a pin that sits below the min layer can still be reached. You can make them hard, or allow violations only for pin connections, with
route.common.global_min_layer_modeandroute.common.global_max_layer_mode. -rc_congestion_ignored_layerslists extra layers to ignore for RC estimation and congestion only. They must lie between the min and max routing layers.- Per-net layer limits use a different command:
set_routing_rulewith-min_routing_layerand-max_routing_layer. For those, the default is min soft and max hard. - Reserving top layers for the parent level is common in hierarchical designs. Using them in the block steals the resource the top-level integrator planned for.
What To Check
report_ignored_layersshows the min and max layers and any RC or congestion ignored layers.- The congestion map only includes layers inside the band; confirm the layers you expect appear.
- After routing,
report_wirelengthper layer to confirm nothing sits outside the band. - The top-level plan, to confirm which layers the parent owns.
Command Checks & Actions
set_ignored_layers -min_routing_layer M2 -max_routing_layer M7Sets the signal routing band used by RC estimation, congestion analysis and routing.
report_ignored_layersReports the current settings, so you can confirm the band before placement.
remove_ignored_layers -allRemoves the extra RC and congestion ignored layers; the min and max routing layers are removed with their own options.
report_wirelengthAfter routing, shows wire length per layer, which confirms the band was honoured.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative):
report_ignored_layersmatches the block plan, set beforeplace_opt, and routed wire length shows nothing above the max layer. - Suspicious (illustrative): The band was changed after placement, even by one layer; congestion and timing were estimated on the old resources.
- Hard stop: Signal wires on layers reserved for the parent or for PG, or no band set at all on a hierarchical block.
Common Mistake
The Trap: Setting the max routing layer only in the routing script. Placement and CTS then assume the top two layers are available, estimate good timing and low congestion, and routing arrives with two fewer layers than planned. The block that looked easy at placement is suddenly congested and slow.
What The Interviewer Is Testing
- Whether you know the layer band affects estimation, not only routing.
- Can you separate global layer limits from per-net layer rules?
- A strong answer shows you think about who owns the top layers in a hierarchical design.
Follow-up Question & Model Response
"Why keep M1 out of signal routing?"
Candidate Model Response: Standard cell pins and internal cell wiring mostly live on M1, so its tracks are already crowded inside the cells. Routing long signals on M1 blocks pin access for the cells around them. Starting routing at M2 leaves M1 for pins and short connections into them. Pins that are only on M1 can still be reached, because the global min layer is soft by default for pin connections.
Practical Example
Tapeout Scenario: A 10-metal block (illustrative) reserves M9 and M10 for PG and top-level buses. Before placement the engineer runs set_ignored_layers -min_routing_layer M2 -max_routing_layer M8 and checks it with report_ignored_layers. Placement congestion is 0.1% overflow. On a previous run of the same block, the max layer had been left at M10 until routing and then lowered to M8; that run went from 0.1% to 2.6% overflow at routing because the estimate had counted two layers that were never available.
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