Congestion Analysis and Fixes
Why routing fails, and how to find the cause
Congestion is the single most common reason a design will not route, and chasing it is a core physical-design skill. The key insight: congestion is almost always created upstream, in the floorplan or placement, not in the router.
What congestion actually is
The chip is divided into a grid of small regions (global routing cells). Each region has a limited number of routing tracks on each metal layer (the supply). The nets that need to pass through it are the demand. When demand exceeds supply in a region, the leftover is overflow, and that region is congested. Enough overflow and the router cannot legally connect everything.
Reading a congestion map
Tools draw a congestion map: a heat picture of the chip with hot spots where demand exceeds supply. You read it before committing to detailed routing. A few isolated warm cells are fine; large red regions mean the design will not route cleanly and must be fixed first.
The real causes
| Cause | Why it congests |
|---|---|
| Utilization too high | Cells packed tight, no room for wires |
| Poor macro placement | Macros force routes into narrow channels |
| High-fanout or bus-heavy logic | Many wires crowd one region |
| Pin-dense cells clustered | Local pin access demand spikes |
How to fix it
- Reduce utilization in the hot region (cell padding or a soft blockage) to give the router room.
- Improve the floorplan and macro placement so routes are not funneled.
- Spread the clustered cells causing the local spike.
- Restructure or split very high-fanout nets.
the senior instinct: when routing congests, do not first reach for router options, go back and look at the floorplan and placement. Fixing congestion at its source is faster and cleaner than asking the router to perform a miracle. Say that in an interview and you sound like someone who has actually closed a design.
congestion and timing can pull against each other. Spreading cells to relieve congestion lengthens wires and can hurt timing; packing for timing can re-create congestion. Good PD balances the two, iterating rather than over-optimizing one.