MZIWaveguides

class picazzo3.filters.mzi.cell.MZIWaveguides(*args, **kwargs)

A MZI with two simple waveguide arms. The splitter and combiner are safely spaced, but this can be manually optimized. The difference in length between the delay lines can be set in the layout.

Parameters:

auto_transition: optional

if True, splitter and combiner are transitioned to the correct waveguide template

trace_template: PCell and _WaveguideTemplate, optional

arm1_port_names: length == 2, optional

port names for the south arm ports connected to splitter and combiner. Default = (‘in’, ‘out’)

arm2_port_names: length == 2, optional

port names for the north arm ports connected to splitter and combiner. Default = (‘in’, ‘out’)

combiner: PCell, optional

The combiner of the MZI

combiner_port_names: length == 2, optional

port names for the combiner ports to the arms. Default = (‘in1’, ‘in2’)

splitter: PCell, optional

The splitter of the MZI

splitter_port_names: length == 2, optional

port names for the splitter ports to the arms. Default = (‘out1’, ‘out2’)

external_port_names: optional

Map of the free instance terms/ports to the names of external terms/ports.Format is a dict {‘inst:term’ : ‘new_term_name’}.If a term/port is not listed, the format instname_portname will be used

cell_instances: _PCellInstanceDict, optional

name: optional

The unique name of the pcell

arm1: PCell, locked

arm2: PCell, locked

child_cells: locked

links: locked

Views

Layout
Parameters:

angle_step: float and number > 0, optional

angle step for rounding

delay_length: float, optional

if positive, the upper arms is longer, if negative, the lower arm

manhattan: optional

adds rectangular blocks in the bends to avoid as much as possible non-manhattan angles

view_name: str, optional

The name of the view

arm1_direction: optional

direction of routing (DIRECTION.NORTH or DIRECTION.SOUTH)

arm2_direction: optional

direction of routing (DIRECTION.NORTH or DIRECTION.SOUTH)

min_straight: float and Real, number and number >= 0, optional

Minimum straight length between two bends

combiner_transformation: GenericNoDistortTransform, optional

splitter_transformation: GenericNoDistortTransform, optional

flyline_layer: optional

layer to draw flylines of physically unconnected links

flyline_width: float and number > 0, optional

line width of the flylines

netlist_view: NetlistView, optional

Netlist view in the same cell on which this Layout is based. Normally no need to manually override.

bend_radius: float and number > 0, optional

bend radius for the auto-generated bends

rounding_algorithm: optional

rounding algorithm used to generate the bends. Can be circular, spline, …

grid: float and number > 0, locked

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

grids_per_unit: locked

Number of grid cells per design unit

units_per_grid: locked

Ratio of grid cell and design unit

child_transformations: locked

unit: float and number > 0, locked

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

Examples

from technologies import silicon_photonics
from picazzo3.filters.mzi import MZIWaveguides
from picazzo3.wg.splitters import WgY90Splitter, WgY180Combiner
from ipkiss3 import all as i3

split = WgY90Splitter(name="my_splitter_5")
split_layout = split.Layout()

comb = WgY180Combiner(name="my_combiner_5")
comb_layout = comb.Layout()

mzi = MZIWaveguides(name="my_mzi_waveguides_1",
                    splitter=split,
                    combiner=comb,
                    splitter_port_names=['arm1','arm2'],
                    combiner_port_names=['arm1','arm2'])
layout = mzi.Layout(delay_length=100.0)

layout.visualize()
../../../../_images/picazzo3-filters-mzi-cell-MZIWaveguides-1.png
from technologies import silicon_photonics
from picazzo3.filters.mzi import MZIWaveguides
from picazzo3.wg.dircoup import BendDirectionalCoupler
from ipkiss3 import all as i3

split = BendDirectionalCoupler(name="my_splitter_6")
split.Layout(bend_angle=30.0)

mzi = MZIWaveguides(name="my_mzi_waveguides_2",
                    splitter=split,
                    combiner=split)
layout = mzi.Layout(delay_length=-50.0,
           splitter_transformation=i3.Rotation(rotation=90.0),
           combiner_transformation=i3.Rotation(rotation=-90.0) + i3.Translation((25.0, 0.0)),
           arm1_direction=i3.DIRECTION.NORTH)

layout.visualize()
../../../../_images/picazzo3-filters-mzi-cell-MZIWaveguides-2.png