After routing you have 300 setup violations, 50 DRCs and SI noise failures. What order do you attack them in, and why?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
Connectivity first, then DRCs, then timing with signal integrity included, then hold, and re-check DRC and antenna after every round of fixes. Opens and shorts make every other number meaningless. DRC fixes move wires and change parasitics, so timing fixed before DRCs is timing you will fix again.
Technical Explanation
- Start with
check_lvsandcheck_routesfor opens and shorts. An open net has no real delay and a short merges two nets, so any timing number on those nets is meaningless. - Fix routing DRCs next. Clearing a spacing or short violation reroutes wires, and rerouting changes length, layers, vias and neighbours. Every one of those changes the parasitics timing depends on.
- Then fix setup with signal integrity turned on. If noise failures and crosstalk delta delay are part of the problem, the timing you optimize against must include them, or
route_optfixes the wrong paths. - Treat noise failures as their own category. Glitch violations on quiet nets are fixed by upsizing victim drivers, spacing or shielding, which can also improve the setup picture on nearby paths.
- Fix hold after setup. Setup fixes, especially upsizing, speed paths up and can create hold violations; hold fixes add delay and can create small setup violations, so hold goes last with a setup re-check.
- After each wave of timing fixes,
route_optlegalizes and ECO routes, which can bring DRCs or antenna violations back. Re-runcheck_routeseach time. - The loop ends when a full pass changes nothing: connectivity clean, DRCs at zero, setup, hold and noise passing in every scenario.
What To Check
- Opens and shorts from
check_lvs -max_errors 0andcheck_routes. - DRC count and types after each step.
- Setup and hold per scenario with SI enabled, from
report_qor. - Noise violations from
report_noise. - Antenna violations after every rerouting step.
Command Checks & Actions
check_lvs -checks {short open} -max_errors 0Step 1: connectivity, with no reporting cap.
check_routesStep 2 and every loop: DRCs, opens and antenna.
route_eco -nets [get_nets {n1 n2}] -reroute modified_nets_onlyConnects opens and reroutes changed nets with minimal disturbance.
route_optStep 3 and 4: SI-aware setup and hold fixing with legalization and ECO routing.
report_qorTracks setup and hold per scenario after each wave.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): Each step leaves the earlier ones clean, and the final pass changes nothing.
- Suspicious (illustrative): DRCs returning after each
route_optpass, usually in the same congested area. - Hard stop: Timing fixed on a database with opens or shorts, or with SI turned off.
Common Mistake
The Trap: Starting with the 300 setup violations because they look biggest. Two days of route_opt bring setup close to clean, then fixing the 50 DRCs reroutes 400 nets and puts 60 setup violations back. The DRCs should have gone first; they were cheaper to fix, and their reroutes undid the timing work anyway.
What The Interviewer Is Testing
- Whether you order by dependency: what changes the inputs to the next check.
- Do you keep SI on while fixing timing?
- A strong answer shows you plan re-checks rather than treating each category as done once.
Follow-up Question & Model Response
"Would you ever fix timing before DRCs?"
Candidate Model Response: Only if the DRCs are confined to an area that no critical path goes through, and fixing them will not reroute nets outside it. For example, a handful of violations inside a macro channel carrying only slow control signals. Even then, you re-check timing after the DRC fix. The rule exists because DRC fixes move wires; where you can show they will not move the wires that matter, the order matters less.
Practical Example
Tapeout Scenario: A block after routing has 2 opens, 1 short, 50 DRCs, 300 setup violations at WNS -28 ps and 14 noise failures (illustrative). Day one: route_eco fixes the 2 opens, the short is rerouted, and an incremental detail routing pass clears 46 DRCs; 4 left in a macro corner go to pin access guides. With SI on, setup is now 270 violations at -26 ps. Two route_opt passes bring setup to 0 violations and hold to 3, which a third pass clears; the 14 noise failures drop to 0 after victim upsizing and one driver swap. check_routes shows 5 new DRCs from ECO routing, cleared incrementally. A final pass changes nothing, and the block exits.
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