Metal Fill for Density Control
The idea
After each metal layer is patterned, chemical-mechanical polishing grinds it flat. The polish removes material unevenly where the metal density varies: sparse regions dish and dense regions stay high. The resulting thickness variation changes wire resistance and can spoil the layers built on top. Foundries therefore require the density in every window of a fixed size to stay within a range:
windowa square region of fixed size; the checks slide it across the die at fixed stepsmetal areathe area of all shapes on the layer inside the window, fill includedminimum, maximumthe density range the foundry's rules allow for that layer
Fill insertion adds rectangles of metal, connected to no signal, in the empty space until every window complies. Kahng, Robins, Singh and Zelikovsky (1998) posed this as an optimization. Because the windows overlap at fixed offsets, they divide the die into tiles smaller than a window and decide how much fill each tile receives, by linear programming for an exact answer (keeping every window in range while evening out the density) and by faster Monte Carlo and greedy methods for large layouts.
Watch it work: windows, violations, and greedy fill
One metal layer divided into tiles, with a density rule checked in overlapping windows. The walkthrough computes every window's density, marks the windows that are too empty, and fills the emptiest window first until every window passes.
The fine print
Fill is not free. Every added shape adds capacitance to the signal wires beside it, so timing-aware fill keeps its distance from critical nets, and extraction has to run after fill to see the effect. Fill can float or be tied to a supply; floating fill is simpler to insert, but its coupling is harder to model.
Where you meet it today
OpenROAD's density_fill inserts fill from a set of per-layer rules,
and the finishing walkthrough on this site runs it before the final
timing and power checks.