IoColumn

IoColumn is used to place components on top of each other and connect them to some input/output (I/O) on the side (typically grating couplers or edge couplers). The adapter decides how devices are routed and which I/O to use. The most frequently used adapter is the IoFibcoup adapter.

After instantiating an IoColumn, use the methods add, add_align, add_blocktitle and so on, to add components to the column. Those methods are documented below.

class ipkiss3.all.IoColumn(*args, **kwargs)

PCell used to place devices or circuits on top of each other and connect them to grating couplers on the side.

Parameters:

adapter: IoBlockAdapter, optional

The Adapter PCell class that will be used to generate the blocks when a component is added to the column.

max_n_o_lines: optional

Maximum number of lines that this IoColumn may contain. To check whether ‘quota’ has been exceeded, use is_full()If set to ‘None’, no maximum is set.

blocks: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, optional

The sub-blocks

cell_instances: _PCellInstanceDict, optional

name: optional

The unique name of the pcell

Views

Layout
Parameters:

view_name: str, optional

The name of the view

draw_block_outline: optional

Draw the outline of the block when set to True

outline_layer: __Layer__, optional

Layer on which to draw the block outline

south_east: Coord2, optional

Position of the south east corner of the block

south_west: Coord2, optional

Position of the south west corner of the block

y_spacing: float and number > 0, optional

The spacing between blocks

grids_per_unit: locked

Number of grid cells per design unit

units_per_grid: locked

Ratio of grid cell and design unit

blocks_pos: locked

count_east: locked

count_offset: locked

count_west: locked

south_offset: int, locked

The y-offset between south_west & south_east, measured in units of y_spacing

width: float and Real, number and number >= 0, locked

The width of the block, calculated using south_west & south_east

grid: float and number > 0, locked

design grid. Extracted by default from TECH.METRICS.GRID

unit: float and number > 0, locked

design unit. Extracted by default from TECH.METRICS.UNIT

Examples

"""Simple IoColumn example, demonstrating how to build a small testsite of MultiMode Interferometers (MMI).
"""
from technologies import silicon_photonics
from ipkiss3 import all as i3
from picazzo3.container.iofibcoup import IoFibcoup
from picazzo3.filters import MMI1x2Tapered

my_column = i3.IoColumn(adapter=IoFibcoup)
my_layout = my_column.Layout(south_east=(1200.0, 0.0),
                             y_spacing=25.0)

my_column.add_align()
my_column.add_blocktitle("Reference")

for idx, mmi_length in enumerate([10, 11, 12, 13, 14, 15]):
    mmi = MMI1x2Tapered()
    mmi.Layout(length=mmi_length)

    # add the component to the column. Mirror the odd components.
    my_column.add(mmi,
                  transformation=i3.IdentityTransform() if idx % 2 == 0 else i3.HMirror(),
                  fanout_length=100.0,
                  bend_radius=30.0)

lay = my_column.Layout()
lay.visualize()
../../_images/iocolumn-1.png
add(contents, absolute_offset=None, relative_offset=None, adapter=None, transformation=None, **adapter_kwargs)

add will take a PCell object contents, and wrap it in the adapter class to create an IoBlock that will then be added to the IoColumn.

Parameters:

contents: PCell object or PCell View object

The PCell object that will be wrapped by the adapter class to create a block

absolute_offset: Coord2, (x,y) tuple or ‘None’

The absolute offset of the contents relative to the x-center of the column, and the y-position on the West side. If None is specified (default), the contents is aligned such that the ports are centered and the first West port is y-aligned with the current West y-position of the column.

relative_offset: Coord2, (x,y) tuple or ‘None’

The relative offset to the position where the contents were placed with absolute_offset.

adapter: PCell class of the type IoBlockAdapter

This class will be used when creating new blocks and takes care of the routing + I/O. The contents will be passed as a parameter to the adapter. If None is specified, the default adapter class of the IoColumn will be used (which is defined in the technology).

transformation: Transformation object

Transformation that will be applied to the contents when it is added to the adapter. By default, it will not be transformed.

**adapter_kwargs:

All other keyword arguments will be passed on to the adapter when it is created. This includes PCell parameters such as trace_template, but also Layout parameters such as offset. the actual set of parameters depends on the type of adapter.

add_align(west_east_offset=0.0, trace_template=<WireWaveguideTemplate PCellTemplate 'WIRE_WG_TEMPLATE'>, adapter=None)

Adds an alignment waveguide.

add_blocktitle(text, center_clearout=(0.0, 0.0), edge_clearout=(0.0, 0.0), process=<Process WG>, purpose=<Purpose DFTXT>, name=None)

Periodically places text using the available space (uses PolygonText).

add_emptyline(N_lines=(1, 1))

Adds spacers to the west (N_lines[0]) and to the east (N_lines[1]).

add_emptyline_east(N_lines=1)

Adds spacers at the east side.

add_emptyline_west(N_lines=1)

Adds spacers at the west side.

straighten()

Add spacers to ensure that the block is straight.