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.

Technology

Properties to store a variety of numbers.

get_technology
TechnologyTree A hierarchical tree for storing technology settings.
DelayedInitTechnologyTree 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.

Process

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

GDSII

AutoGdsiiLayerInputMap Maps GDSII layers to Ipkiss Layers with an automatic conversion
AutoGdsiiLayerOutputMap Maps Ipkiss Layers to GDSII Layers with an automatic conversion
GenericGdsiiPPLayerInputMap Map between GDSII Layers and PPLayers
GenericGdsiiPPLayerOutputMap Most generic map between ProcessPurposeLayers and GDSII.
UnconstrainedGdsiiPPLayerInputMap Map of GDSII layer/datatype combinations onto ProcessPurposeLayers.
UnconstrainedGdsiiPPLayerOutputMap Map of ProcessPurposeLayer onto GDSII layer/datatype combinations.

Display

DisplayStyle Display style for a visualization
DisplayStyleSet Set of display styles.
CyclicDisplayStyleSet Set of display styles.

Materials

Material Base material.
MaterialFactory Factory of materials.
MaterialStack A MaterialStack describes a series of materials stacked on top of each other, each with a given height.
MaterialStackFactory

Virtual Fabrication

VFabricationProcessFlow Virtual fabrication process flow.
LayoutView.visualize_2d Visualize a top-down view of the virtually fabricated layout.
LayoutView.cross_section Generate a cross section of the structure along a path

Example

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()
donut_lo.visualize()


# 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",
                            materials_heights=[
                                (air, 1.0),
                                (oxide, 0.5),
                                (air, 1.0)
                            ],
                            display_style=DisplayStyle(color=COLOR_SCARLET)
                            )

stack_air = MaterialStack(name="all air",
                            materials_heights=[
                                (air, 1.0),
                                (air, 0.5),
                                (air, 1.0)
                            ],
                            display_style=DisplayStyle(color=COLOR_BLUE)
                            )

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],
    process_layer_map={
        oxide_dep: i3.Layer(0),
        oxide_etch: i3.Layer(1)
    },
    is_lf_fabrication={
        oxide_dep: False,
        oxide_etch: False
    },
    process_to_material_stack_map=[
        ((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

donut_lo.visualize_2d(process_flow=vfab)
xs = donut_lo.cross_section(cross_section_path=i3.Shape([(0.0, 20.0), (0.0, -20.0)]),
                            process_flow=vfab)
xs.visualize()
../../_images/index-1_00.png
../../_images/index-1_01.png
../../_images/index-1_02.png