Fill empty regions with dummy density tiles
A layer with a large fraction of open space — sparse metal, a mostly-empty active area, a die with wide scribe lanes — can misbehave in CMP (chemical-mechanical polishing) or plasma etch: polish rate and etch rate both depend on local pattern density, so a region with almost nothing on it polishes or etches at a different rate than a dense one nearby, and that difference shows up as a real process defect, not a cosmetic one. The standard fix is dummy fill: scatter small, electrically inert shapes across the empty space so local density stays closer to uniform, while staying clear of anything that actually matters — real routing, contacts, alignment structures.
automates exactly that: pick a small cell to tile, a pitch, a keep-out halo, and which layers count as "real geometry" to stay clear of, and Glyph computes every site that fits before you commit to placing anything.
- Time: ~8 min
- You'll need: Glyph open on any document with at least one layer holding some real geometry — the keep-out geometry is what makes the halo behaviour visible. A blank document works too; you'll just be filling open space with nothing to avoid.
The dialog, field by field
Open . Every field maps directly onto a decision you'd otherwise make by hand:
- Fill region — either the active cell's own content bounding box (the default), or a typed
rectangle (
X0/Y0/X1/Y1in µm), with a Use current selection's bbox button that reads whatever shapes or refs are currently selected and fills in the rectangle from their combined bounds. Sites are only ever generated inside this rectangle — a fill region larger than the actual empty space just means more candidate sites get rejected, not that fill spills outside it. - Fill cell — the cell whose whole footprint gets tiled. Pick any existing cell from the dropdown, or click New square tile… to have Glyph create one for you: a plain 10 µm square boundary on the active layer, named automatically. There's nothing special about that default — it exists so you can try the feature without building a fill cell by hand first; a real dummy-fill cell is usually smaller and simpler than your real geometry, but it can be anything, including a multi-shape pattern of its own.
- Pitch X / Pitch Y — the spacing between tile origins, independently per axis. A pitch equal to the fill cell's own size packs tiles edge-to-edge with no gap between them; a larger pitch spaces them out.
- Keep-out halo — a clearance distance added around every shape on the layers you check below. A site whose tile footprint, once expanded by this halo, would overlap real geometry is rejected — this is what keeps dummy fill from crowding right up against a trace or a pad.
- Keep clear of geometry on these layers — a checklist of every layer in the document. Leaving all of them unchecked fills the whole region regardless of what's on it; checking one or more makes only that layer's geometry (plus the halo) count as an obstacle. A width>0 path on a checked layer counts as its widened ribbon, not its bare centreline, so a wide trace's true footprint is respected.
- Target density (%) — optional; leave it empty for the behaviour above. With a value, Glyph keeps the fill tile and chooses the pitch itself: Pitch X / Pitch Y become the minimum pitch, and the fill cell's layer is brought to the target share of the fill region within ±1 percentage point, counting geometry already on that layer (earlier fill runs included). The preview and the placed toast name the density reached and the pitch used; a target that cannot be reached is refused beside the Preview button with the reason, and nothing is placed.
Preview, then place — never the other way round
The submit button reads Preview the first time, and only becomes Place N tiles once a
preview has been computed for the exact input currently in the dialog. Changing any field —
pitch, halo, region, the fill cell itself — invalidates that cached preview immediately and the
button reverts to Preview, so there is no way to commit a stale count against inputs you've
since edited. The preview line states the split honestly: "Would place N of M candidate sites
— as A AREFs + S SREFs." The empty-region derivation behind this is a real whole-cell boolean
(merge the keep-out geometry, then measure every candidate site against it), which is deliberately
not recomputed on every keystroke — that's why it's a two-step Preview/Place flow rather than a
live-updating count.
A rejected candidate site is an exact call, not a best guess: a site is skipped only when its tile comes closer than the halo to keep-out geometry, measured as true straight-line distance. A site beside a diagonal strip, a ring or a curve is placed when it fits, and the empty middle of a ring or a frame is filled. If you find fewer sites than you expected, the halo is usually why; shrinking it recovers sites, at the cost of fill sitting closer to your geometry.
Why the toast says "AREFs" as well as "SREFs"
Placement is capped at 10,000 candidate sites, and the dialog refuses up front, naming the number, if your pitch and region would ask for more. Below that cap, Glyph doesn't place one SREF per site — it looks for regular, unbroken rectangular runs of at least 4 contiguous sites and compresses each run into a single AREF, the same record GDSII already uses for a rectangular array. Only the ragged remainder — sites broken up by keep-out geometry, or too small a run to qualify — stays as individual SREFs. This is why a dense, mostly-obstacle-free fill of thousands of sites can still cost only a handful of AREF records: the toast and the preview both report the honest split, e.g. "as 2 AREFs + 6 SREFs," so you can see exactly how much the compression actually bought you on your specific layout. The whole placement — however many AREFs and SREFs it ends up as — lands as one undo step.
When to reach for this, and its honest limits
Use it for CMP or etch-loading dummy fill, density-matching between adjacent dies, or filling a scribe lane so it doesn't stand out as an obvious low-density strip on an otherwise uniform wafer. Without a target, the preview reports a region-coverage estimate — the checked keep-out layers' existing coverage plus the fill tiles' own footprint over the region — not the fill layer's own density. With a Target density, the number it reports is the fill layer's real density over the whole fill region, measured as one window. A process density-window spec (a moving window on a stride) is a different question: check the result with , which has a windowed density rule; this tool gets you to a fill pattern fast, it doesn't certify one.
Next steps
Boolean and layer operations covers the other whole-layer, non-destructive tools this dialog's own merge-and-dilate step borrows from. Cells, instances and arrays explains what an AREF actually is and why it's cheap regardless of how many instances it represents. For the width>0-path keep-out behaviour and layer statistics generally, see Layers. Then open the editor and fill the open space on your own design.