MZIWaveguides

class picazzo3.filters.mzi.cell.MZIWaveguides

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: ( bool, bool_ or int )

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

trace_template: PCell and _WaveguideTemplate
arm2_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2

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

arm1_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2

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

combiner_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2

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

splitter_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2

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

combiner: PCell

The combiner of the MZI

splitter: PCell

The splitter of the MZI

external_port_names: str

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: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters:
arm2: PCell, locked
arm1: PCell, locked
links: locked
child_cells: locked

Views

class Layout
Parameters:
delay_length: float

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

flatten_contents: ( bool, bool_ or int )

allows for enabling/disabling the flattening of the splitter and combiner, default is True

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

Minimum straight length between two bends

arm2_direction: List with value restriction, allowed values: [C2(0.000000, 1.000000), C2(0.000000, -1.000000)]

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

arm1_direction: List with value restriction, allowed values: [C2(0.000000, 1.000000), C2(0.000000, -1.000000)]

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

combiner_transformation: GenericNoDistortTransform

Transformation of the Combiner.

splitter_transformation: GenericNoDistortTransform

Transformation of the Splitter.

flyline_width: float and number > 0

line width of the flylines

flyline_layer: ( __Layer__ ), *None allowed*

layer to draw flylines of physically unconnected links

netlist_view: NetlistView

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

view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

manhattan: ( bool, bool_ or int )

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

angle_step: float and number > 0

Angle step for rounding.

rounding_algorithm:

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

bend_radius: float and number > 0

Bend radius for the auto-generated bends.

Other Parameters:
child_transformations: locked

Examples

import si_fab.all as pdk  # noqa: F401
from picazzo3.filters.mzi import MZIWaveguides
from picazzo3.wg.splitters import WgY90Splitter, WgY180Combiner

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

comb = WgY180Combiner(name="my_combiner_5")
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(annotate=True)
../../../../../_images/picazzo3-filters-mzi-cell-MZIWaveguides-1.png
import si_fab.all as pdk  # noqa: F401
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(annotate=True)
../../../../../_images/picazzo3-filters-mzi-cell-MZIWaveguides-2.png