BeginnerQuestion 125 of 127Source: Synopsys ICC2 Implementation User Guide: Routing

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 Reference DiagramWhat does postroute optimization (route_opt) do?
Flow: routed block, extraction, timing update, fixes, legalization and ECO routing, then a second route_opt pass and re-check.

Technical Explanation

  • Before route_opt, the block should be fully routed and legal, without an excessive number of routing DRCs. Check with check_legality and check_routes first.
  • The documented flow is to update clock latency with compute_clock_latency and then run route_opt twice. 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.flow application 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_mode can restrict it to resizing cells; with true_footprint it only swaps to an exact physical match, so no legalization or rerouting is needed.
  • hyper_route_opt is a separate postroute engine meant to converge in fewer steps than repeated route_opt runs; 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_opt pass, with report_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, with check_routes.

Command Checks & Actions

ICC2route_opt

Extracts, updates timing, fixes setup, hold, area and logical DRCs, legalizes and ECO routes.

ICC2report_qor

Summarizes WNS, TNS and violation counts per scenario and path group.

ICC2report_timing -delay_type max

Shows the worst setup path after optimization.

ICC2report_timing -delay_type min

Shows the worst hold path, which postroute fixes can move.

ICC2check_routes

Confirms 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_opt cannot 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_opt does 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

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.

PnR Flow Physical Design Mentor Guide — eight chaptersPnR Flow Mentor GuideEight chapters, library setup through to stream-out. →