i3.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.
PCell used to place devices or circuits on top of each other and connect them to grating couplers on the side.
adapter: IoBlockAdapter, optional
The Adapter PCell class that will be used to generate the blocks when a component is added to the column.
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
cell_instances: _PCellInstanceDict, optional
The unique name of the pcell
view_name: str, optional
The name of the view
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
Number of grid cells per design unit
Ratio of grid cell and design unit
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
"""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()
add(contents, absolute_offset=None, relative_offset=None, adapter=None, transformation=None, **adapter_kwargs)¶
addwill take a PCell object
contents, and wrap it in the
adapterclass to create an
IoBlockthat will then be added to the
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
Noneis 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.
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).
Adds spacers to the west (N_lines) and to the east (N_lines).
Adds spacers at the east side.
Adds spacers at the west side.
Add spacers to ensure that the block is straight.