Detail routing DRCs won't converge. What do you check?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
First look at the DRC count per iteration to confirm it has really stopped falling. Then group the violations by type and location, because the pattern tells you the cause: a cluster at pins points to pin access, a dense area points to local density, macro edges point to access or blockages, and NDR nets point to rules. Fix that cause and rerun; more iterations rarely help once the curve is flat.
Technical Explanation
- Detail routing prints a DRC summary at the end of each iteration. A curve that drops steeply and then goes flat for several iterations means the router has done what it can locally.
- Group the remaining violations with
get_drc_errors, filtering by type. One dominant type in one place almost always has one cause. - Violations at pins of the same cell type across the block point to pin access: off-track pins, a bad cell abstract or a PG shape covering pins.
check_routabilityhelps confirm it. - A tight cluster in open standard cell area points to local density. Congestion there is high, and the fix is spreading cells or lowering local density.
- Violations along macro edges point to pin access at the macro or a blockage too close to it. Pin access routing guides can help.
- Violations on NDR or shielded nets point to rules: vias that cannot meet the wider enclosure, or too many wide nets in one area.
- If redundant via insertion is running in a high-effort concurrent mode, relaxing it can let DRCs converge.
What To Check
- DRC count per detail routing iteration.
- Violation types and their locations, grouped.
- Congestion and cell density where violations cluster.
- Pin access results from
check_routabilityfor the affected cells. - Any concurrent redundant via mode set above the default.
Command Checks & Actions
check_routesRefreshes the DRC list and error data after the last routing run.
get_drc_errors -error_data zroute.err -filter {type_name == "Diff net spacing"}Pulls out one violation type so you can see where it clusters.
report_congestion -rerun_global_router -boundary {{500 300} {560 360}} -layers {M2 M3}Checks whether the cluster sits in a congested area.
check_routesAfter the fix, records fresh DRC data, since the layout changed.
route_detail -incremental true -initial_drc_from_input trueReruns detail routing starting from those fresh DRCs.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): The count keeps falling each iteration and ends below about 50, spread out and of mixed types.
- Suspicious (illustrative): A plateau of a few hundred violations in one or two places, with a clear cause.
- Hard stop: Thousands of violations spread across the block, which means the block is not routable as placed.
Common Mistake
The Trap: Raising the iteration count and rerunning overnight. The curve was flat at 380 for ten iterations, so the extra iterations bring it to 360 at twice the runtime. Grouping the violations would have shown 300 of them at one macro's pins, fixable with pin access guides.
What The Interviewer Is Testing
- Whether you read the convergence curve before acting.
- Do you diagnose by pattern, not by count?
- A strong answer shows you know which causes need design changes rather than router effort.
Follow-up Question & Model Response
"When is more router effort the right answer?"
Candidate Model Response: When the curve is still falling steadily and the remaining violations are scattered and mixed. That usually means the router was stopped early or the area is tight but solvable. An incremental pass, or allowing more iterations, can finish the job. If the curve is flat, or the violations are concentrated, effort is not the problem.
Practical Example
Tapeout Scenario: Detail routing ends with 612 DRCs, and the last six iterations were 640, 625, 618, 614, 612, 612 (illustrative). Grouping shows 410 end-of-line spacing violations at M2 pins of one flip-flop type, 150 spacing violations in a 40 um square next to a clock gate cluster, and 52 scattered ones. check_routability confirms the flip-flop pins are hard to reach after a library update. The fix is an updated cell abstract plus padding around the clock gates. The next run converges to 8.
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