MZI

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.

Parameters:

arm1: PCell and MZIArm

The South arm of the MZI

arm1_port_names: length == 2

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

arm2: PCell and MZIArm

The North arm of the MZI

arm2_port_names: length == 2

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

combiner: PCell

The combiner of the MZI

combiner_port_names: length == 2

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

splitter: PCell

The splitter of the MZI

splitter_port_names: length == 2

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

external_port_names:

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

name:

The unique name of the pcell

Other Parameters:
 

child_cells: locked

links: locked

Views

Layout
Parameters:

combiner_transformation: GenericNoDistortTransform

splitter_transformation: GenericNoDistortTransform

view_name: str and ( Alphanumeric string or Contains _$ )

The name of the view

flyline_layer: ( __Layer__ ), *None allowed*

layer to draw flylines of physically unconnected links

flyline_width: float and number > 0

line width of the flylines

netlist_view: NetlistView

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

Other Parameters:
 

child_transformations: locked

Examples

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")
wg1_t.Layout(core_width=0.5)

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")
mziarm1.Layout(extra_length=30.0,
               routing_direction=i3.DIRECTION.SOUTH,
               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",
          splitter=split,
          combiner=split,
          arm1=mziarm1,
          arm2=mziarm2,
          splitter_port_names=['arm1','arm2'],
          combiner_port_names=['arm1','arm2'])
layout = mzi.Layout(combiner_transformation=comb_t)

layout.visualize(annotate=True)
../../../../_images/picazzo3-filters-mzi-cell-MZI-1.png