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

Generic MZI, taking a splitter, combiner and two _MziArm objects. You have to specify the transformations yourself.


arm1: PCell and MZIArm, optional

The South arm of the MZI

arm1_port_names: length == 2, optional

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

arm2: PCell and MZIArm, optional

The North arm of the MZI

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

child_cells: locked

links: locked



combiner_transformation: GenericNoDistortTransform, optional

splitter_transformation: GenericNoDistortTransform, optional

view_name: str, optional

The name of the view

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.

child_transformations: locked

grids_per_unit: locked

Number of grid cells per design unit

units_per_grid: locked

Ratio of grid cell and design unit

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


from technologies import silicon_photonics
from picazzo3.filters.mzi import MZI, MZIWaveguideArm
from picazzo3.wg.splitters import WgY90Splitter
from picazzo3.traces.wire_wg.trace import WireWaveguideTemplate
from ipkiss3 import all as i3

wg1_t = WireWaveguideTemplate(name="my_wire_template_3")

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

comb_t = i3.HMirror() + i3.Translation((100.0, 0.0))

mziarm1 = MZIWaveguideArm(name="my_mzi_example_arm1")
               splitter_port = split_layout.ports["arm1"],
               combiner_port = split_layout.ports["arm1"].transform_copy(comb_t))

mziarm2 = MZIWaveguideArm(name="my_mzi_example_arm2")
mziarm2.Layout(splitter_port = split_layout.ports["arm2"],
               combiner_port = split_layout.ports["arm2"].transform_copy(comb_t))

mzi = MZI(name="my_mzi_example",
layout = mzi.Layout(combiner_transformation=comb_t)