What does postroute optimization (route_opt) do?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
route_opt fixes timing and logical design rule violations after routing, using real parasitics. It extracts, updates timing, then optimizes setup, hold, area and logical DRCs such as transition and capacitance, typically by sizing and buffering cells. It then legalizes the changed cells and ECO routes to connect the changed nets and clear DRCs, which can also touch neighbouring wires.
Technical Explanation
- Before
route_opt, the block should be fully routed and legal, without an excessive number of routing DRCs. Check withcheck_legalityandcheck_routesfirst. - The documented flow is to update clock latency with
compute_clock_latencyand then runroute_opttwice. The legalization and ECO routing done by the first run can move timing, and the second run cleans that up. - Each run extracts parasitics and updates timing first. By default it uses the PrimeTime delay calculation engine, so its numbers are closer to signoff.
- By default it optimizes setup, hold, area and logical DRCs on data paths. Other optimizations, such as clock-and-data optimization or power, are turned on with
route_opt.flowapplication options. - After changing cells it legalizes them and runs ECO routing, with five detail routing iterations by default, to connect the changed nets and clear DRCs.
- To close the last few violations with minimal disturbance,
route_opt.flow.size_only_modecan restrict it to resizing cells; withtrue_footprintit only swaps to an exact physical match, so no legalization or rerouting is needed. hyper_route_optis a separate postroute engine meant to converge in fewer steps than repeatedroute_optruns; the two are not mixed in one flow, and the separate question on them covers when to choose it.
What To Check
- Setup and hold summary before and after each
route_optpass, withreport_qor. - Worst setup and hold paths with
report_timing. - Transition and capacitance violations with
report_constraints -all_violators. - Routing DRCs and opens after the ECO routing inside
route_opt, withcheck_routes.
Command Checks & Actions
route_optExtracts, updates timing, fixes setup, hold, area and logical DRCs, legalizes and ECO routes.
report_qorSummarizes WNS, TNS and violation counts per scenario and path group.
report_timing -delay_type maxShows the worst setup path after optimization.
report_timing -delay_type minShows the worst hold path, which postroute fixes can move.
check_routesConfirms the ECO routing did not leave DRCs or opens.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): After two passes, setup and hold within a few picoseconds of zero in every active scenario, no DRV violations, and routing DRCs unchanged.
- Suspicious (illustrative): The second pass still making large changes, or hold violations growing as setup gets fixed.
- Hard stop: Hundreds of picoseconds of negative slack going in. That is a placement or CTS problem that
route_optcannot fix.
Common Mistake
The Trap: Running route_opt once and signing off. The first pass legalizes new and resized cells and reroutes their nets, which can move timing on nearby paths. The second pass is where those side effects get cleaned up. Skipping it often leaves a few new small violations that show up at signoff.
What The Interviewer Is Testing
- Whether you know what
route_optdoes in order: extract, time, fix, legalize, reroute. - Do you know the documented two-pass flow?
- A strong answer shows you know its limits: it fixes small problems, not bad placement.
Follow-up Question & Model Response
"Why use a size-only mode for the final route_opt passes?"
Candidate Model Response: Resizing a cell to an exact physical match changes no geometry, so nothing needs to be legalized or rerouted. Adding a buffer needs a legal location, a new net and rerouting of two nets, which can disturb neighbours in a finished block. That is why size-only modes exist for the final passes. Buffering is still used, especially for hold and long nets, but the less the layout moves, the fewer new problems appear.
Practical Example
Tapeout Scenario: A routed block has setup WNS of -22 ps, 140 hold violations and 35 transition violations on routed parasitics (illustrative). After compute_clock_latency and the first route_opt, setup is -4 ps, hold is down to 6 violations, and transitions are clean. The second pass finishes at +1 ps setup with no hold violations. check_routes shows the same 11 DRCs as before, so the ECO routing did not disturb anything.
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