max_windowed_density¶
The chip is split into window × window µm tiles, and the combined density of one
or more layers must be at most value (%) in every tile.
Semantics¶
The dual of min_windowed_density, sharing the same tiling and denominator logic —
see that page for the full explanation of the boundary_layer/boundary_datatype
params and why they use a bounding box rather than the boundary layer’s own drawn area.
A min_windowed_density/max_windowed_density pair on the same layers, window and
boundary forms the usual “keep local fill density within [floor, ceiling]” rule pair,
evaluated tile-by-tile rather than as one chip-wide number.
Layers¶
One or more layers; their merged areas are summed for the numerator, per window.
Parameters¶
windowRequired. The tile size in µm (square tiles).
boundary_layerGDS layer number for the per-window density denominator’s bounding box (e.g. a seal ring). Optional — if omitted, each window’s full nominal area is the denominator.
boundary_datatypeGDS datatype paired with
boundary_layer. Optional, defaults to0.
Violation markers¶
One edge marker per offending window, spanning its four corners, reporting the window’s actual density.
KLayout equivalent¶
layer.without_density(value, nil, tile_size, tile_boundary) — a genuinely tiled
density check (tile_count left at its default, one tile per window), with the tile
boundary set from the seal-ring layer.
Example¶
- id: M4Fil.k
check: max_windowed_density
layers: [Metal4, Metal4.filler, Metal4.mask]
value: 75.00
params:
window: 800.0
boundary_layer: 39 # EdgeSeal — density is only meaningful inside the seal ring