Postroute, concurrent or near-100% redundant vias: how do you escalate?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
Start with postroute insertion, which almost every block uses. If that reaches about 80% and you need more, move to concurrent soft-rule insertion, which reserves space for second cuts while routing. Only if you already reach about 90% and still need more should you use near-100% insertion, because higher rates make DRC convergence and runtime worse.
Technical Explanation
- Postroute insertion runs
add_redundant_viasafter detail routing and converts single vias where space already exists. It is cheap and has little effect on routing. - Concurrent soft-rule insertion sets
route.common.concurrent_redundant_via_modetoreserve_space. The router reserves space for second cuts during routing, but the actual insertion still needs a postrouteadd_redundant_viasrun. - Reserving space makes routing slower. It should be enabled before
place_opt, so congestion estimation accounts for it. - The concurrent effort level defaults to low. Low and medium affect only global routing and track assignment; high also affects detail routing and can hurt DRC convergence.
- Near-100% insertion sets the mode to
insert_at_high_cost. Redundant vias become as important as hard design rules. If DRCs will not converge, Zroute relaxes the redundant via constraints automatically. - Near-100% is only supported during initial routing. During ECO routing, use the soft-rule ECO mode to keep the rate, and only if near-100% was used initially.
- Very high rates may need lower floorplan utilization, because second cuts need space everywhere.
What To Check
- The conversion rate after postroute insertion, total and per via layer.
- DRC count and detail routing runtime after enabling each stronger mode.
- Whether the block really has a rate requirement above what postroute achieved.
- That the stronger mode was enabled before
place_opt, not just before routing.
Command Checks & Actions
add_redundant_viasPostroute insertion and the conversion rate report; the first step for every block.
set_app_options -name route.common.concurrent_redundant_via_mode -value reserve_spaceConcurrent soft-rule mode: reserves space during routing, insertion still done postroute.
set_app_options -name route.common.concurrent_redundant_via_mode -value insert_at_high_costNear-100% mode: treats redundant vias as hard rules during initial routing.
report_design -routingReports the double via conversion rate per layer and for the block after each attempt.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): Postroute insertion reaches the target, often 80 to 90%, with no new DRCs; no escalation needed.
- Suspicious (illustrative): Soft-rule mode adding a few percent at a noticeable runtime cost; worth it only if the target requires it.
- Hard stop: Near-100% mode on a congested block with DRCs that do not converge, or near-100% used during ECO routing.
Common Mistake
The Trap: Turning on near-100% insertion on a new block because "more vias is always better". Detail routing runtime doubles, DRCs plateau at several hundred, and the tool starts relaxing the rule anyway. Postroute insertion alone would have given 85%, which met the actual requirement.
What The Interviewer Is Testing
- Whether you know the order and the 80% and 90% thresholds.
- Do you know what each mode costs?
- A strong answer shows you know near-100% is not for ECO routing.
Follow-up Question & Model Response
"Why should concurrent mode be enabled before place_opt?"
Candidate Model Response: Reserving space for second cuts reduces the effective routing capacity. If placement and its congestion estimate do not know about that, they optimize against more capacity than routing will have, and the block arrives at routing more congested than expected. Enabling it early lets congestion estimation include the reserved space, so placement spreads cells accordingly.
Practical Example
Tapeout Scenario: A block reaches 82% with postroute insertion (illustrative). Its reliability target is 90%, so the team enables reserve_space before place_opt and reruns. Detail routing takes 15% longer, and postroute insertion now reaches 91% with no new DRCs. A second block already at 93% is asked to reach 98%; the team tries insert_at_high_cost, sees DRCs stall at 600, and pushes back on the target instead of lowering utilization.
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