VLSI

Routing congestion in VLSI

By CourseTron Team ·  8 min read ·  Updated Oct 2026 💬 𝕏 in f
Table of Contents
    ? Print / Save as PDF

    In short: Routing congestion is where the wiring demand in a region exceeds the available routing tracks, and you fix it by spreading the congested cells out through placement adjustment, cell padding, partial blockages, and cleaner netlist/floorplan decisions long before you ever touch a single detailed-route wire.

    Ask any physical-design engineer what keeps them up at night during a tapeout crunch and routing congestion will be near the top of the list. A design can meet timing in placement, pass power checks, and still fail to route because there simply aren't enough metal tracks to carry every net through a crowded region. This article walks through what congestion actually is, how tools visualize it with Global Route Congestion (GRC) maps, and the practical levers you pull to fix it.

    What routing congestion really means

    Every metal layer offers a finite number of routing tracks per unit area. The router divides the die into a grid of rectangular tiles called global routing cells (g-cells), typically on the order of 5-10 placement rows tall and a similar width. For each edge between adjacent g-cells, the tool computes two numbers: supply (how many tracks cross that edge) and demand (how many nets want to cross it). The ratio demand/supply is the congestion. When demand exceeds supply, you have an overflow — nets that physically cannot be routed without detouring.

    A g-cell edge at 120% congestion means 20% more nets want to pass than there are tracks. Even 85-90% is a warning zone: the detailed router needs slack for vias, jogs, and design-rule spacing, so a region that looks "only" 90% full in global route often blows up with DRC violations after detailed route.

    Supply vs demand on one g-cell edge Supply: 10 tracks Demand: 12 nets 2 nets overflow Congestion = demand / supply = 12 / 10 = 120% Keep peak edges well below 100% to leave slack for vias and DRC CourseTron · coursetron.com
    One g-cell edge with 10 tracks and 12 nets: 20% more nets than tracks, so two nets overflow and must detour.

    Reading a GRC (congestion) map

    After a trial or global route, Synopsys IC Compiler II, Cadence Innovus, and Siemens (Aprisa) all produce a color-coded congestion map overlaid on the floorplan. Cool colors (blue/green) are healthy; yellow, orange, and red mark edges above 100%. These red clusters are the hotspots. Engineers report overflow as a count — for example "GRouteOverflow: 418 (H), 102 (V)" — split by horizontal and vertical direction, because a design can be starved in one direction while fine in the other.

    Global-route congestion map (g-cells) HOTSPOT <70%~90%~110%>120% (overflow) Colour = demand / supply on each g-cell edge CourseTron · coursetron.com
    A global-route congestion map: each tile is a g-cell, colored by demand/supply. The red cluster in the center is a hotspot the router cannot resolve without help.

    Why hotspots form

    Congestion is almost never random. The usual culprits:

    • Pin density: macros and standard cells with many closely spaced pins (muxes, large flops, complex AOI cells) concentrate connections in a small area.
    • High-fanout and crossbar logic: a 32-bit datapath mux or a register file feeding many destinations pulls a huge number of nets through one zone.
    • Macro pin channels: when SRAM or IP macro pins all exit one face, the channel beside the macro becomes a bottleneck.
    • Over-aggressive placement density: if placement utilization is 80%+ in a local window, cells sit shoulder-to-shoulder and leave no room for the wires that connect them.
    • Clock and reset nets: dense CTS buffering in a region adds both cells and wires.

    Placement is the root cause of most congestion, which is why understanding placement in VLSI is the foundation for solving routing problems — the router can only work with the cell locations it is handed.

    The fix toolbox

    There is a well-worn hierarchy of fixes, from cheapest to most invasive. Always start upstream.

    TechniqueWhat it doesWhen to use
    Placement density control / global paddingCaps local utilization so cells spread outBroad, diffuse congestion across a block
    Cell padding (instance/keep-out)Reserves blank sites beside congestion-causing cellsSpecific high-pin cells creating local hotspots
    Partial placement blockagesLimits placement density only inside a polygonChannels next to macros, under power straps
    Routing blockages / NDRSteers wires away or widens spacingProtecting critical nets, forcing detours
    Floorplan / macro moveRotates or relocates macros, reshapes channelsStructural, persistent hotspots
    Netlist restructuringSplits high-fanout, re-synthesizes datapathCongestion driven by logic topology

    Cell padding and placement blockages in motion

    The single most common first move is cell padding: you tell the placer to keep, say, 1-2 empty placement sites to the left and right of a flagged cell. In Innovus this is setPlaceMode -place_detail_legalization_inst_gap or a per-instance padding attribute; in ICC2 it is a set_cell_placement_padding directive. The cell count doesn't change, but the effective local density drops, so the placer spreads cells and the wires find room. A partial placement blockage with, for example, 60% density does the same thing over an area rather than per-cell.

    Cell padding opens track space Before: packed After: padded Nets compete for tracks Each net gets a clean track CourseTron · coursetron.com
    Animated: tightly packed cells (left) force wires to compete for the same tracks (red, overflowing). Padding spreads the cells (right) so each net gets its own clean track (blue).

    Rule of thumb: relieving congestion by spreading cells costs area. A block that routes clean at 65% utilization may be unroutable at 78%. Budget 10-15% headroom in congested blocks rather than chasing maximum density and paying for it in ECO churn later.

    A practical debug flow

    1. Run trial/global route and open the GRC map. Note overflow count and H vs V split.
    2. Zoom to the worst hotspot. Overlay pin density and placement density maps to find the cause.
    3. If a few cells dominate, apply instance cell padding and re-place incrementally.
    4. If a channel beside a macro is starved, add a partial placement blockage and consider rotating the macro so pins face open area.
    5. If logic topology is the driver (big muxes, high fanout), feed the congestion back to synthesis — datapath restructuring or logic replication often beats any PnR patch.
    6. Re-run global route, confirm overflow trends toward zero, then commit to detailed route.

    Congestion vs. timing: the tradeoff

    Fixing congestion by spreading cells lengthens wires, which can hurt timing on critical paths. The art is doing both: use congestion-driven placement (every modern placer has a mode that weighs routability alongside wirelength) and reserve manual padding for genuine hotspots. Teams building silicon in production — like the design-services group at Avecas — iterate placement and congestion together rather than treating them as separate stages.

    Want to go from reading GRC maps to actually closing a block? CourseTron's physical-design track takes you through placement, CTS, and congestion-driven routing on real industry tools. Explore the VLSI PnR course →

    Frequently asked questions

    What is the difference between global and detailed routing congestion?

    Global routing works on the coarse g-cell grid and reports demand/supply overflow — it predicts congestion. Detailed routing lays actual wires and will fail with DRC violations (shorts, spacing errors) if the global route left hotspots unresolved. You fix congestion at the global/placement stage so detailed route stays clean.

    Is cell padding the same as a placement blockage?

    They achieve the same goal differently. Cell padding reserves empty sites around specific instances, so it follows the cell wherever it is placed. A placement blockage limits density inside a fixed region of the floorplan regardless of which cells land there. Use padding for cell-driven hotspots and blockages for location-driven ones such as macro channels.

    Why not just add more metal layers?

    More layers add supply and genuinely help, but each masking layer adds cost and the decision is usually fixed by the technology/foundry offering. You rarely get to add a layer late in a project, so placement and padding are the day-to-day tools.

    What congestion number is acceptable before detailed route?

    Aim for zero global-route overflow and peak edge congestion comfortably below 100% — many teams target under 90% to leave slack for vias and DRC. A handful of overflow edges can sometimes be absorbed, but hundreds almost always means detailed route will fail.

    Advertisement