Technology Reference

Every IPKISS script starts with the import of a TECHNOLOGY file. The goal of the technology file is to describe a variety of settings that are necessary to design for a specific fabrication technology, and will be shared by the designs that use the same fabrication technology.

In this reference guide you will find the relevant API functions.


Properties to store a variety of numbers.[…]) A hierarchical tree for storing technology settings.…) A hierarchical tree for storing technology settings, but with delayed initialisation : the initialize-function is called only at the moment a value is actually retrieved.


ipkiss.process.layer.ProcessLayer(name, …) ProcessLayer represents a specific process step which requires a defined mask pattern.
ipkiss.process.layer.PatternPurpose(name, …) PatternPurpose represents the usage of geometric patterns for layout
ipkiss.process.layer.ProcessPurposeLayer(…) Combination of a ProcessLayer and a PatternPurpose, defining together a unique i3.Layer.
ipkiss.process.layer.PPLayer alias of ipkiss.process.layer.ProcessPurposeLayer
ipkiss.primitives.layer.Layer([number, …]) Layout layer.


ipkiss.process.layer_map.GenericGdsiiPPLayerInputMap(…) Map between GDSII Layers and PPLayers
ipkiss.process.layer_map.GenericGdsiiPPLayerOutputMap(…) Most generic map between ProcessPurposeLayers and GDSII.…) Maps GDSII layers to Ipkiss Layers with an automatic conversion…) Maps Ipkiss Layers to GDSII Layers with an automatic conversion
ipkiss.process.layer_map.UnconstrainedGdsiiPPLayerInputMap(…) Map of GDSII layer/datatype combinations onto ProcessPurposeLayers.
ipkiss.process.layer_map.UnconstrainedGdsiiPPLayerOutputMap(…) Map of ProcessPurposeLayer onto GDSII layer/datatype combinations.


ipkiss.visualisation.display_style.DisplayStyle(…) Display style for a visualization
ipkiss.visualisation.display_style.DisplayStyleSet([…]) Set of display styles.
ipkiss.visualisation.display_style.CyclicDisplayStyleSet(…) Set of display styles.


pysics.basics.material.material.Material(…) Base material.
pysics.basics.material.material.MaterialFactory Factory of materials.
pysics.basics.material.material_stack.MaterialStack(…) A MaterialStack describes a series of materials stacked on top of each other, each with a given height.

Virtual Fabrication

ipkiss.plugins.vfabrication.process_flow.VFabricationProcessFlow(…) Virtual fabrication process flow.
ipkiss3.pcell.layout.view.LayoutView.visualize_2d([…]) Visualize a top-down view of the virtually fabricated layout.
ipkiss3.pcell.layout.view.LayoutView.cross_section(…) Generate a cross section of the structure along a path


Here is simple example of the definition of a virtual fabrication process and its application to a layout.

import ipkiss3.all as i3

# Define a Donut pcell

class Donut(i3.PCell):
    radius = i3.PositiveNumberProperty(default=10.0)
    inner_radius = i3.PositiveNumberProperty(default=5.0)

    class Layout(i3.LayoutView):
        def _generate_elements(self, elems):
            elems += i3.Circle(layer=i3.Layer(0), radius=self.radius)
            elems += i3.Circle(layer=i3.Layer(1), radius=self.inner_radius)
            return elems

# instantiate the cell and visualize its layout
donut = Donut(radius=15.0, inner_radius=5.0)
donut_lo = donut.Layout()

# Define materials, material stacks and virtual fabrication

from pysics.basics.material.material import Material
from pysics.basics.material.material_stack import MaterialStack
from ipkiss.visualisation.display_style import DisplayStyle
from ipkiss.visualisation.color import COLOR_SCARLET, COLOR_BLUE
from ipkiss.plugins.vfabrication.process_flow import VFabricationProcessFlow

oxide = Material(name="oxide", display_style=DisplayStyle(color=COLOR_SCARLET))
air = Material(name="air", display_style=DisplayStyle(color=COLOR_BLUE))

stack_oxide = MaterialStack(name="oxide slab",
                                (air, 1.0),
                                (oxide, 0.5),
                                (air, 1.0)

stack_air = MaterialStack(name="all air",
                                (air, 1.0),
                                (air, 0.5),
                                (air, 1.0)

oxide_dep = i3.ProcessLayer(name="oxide", extension="OX")
oxide_etch = i3.ProcessLayer(name="oxide etch", extension="NOX")

vfab = VFabricationProcessFlow(
    active_processes=[oxide_dep, oxide_etch],
        oxide_dep: i3.Layer(0),
        oxide_etch: i3.Layer(1)
        oxide_dep: False,
        oxide_etch: False
        ((0, 0), stack_air),
        ((0, 1), stack_air),
        ((1, 0), stack_oxide),
        ((1, 1), stack_air)

# visualize virtual fabrication of the layout: top-down and cross-section

xs = donut_lo.cross_section(cross_section_path=i3.Shape([(0.0, 20.0), (0.0, -20.0)]),