ExpertQuestion 118 of 121Source: Synopsys ICC2 Implementation User Guide: Routing

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 Reference DiagramHow do spread_wires and widen_wires improve yield, and what do they trade?
Three panels of the same wires: original, spread apart to reduce short risk, and widened to reduce open risk, with a ledger comparing critical area for shorts and opens.

Technical Explanation

  • Short critical area grows where wires run close together for long lengths. Open critical area grows where wires are narrow.
  • spread_wires spreads wires by half a pitch in the preferred direction by default. -pitch changes 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_wires widens all wires to 1.5 times their width by default. -widen_widths_by_layer_name allows 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_weight on widen_wires sets 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_threshold and -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

ICC2spread_wires -pitch 1.5 -timing_preserve_setup_slack_threshold 0.02

Spreads wires by 1.5 pitches, skipping nets at or below 20 ps setup slack and their close neighbours (illustrative).

ICC2widen_wires -widen_widths_by_layer_name {{M2 0.08 0.07}} -spreading_widening_relative_weight 0.5

Widens M2 wires using two allowed widths, with equal weight on spreading and widening.

ICC2check_routes

Confirms the DFM steps left no DRCs.

ICC2report_qor

Checks 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

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. →