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.
The Adapter PCell class that will be used to generate the blocks when a component is added to the column.
max_n_o_lines: ( tuple2 ), *None allowed*
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’>
The unique name of the pcell
view_name: str and ( Alphanumeric string or Contains _$ )
The name of the view
draw_block_outline: ( bool, bool_, bool or int )
Draw the outline of the block when set to True
Layer on which to draw the block outline
Position of the south east corner of the block
Position of the south west corner of the block
y_spacing: float and number > 0
The spacing between blocks
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
"""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(annotate=True)
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_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_align(west_east_offset=0.0, trace_template=<WireWaveguideTemplate PCellTemplate 'WIRE_WG_TEMPLATE'>, adapter=None)¶
Adds an alignment waveguide.
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.