Ipkiss is a design automation framework with a large set of features. These are divided into several modules each implementing a specific part of the functionality.
This section gives a very brief overview of the components and functionality of Ipkiss. In order to start practically learning Ipkiss, a set of tutorials is provided which take the new user step by step through working examples.
Python has always been a weakly typed scripting language in which the type of an object is not enforced and can change at any time. Ipkiss adds a layer on top of this for adding type enforcement and caching. One can define objects containing strongly typed ‘properties’. The values of these properties are cached (since they could be based on large calculations or even simulations), and the type of assigned values is checked. This also includes capability for range checking etc.
At the core of Ipkiss is a framework for defining Parametric Cells (PCells) and their Views such as layout, netlist, compact model, etc. While predefined Views are available, this framework is extensible and it could in principle be used for anything related to design automation.
Ipkiss contains primitives for describing geometric objects and operations for all the usual things you want to do with geometric objects:
- Coordinates, Vectors and Shapes
- A range of predefined Shapes (line, ellipse, circle, square, arc, wedge, regular polygons, splines, …)
- Transformations: identity, magnification, mirroring, rotation, stretching, translation
- Functions for obtaining information about shapes and size information about geometric objects
- Functions for fitting in bounding box, removing loops, extending, growing, stubbing, rounding, sampling, …
These geometric functionality is used by the layout and other frameworks in Ipkiss, but can be used for implementing other parts of the user’s design flow as well.
Ipkiss supports all the necessary primitives and functionality for describing and handling the layout of integrated circuits:
- Layers to draw elements on
- Elements for describing the actual (mask) drawings
- Shape Elements containing a Shape (geometric data) on a Layer, amongst others Paths (wire-like elements) and Boundaries (polygons); various elements are predefined.
- Text Elements describing text on a Layer; Text fonts
- Reference Elements for creating hierarchy by referring to another PCell’s Layout view
- Ports for describing a PCell’s physical input/output locations and their properties (such as the waveguide template)
- Filters for filtering a layout before handling (typically before exporting): cutting Paths and Boundaries, removing layers, scrambling names, transforming Paths into Boundaries
- Boolean operations (AND, OR, XOR, A NOT B)
Ipkiss also offers functionality for output to and input from GDSII files. In combination with the provided Filters, Ipkiss achieves compatibility with major design automation tools for tape-out.
Ipkiss supports python script-based netlisting capabilities. The netlist of each PCell can be described as a View, as well as the hierarchical structure of a design.
This is done by providing the usual primitives:
- Terms for describing the logical inputs and outputs to/from the PCell
- Instances for referring to another PCell (‘s netlist view)
- Nets for describing the internal connectivity of a PCell
Ipkiss has a built-in circuit simulator called Caphe. Caphe takes compact models (S-Matrix, ordinary differential equations, …), solves the network (as described by its netlist, or rather the model derived from its netlist), and returns the results.
Caphe supports simulation in both frequency domain (for networks of linear components with S-Matrix models) and time domain (also supporting networks with non-linear components).
Compact models are defined on a PCell as Views. Multiple models can be attached to one PCell, and even multiple models of the same type. Hierarchical PCells can be described with a Model which dives into the hierarchy as described by the netlist of the PCell.
Because in Ipkiss you declare the compact model and the layout of a cell together, it’s straightforward to build a model that corresponds with the layout.
Almost all Ipkiss primitives and functions rely on technology information. This technology information is loaded by the user as the first thing in a script, or by Ipkiss if none was loaded by the user. The technology ‘file’ consists of a hierarchical tree of settings a ‘TECH’ object. Developers of design kits or users using their own technology should write such a technology file. Ipkiss provides a few baseline technology files which can be used to learn Ipkiss or as a basis for your custom technology file.
Ipkiss provides primitives for describing Process Layers (relating usually to a specific process module) and drawing Purposes. The technology tree specifies all the process layers, drawing purposes, and associated GDSII import/export settings, for a given technology. The technology tree also contains design rules or default values for components on certain process layers (e.g. waveguide width, bend radius, waveguide spacing, contact plug width, …), and can contain a simplified description of the process in order to virtually fabricate a design.
An important part of a design are the interconnections between components. At a generic level, Ipkiss provides the concept of a Trace, which describes the path between two points or Ports. The geometry to be drawn in the cross-section of the trace can be described using a ‘TraceTemplate’, and Ipkiss then extrudes the layout of the trace for the user along a given Shape. Primitives are available for describing rounded traces, traces with extra layers on top, and so forth.
In the photonics domain, these Traces and TraceTemplates are used to implement Waveguides and WaveguideTemplates. These have a number of extra properties and views, in particular a compact model for the optical transmission properties of waveguides.
Using a mapping between drawings on process layers and material stacks, described in the technology settings tree, Ipkiss can automatically derive a 3D geometry for a given design. This is called virtual fabrication. This virtually fabricated geometry can then be sent to a physical simulator, visualized or be used as the user prefers.
On top of the Ipkiss framework described above, Ipkiss provides a large library of predefined parametric cells. Whereas these were written with silicon photonic designs in mind, they can be used in a much broader context.
- Picazzo3 provides PCells in Ipkiss 3 syntax. Every component has Layout, Netlist and CircuitModel views where applicable.
- filters: ring resonators
- photonic crystals: generic, W1, hetero-structures
- routing: place-and-route component, automatically drawing a layout given a netlist
- traces: strip wire, rib, slot and thinned waveguides
- waveguide components: bend, coupler, crossing, directional coupler, splitter and combiner
- Picazzo provides Structures in Ipkiss 2.4 syntax. Not all of these components have been ported to Picazzo3 yet, but the existing
picazzo Structures can still be used on the Layout level.
- containers: smart PCells for auto-tapering, port extension, fanout, port suppression of other PCells
- fiber couplers: grating couplers, inverted taper couplers
- filters: MMIs, multi-ring, parallel ring
- I/O adapters and columns: smart PCells for easily adding input/output waveguides and couplers to cells
- alignment markers
- basic modulator templates
- polarisation rotator
- star couplers
- waveguide apertures into slab, waveguide grating, s-bend, spiral, tapers