dummy_fill_layout

ipkiss3.all.dummy_fill_layout(layout, filling=None, target_layer=<ipkiss3.technology.TechValue object>)

Applies a dummy fill to a layout based on filler spefications.

Provide multiple Filler objects in filling for multiple fill passes on different layer sets.

Parameters:
layout: Layout | LayoutView | PCell

A Layout, LayoutView or PCell to apply dummy filling to.

filling: Sequence[Filler] | None, optional, default=None

A sequence of Filler objects. If not specified, it is created from TECH.DUMMY_FILLING.FILLERS or an error is raised if the PDK does not specify it. TECH.DUMMY_FILLING.FILLERS must be a list of dicts, each dict specifying a set of Filler attributes.

target_layer: Layer | tuple[int, int] | None, optional, default=TECH.DUMMY_FILLING.TARGET_LAYER

A layer which defines the bounding area of the filling operation. If not specified, a default value from the PDK is used (TECH.DUMMY_FILLING.TARGET_LAYER) or None (entire layout) is used if the PDK does not specify it.

Returns:
dummy_filled_layout: Layout

A Layout data container which contains only the dummy instances, which are ARefs. You are supposed to add this to the layout in a generate method of a PCell

Examples

>>> import ipkiss3.all as i3
>>> import si_fab.all as pdk
>>>
>>> class MyCellComplexFill(i3.PCell):
>>>     class Layout(i3.LayoutView):
>>>         def generate(self, layout):
>>>             layout = i3.place_and_route(
>>>                 layout=layout,
>>>                 specs=[i3.Inst("dut", pdk.MZModulator().Layout()), i3.Place("dut", (0, 0))],
>>>             )
>>>             fill_spec = i3.Filler(
>>>                 cell=i3.Box(layer=pdk.TECH.PPLAYER.M1, box_size=(5, 5)),
>>>                 design_buffer=20.0,
>>>                 tile_buffer=1.0,
>>>                 edge_buffer=2.0,
>>>             )
>>>             fill_elements = i3.dummy_fill_layout(layout, filling=[fill_spec])
>>>             layout += fill_elements
>>>             return layout
>>>
>>> MyCellComplexFill().Layout().visualize()