What must be true before you start routing?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
The block has to be routable and roughly timing-clean before the router touches it. That means power and ground already routed, clocks built and propagated, estimated congestion acceptable, estimated timing close to zero slack, no max capacitance or transition violations, and a clean check_routability. Zroute also needs every design rule defined in the technology file, because that is the only place it reads rules from.
Technical Explanation
- Zroute takes all of its design rule information from the technology file. If a spacing or via rule is missing there, the router will not honour it, and the error only appears later in signoff DRC.
- Power and ground should already be routed, normally during design planning, before placement. Signal routing has to work around the PG straps and rails, so routing signals first and adding PG afterwards does not work.
- CTS and its optimization should be complete, with clocks propagated. If the clock tree changes after signal routing, the router has to rip up and redo wires around it.
- Estimated congestion must be acceptable. Global routing overflow is the router telling you there are not enough tracks. A hot spot at this stage will turn into a cluster of detail routing DRCs that refuse to converge.
- Estimated timing should sit near 0 ns slack, and there should be no max capacitance or max transition violations. Routing adds delay; it does not remove it. A path that is already -50 ps before routing will be worse after.
check_routabilityshould come back clean. It finds blocked standard cell and macro pins, pins outside the block boundary, off-grid pins and bad via definitions, all of which the router cannot fix.
What To Check
check_routabilityoutput: zero blocked ports, zero out-of-boundary pins, zero min-grid violations.report_congestion: overflow total and the number of overflowing global routing cells per layer.report_timingworst setup path on estimated parasitics, and its slack.report_constraints -all_violators: any max transition or max capacitance violations.check_legality: every cell on a legal site with no overlaps.
Command Checks & Actions
check_routabilityChecks pin access, out-of-boundary pins, min-grid alignment and via definitions before routing starts.
report_congestionReports global route overflow per layer from the stored congestion map, or runs a congestion-map-only global route if none exists.
report_timing -delay_type maxShows the worst setup path on estimated parasitics, so you know how much margin routing can eat.
report_constraints -all_violatorsLists max transition and max capacitance violations that must be fixed before routing.
check_legalityConfirms placement is legal; the router assumes cells sit on legal sites.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative):
check_routabilityclean, overflow 0 on every layer, worst setup slack at or above -5 ps, zero transition and capacitance violations. - Suspicious (illustrative): Fewer than 0.5% of global routing cells overflowing, or a few tens of picoseconds of negative slack that you can explain.
- Hard stop: Any blocked pin reported by
check_routability, PG not yet routed, or clocks still ideal. Stop and fix these before routing.
Common Mistake
The Trap: Starting routing on ideal clocks because "CTS is nearly done". Once the clock tree is inserted, the router has to reroute around new buffers and clock wires, and every timing number from the first routing run is thrown away. It costs a full routing run, often most of a day on a large block.
What The Interviewer Is Testing
- Whether you know that the tech file is the router's only rule source.
- Do you treat congestion and pin access as entry gates rather than routing problems?
- A strong answer shows you can name the checking command for each prerequisite instead of listing the prerequisites from memory.
Follow-up Question & Model Response
"What does check_routability catch that report_congestion cannot?"
Candidate Model Response: report_congestion measures demand against supply in each global routing cell, so it tells you about crowding. check_routability looks at individual pins and definitions. It finds a pin that has no legal way out because a blockage or PG shape covers it, a pin outside the block boundary, and pins off the minimum grid. A block can have zero overflow and still have one blocked macro pin that will become an open net. You need both checks.
Practical Example
Tapeout Scenario: A block passes placement with overflow of 0.2% (illustrative). check_routability reports 14 blocked standard cell ports, all under one PG strap that was widened late. The team moves that strap by one track, reruns check_routability to zero, and only then launches routing. If they had skipped the check, those 14 pins would have shown up as open nets after an eight-hour route_auto, and incremental detail routing would not have fixed them.
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