-
Notifications
You must be signed in to change notification settings - Fork 0
Routing
Routing connects every pin in the design with actual metal. Placement decided where cells sit and Clock Tree Synthesis built the clock network; routing draws the remaining wires and vias on the metal stack, obeying every foundry design rule.
It is the last stage where the design can still be made to work, and the first stage where parasitics are real rather than estimated.
- Complete connectivity — every net routed, zero opens
- DRC clean — no spacing, width, via, or density violations
- Timing — critical nets on fast layers, short paths
- Signal integrity — control crosstalk between neighbouring wires
- Manufacturability — via redundancy, antenna rules, metal density
flowchart LR
A[CTS] --> B[Global Route]
B --> C[Track Assign]
C --> D[Detail Route]
D --> E[Post-route opt]
E --> F[Extraction<br/>SPEF]
F --> G[Signoff]
style B fill:#2d6a9f,color:#fff
style C fill:#2d6a9f,color:#fff
style D fill:#2d6a9f,color:#fff
After routing, parasitic extraction produces SPEF, and Timing Closure finally has real numbers instead of estimates.
| Stage | What it does | Granularity |
|---|---|---|
| Global routing | Plans which coarse regions (GCells) each net passes through | Region-level, no exact wires |
| Track assignment | Assigns nets to specific routing tracks on each layer | Track-level |
| Detailed routing | Draws real geometry and fixes every DRC violation | Exact shapes and vias |
Global routing is fast and predicts congestion — that's why it's used during Floorplanning and Placement as a feasibility check. Detailed routing is slow and is where DRC violations actually get resolved.
Layers alternate preferred direction — horizontal, vertical, horizontal — so that any two points can be reached with few turns.
| Layers | Character | Used for |
|---|---|---|
| Lower (M1–M3) | Thin, high resistance, fine pitch | Local cell-to-cell connections |
| Middle (M4–M6) | Balanced | Block-level routing, power straps |
| Upper (M7+) | Thick, low resistance, coarse pitch | Long-haul signals, clock, power |
Why this matters for timing: a long net stuck on M2 is dramatically slower than the same net promoted to M7. Layer promotion is one of the most effective post-route timing fixes available. In FinFET nodes lower-metal resistance is severe enough that this is often the only fix that works.
Adjacent wires couple capacitively. When an aggressor switches, it disturbs its victim:
- Crosstalk delay — the victim speeds up or slows down depending on switching direction. Can be tens of picoseconds.
- Crosstalk noise (glitch) — a static victim gets a transient pulse. If large enough, it propagates as a false value.
Fixes, in rough order of preference: increase spacing, insert shielding (grounded wires alongside), upsize the victim driver, promote to a higher layer, or reroute away from the aggressor.
| Rule | What it is | Fix |
|---|---|---|
| Antenna | Long metal connected to a gate during fabrication accumulates charge and damages the oxide | Insert antenna diodes, or jump to a higher layer |
| Via redundancy | Single vias are a yield risk | Convert to double/redundant vias |
| Metal density | Foundry requires min and max density per window for CMP planarity | Insert metal fill (usually post-route) |
| Minimum area | Metal shapes below a minimum area are illegal | Tool extends the shape |
# NanoRoute settings
set_db route_design_detail_post_route_spread_wire true
set_db route_design_with_timing_driven true
set_db route_design_with_si_driven true
set_db route_design_antenna_diode_insertion true
# Route
route_design -global_detail
# Or step through
route_design -global
route_design -track_assign
route_design -detail
# Check
check_drc
report_route -summary
verify_connectivity -type all
verify_drc
# Post-route optimization
extract_rc
opt_design -post_route
opt_design -post_route -hold
# Extract parasitics for signoff
write_spef design.spefWhat matters:
-
route_design_with_timing_driven— routes critical nets on better layers and shorter paths -
route_design_with_si_driven— spaces and shields nets to control crosstalk -
extract_rc— computes real parasitics; everything before this was an estimate -
opt_design -post_route— the last chance to fix timing; changes here can create new DRCs, so it's iterative
create_route_rule -name wide_rule -width_multiplier 2 -spacing_multiplier 2
set_db net:critical_bus route_rule wide_ruleroute_special -shield_net VSS -nets {clk_main} -shield_side both_side| Metric | Target | If it's bad |
|---|---|---|
| DRC violations | Zero | Reduce congestion; more routing effort; check Floorplanning |
| Opens / shorts | Zero |
verify_connectivity; usually a congestion symptom |
| Routed wirelength | Minimize | Correlates with power and delay |
| Via count | Minimize | Vias add resistance; excess means excessive layer changes |
| Post-route WNS/TNS | Meet target | Layer promotion, NDR, resize drivers |
| SI-induced delta delay | Small | More spacing, shielding, stronger drivers |
| Antenna violations | Zero | Diode insertion, layer jumping |
The jump from pre-route to post-route timing is often unpleasant — estimated parasitics are optimistic. Expect it and leave margin.
| Problem | Root cause | Fix |
|---|---|---|
| Thousands of DRCs in one region | Local congestion | Fix upstream: density target, blockages, macro placement |
| Routing never converges | Design fundamentally over-utilized | Reduce utilization; this is a Floorplanning problem |
| Timing much worse post-route | Real parasitics vs. estimates | Promote critical nets to upper layers; NDR; resize |
| Crosstalk failures | Long parallel runs on the same layer | Shield, space, or reroute |
| Antenna violations | Long metal on one layer to a gate input | Diodes or layer jumping |
| Post-route opt creates new DRCs | Cell resizing disturbs routed geometry | Iterate opt and route incrementally |
| Clock nets degraded | Routed like ordinary signals | Apply NDR and shielding to clock — see Clock Tree Synthesis |
- Congestion is decided upstream. If detail routing fails, the fix is almost always in Floorplanning or Placement, not in routing options.
- Check global route congestion before committing to a long detail route run. Detail routing a hopeless design wastes hours.
- Reserve upper layers for what needs them — clock, long buses, power. Don't let routine nets consume the fast layers.
- Apply NDRs selectively. Wide-and-spaced routing on everything just creates congestion.
- Expect post-route timing to be worse than post-CTS. Budget for it.
-
Run
verify_connectivityandverify_drcbefore declaring done — the router's own report isn't signoff. - Keep DRC counts trending down run over run. A count that plateaus means a structural problem.
See also: Placement · Clock Tree Synthesis · Timing Closure · Signoff · Physical Design