Why is metal fill required, and what do density rules check?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
Chemical mechanical polishing flattens each metal layer, and it removes material unevenly when metal density varies across the die. Density rules check the fraction of each window covered by metal, with a minimum and a maximum, and often a limit on how much density can change between neighbouring windows. Metal fill adds floating shapes in empty areas so every window meets those limits.
Technical Explanation
- During CMP, sparse areas dish and dense areas erode differently, so the surface ends up uneven. That changes wire thickness, hurts lithography focus for the layers above, and can leave shorts or opens.
- The ICC2 guide lists the density rules IC Validator can check and fix: minimum density per checking window, density gradient between adjacent windows, and maximum open area, the largest empty square allowed.
- Minimum density comes from the
minDensityattribute in theDensityRulesection of the technology file. If it is not defined for a layer, IC Validator uses a default of 10 percent. Gradient is checked only ifmaxGradientDensityis defined. The guide ties these in-design density checks to density error fixing, enabled withsignoff.create_metal_fill.fix_density_errors(ICC2), which defaults to false. signoff_create_metal_fill(ICC2) inserts fill through IC Validator In-Design and needs an IC Validator license. Pattern-based fill, the default, uses the foundry fill runset named insignoff.create_metal_fill.runset(ICC2). Track-based fill with-track_fill(ICC2) uses a runset derived from the technology file instead.- Save the block first, because the fill run reads the on-disk data. Fill shapes are stored in fill cells named
FILL_INST_#, which you can list withget_fill_cells(ICC2). - Maximum density matters too. Very wide or very dense metal can exceed the upper limit; that is fixed with slotting or by spreading wires, not by fill.
- By default the command removes existing fill from the whole block before inserting new fill, so rerunning it is a full replacement unless you use incremental options.
Formula Or Decision Rule
- Window density = (metal area inside window) / (window area) × 100%.
- Pass when min_density ≤ window density ≤ max_density for every window on the layer.
- Gradient check (if defined): |density(window A) − density(adjacent window B)| ≤ max_gradient.
- Fill needed in a window ≈ (min_density − current density) × window area, plus margin for spacing keep-outs.
- Window size, step and limits are foundry values; the numbers used here are illustrative.
What To Check
- Density violations per layer after fill, from a DRC run with the density rules enabled.
- Whether any window is over the maximum, which fill cannot fix.
- That fill avoids routing blockages and keep-out regions as intended.
- That the block was saved before the fill run.
- That fill is present in the final stream when the flow expects it there.
Command Checks & Actions
set_app_options -name signoff.create_metal_fill.runset -value fill_runset.rsNames the foundry fill runset for pattern-based fill.
save_blockSaves the block, since the fill run uses on-disk data.
signoff_create_metal_fillInserts metal and via fill through IC Validator In-Design; needs an IC Validator license.
get_fill_cells -hierarchicalLists the fill cells created, including those in lower hierarchy.
signoff_check_drcRechecks the filled block, including density rules, on the saved design.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): Every window between the minimum and maximum limits on all layers, with no gradient violations.
- Suspicious (illustrative): A handful of windows just under minimum near large macros where fill is blocked; check whether the foundry allows them.
- Hard stop: Windows over the maximum density on a wide power-strap layer; fill will not fix that and the grid needs changing.
Common Mistake
The Trap: Assuming that because the block looked dense, fill was not needed on the top routing layers. The block is streamed out without fill on M9 and M10, and the foundry density check at intake reports 3,000 windows under minimum. The team has to add fill, rerun extraction and timing, and resubmit.
What The Interviewer Is Testing
- Can the candidate explain CMP as the reason, not just "the foundry requires it"?
- Knowing both minimum and maximum limits, and the gradient check.
- Whether they know fill is floating metal that adds capacitance.
Follow-up Question & Model Response
"If a window is above maximum density, can metal fill fix it?"
Candidate Model Response: No. Fill only adds metal, so it can raise density but never lower it. Above-maximum windows come from wide straps or tightly packed wide wires. The fix is to split or slot wide shapes as the rules allow, or spread the routing so the metal in that window drops. I would check this before fill so the grid design does not need to change late.
Practical Example
Tapeout Scenario: On M3, a 50 µm × 50 µm density window (2,500 µm²) near a macro has 450 µm² of signal metal, 18% density, against an illustrative minimum of 25% and maximum of 80%. It needs at least 175 µm² more metal. After signoff_create_metal_fill (ICC2), the window has 650 µm² of fill plus the 450 µm² of signal, 1,100 µm² in total, which is 44%. The adjacent window sits at 52%, a gradient of 8 points against an illustrative limit of 30.
PnR Flow Mentor Guide
Master the Physical Design Implementation Flow
Read the complete 8-chapter PnR Flow Mentor Guide free on the web — library setup through placement, clock tree synthesis, routing, chip finishing, hierarchical implementation, and ECO, all the way to stream-out.

Continue practising