Timing-Driven and Crosstalk-Aware Routing
The idea
Every routing search on these pages minimizes a cost. Timing-driven routing changes nothing about the search and everything about the cost: it makes wire on a critical path more expensive than the same wire on a path with slack, so when nets contest a resource the critical one wins and the others detour. Crosstalk-aware routing adds a second term for the coupling between a net and its neighbours, so aggressors are priced away from sensitive victims:
w(net)timing weight, raised for nets on failing or near-failing paths as reported by STA (Static Timing Analysis)price(edge)the congestion price of the PathFinder negotiation, unchangedcoupling(net, edge)parallel run length beside switching neighbours divided by the spacing to them; the capacitance that injects noise and shifts delaykhow much a unit of coupling is worth against a unit of wirelength, tuned per design
The two effects can oppose each other: escaping an aggressor may require a detour that adds delay. Because both enter the same cost, the router weighs the trade for each net, and the weights encode which matters more.
The recipe
Step 1 (weight). Run STA (Static Timing Analysis) on the current routing (or an estimate); raise w(net) for nets on paths with the worst slack.
Step 2 (route under the weights). Re-run the negotiation. Weighted nets take shorter, lower-coupling routes; unweighted nets absorb the detours.
Step 3 (control coupling). For nets that remain sensitive, apply non-default spacing (a wider gap to neighbours), or shield them with grounded wires on both sides so aggressors couple to a wire that never switches.
Step 4 (iterate). Re-run STA (Static Timing Analysis); repeat until the timing and noise reports are clean. In production this loop runs inside the router's rip-up iterations.
Watch it work: one critical net and one aggressor
Net C is routed plainly, then weighted as critical, then joined by an aggressor on the adjacent track. The walkthrough shows the coupling model, the spacing fix, the shielding fix, and the detour-versus- coupling trade the cost function decides.
Pros, cons, and the trade-off
Strengths
- Same engine: no new search algorithm; every existing router becomes timing-driven by changing its cost.
- Directly targets sign-off: the weights come from the same STA (Static Timing Analysis) that will judge the design.
- Graduated tools: weighting, spacing, and shielding form a ladder from free to expensive, applied only where needed.
Weaknesses
- Chicken and egg: accurate slack needs routed parasitics, which need the routing the slack is meant to steer; early iterations run on estimates.
- Weight tuning is manual: too little and critical nets lose; too much and everything else detours into congestion.
- Coupling is a moving target: an aggressor's route can change in the next iteration, so noise closure can oscillate.
- Shielding and spacing cost capacity: every protected net consumes tracks other nets needed.
The trade-off
Timing-driven routing is the router's cost function learning what the design cares about. It costs iterations and capacity, and it can never be better than the timing estimate feeding it, but it is how routing stops being a wirelength problem and becomes part of timing closure.
Is it actually used today?
The evidence for timing-driven and crosstalk-aware routing comes from open-source router options, commercial user-level controls, and the sign-off flow itself.
- Open source: FastRoute in OpenROAD has a timing-driven mode that raises the weight of critical nets from the STA (Static Timing Analysis) engine; the OpenROAD flow's repair stages apply non-default rules and spacing to nets that fail noise or timing checks.
- Commercial: documented. Every production router exposes timing-driven routing, crosstalk-aware routing, non-default rules, and shielding as options, and signoff noise analysis feeds back into routing repair; the internal weighting schedules are proprietary.
- The flow: timing closure at advanced nodes is a routing-STA (Static Timing Analysis) loop; a router that ignored slack would not close.