How do spread_wires and widen_wires improve yield, and what do they trade?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
A critical area is where a random particle defect would break the circuit: a conductive particle between two wires causes a short, and a missing piece of metal in a narrow wire causes an open. spread_wires moves wires apart to reduce short risk, and widen_wires makes wires wider to reduce open risk. They compete for the same space, so you balance them and protect timing on critical nets.
Technical Explanation
- Short critical area grows where wires run close together for long lengths. Open critical area grows where wires are narrow.
spread_wiresspreads wires by half a pitch in the preferred direction by default.-pitchchanges that as a multiple of the layer pitch, for example 1.5.- By default it uses twice the layer pitch as the minimum jog length and minimum spacing plus half the pitch as the minimum jog spacing. Jog length is one pitch multiple for all layers (
-min_jog_length); jog spacing can be set per layer with-min_jog_spacing_by_layer_name. widen_wireswidens all wires to 1.5 times their width by default.-widen_widths_by_layer_nameallows up to five widths per layer. Widened wires do not trigger fat wire spacing rules.- Widening shrinks spacing to neighbours, which undoes some of the short-risk gain from spreading.
-spreading_widening_relative_weightonwiden_wiressets the balance: 0 to 0.5 leans toward widening, 0.5 to 1 toward spreading. - Both commands run detail routing iterations to fix any DRCs they create.
- Both support timing preservation with
-timing_preserve_setup_slack_threshold,-timing_preserve_hold_slack_thresholdand-timing_preserve_nets. With a threshold set, spreading skips every net whose slack is at or below it, together with that net's same-layer neighbours within 2 routing pitches; widening likewise skips those critical nets and their neighbours.
What To Check
- DRCs after each command, since both reroute.
- Timing on critical nets before and after.
- Wire length and via count changes from the reports.
- Coupling changes on nets that moved closer to or further from neighbours.
Command Checks & Actions
spread_wires -pitch 1.5 -timing_preserve_setup_slack_threshold 0.02Spreads wires by 1.5 pitches, skipping nets at or below 20 ps setup slack and their close neighbours (illustrative).
widen_wires -widen_widths_by_layer_name {{M2 0.08 0.07}} -spreading_widening_relative_weight 0.5Widens M2 wires using two allowed widths, with equal weight on spreading and widening.
check_routesConfirms the DFM steps left no DRCs.
report_qorChecks that timing held after the geometry changes.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): Wires spread and widened where space allowed, DRCs unchanged, and timing within a picosecond or two.
- Suspicious (illustrative): Timing on some nets moving several picoseconds because they were not protected.
- Hard stop: New DRCs left after the commands, or DFM run before timing closure so every later ECO undoes it.
Common Mistake
The Trap: Running widen_wires without timing preservation on a block with tight setup. Wider wires have more area capacitance, and a handful of short, load-dominated critical nets get slower. Setup fails by a few picoseconds on paths that were closed.
What The Interviewer Is Testing
- Whether you can link each command to the defect type it addresses.
- Do you understand why the two compete?
- A strong answer shows you protect timing and know how each command applies the threshold.
Follow-up Question & Model Response
"When in the flow should these run?"
Candidate Model Response: After detail routing and redundant via insertion, once timing is essentially closed, as a DFM step before signoff. Running them earlier wastes effort, because later optimization and ECOs reroute wires and undo the spreading. Running them with timing preservation at the end keeps the yield gain without reopening timing.
Practical Example
Tapeout Scenario: On a routed block (illustrative), the engineer runs spread_wires -pitch 1.5 with a 20 ps setup threshold. About 70% of eligible M2 to M5 wires move, detail routing iterations clear 14 DRCs, and 3,200 nets near critical paths stay in place. Then widen_wires with a relative weight of 0.5 widens wires where spacing allows. Estimated short critical area drops by roughly a third and open critical area by a quarter, while report_qor shows WNS moving from +3 ps to +2 ps.
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