Elements and Layers

Elements are the building blocks of a layout. By structuring elements in more complex groups, you can gradually build more advanced blocks.

In IPKISS we make a distinction between the following types of elements.

  • Shape Elements used to define a geometric element on a certain Layer.

  • Text Elements used to place some text on your design on a certain Layer.

  • Reference Elements for referring to another PCell’s layout view.

These elements can be grouped in an i3.ElementList.

Note that there is a difference as where these elements should be defined in the LayoutView of a component.

To use shape elements and text elements, you must return them from the _generate_elements method of the LayoutView of a PCell that you define. This in explained in more detail in this guide together with some examples.

On the other hand, reference elements, which are also known as instances, should be returned from the _generate_instances method of the LayoutView to create a hierarchical layout. Click here for a tutorial on how to do so.

Shape Elements

Shape Elements are basically elements that take a shape and a layer. Hence they provide a way to place geometrical objects (shapes) on your layout. IPKISS contains a range of different types of shape elements, but these can all be reduced to 3 distinct types:

Boundary

Layout element consisting of a closed Shape drawn on a given Layer.

Box

A rectangular layout element defined via its center coordinate and extent in x and y, drawn on a given layer.

Path

Layout element consisting of a closed or open Shape drawn on a given Layer with a given line width

All shape elements are derived from one of those two types. Below you can find a list of all those derived elements:

Derived from Boundary

Circle

Returns a Boundary Element with a circle shape.

Cross

Returns a Boundary Element with a cross shape.

Ellipse

Returns a Boundary Element with an elliptical shape.

Hexagon

Returns a Boundary Element with a hexagon shape.

ParabolicWedge

Returns a Boundary Element with a parabilically tapered wedge shape.

RadialWedge

Returns a Boundary Element with a linear wedge (tapered) shape emanating from a center point.

Rectangle

Returns a Boundary Element with a rectangular shape.

RegularPolygon

Returns a Boundary Element with a regular polygon shape.

RingSegment

Returns a Boundary Element with a ring segment shape.

RoundedRectangle

Returns a Boundary Element with an rectangular shape with rounded corners.

ShapeBendRelative

Bend with relative turning angle instead of absolute end angle

Wedge

Returns a Boundary Element with a linear wedge (tapered) shape.

Derived from Path

ArcPath

Returns a Path Element along a circular arc.

BendPath

Returns a Path Element along a circuler bend.

CirclePath

Returns a Path Element along a closed circle.

CrossPath

Returns a Path forming the outline of a cross

EllipsePath

Returns a Path Element along a closed elliptical path.

EllipseArcPath

Returns a Path Element along an elliptical arc.

Line

Returns a Path Element along a straight line.

HexagonPath

Returns a Path Element along a closed regular hexagon shape.

RadialLine

Returns a Path Element along a straight line emanating from a center point.

RectanglePath

Returns a Path Element along a a closed rectangular shape.

RegularPolygonPath

Returns a Path Element along a closed regular polygon shape.

RelativeBendPath

Returns a Path Element along a a circular bend calculated relatively from a starting point.

RoundedRectanglePath

Returns a Path Element along a closed rounded rectangular shape.

Text elements

Text elements are used to add text to a GDS. There are two types of text element in IPKISS.

  • i3.PolygonText is used to write text on a layer in the GDS, e.g. if it is to be physically fabricated

  • i3.Label is used to write labels on a GDS, these are not physically fabricated and are only for annotation purposes

PolygonText

Layout element which places text as a Group of Boundary elements or Path Elements.

Label

Layout element which places text as a Label on the layout.

Reference Elements

Reference elements (also called instances) are used to place a reference to a layout view of another PCell in the layout instead of the element itself. Doing this allows re-use of repeating layout information, by defining the unit cell in a separate container (PCell) and referring to it from other PCells. In this way, a layout is hierarchically structured. Reference elements can apply transformations on the referred layout, without changing the original layout itself. You could for example place a ringresonator on your layout and place another translated copy next to it.

The most frequently used reference element is i3.SRef, in case you need to place several copies of your element you can leverage i3.ARef.

IPKISS also offers a range of more specialized references. Below you can find a complete list, but we want to remark that those are rarely needed.

SRef

Single reference of a LayoutView

ARef

Array reference: places the referenced layout view in a regular 2D array.

MRef

Multi-reference.

ARefX

A 1D array of references along the X-axis (prior to transformation)

ARefY

A 1D array of references along the Y-axis (prior to transformation)

SoftARef

An array reference that automatically breaks down the array into individual single references (SREF)

SoftRotationARef

An array reference that automatically breaks down the array into individual single references (SREF) if the transformation is not along Manhattan directions.

StackARef

An array reference that automatically breaks down the array into a hierarchical set of single references.

Grouping Elements

Two containers are available for grouping elements: i3.Group and i3.ElementList. They are similar, but a Group behaves as an Element itself while an ElementList does not.

Group

Group of Layout Elements.

ElementList

List of Layout Elements