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_, bool or int )

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

trace_template: PCell and _WaveguideTemplate
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’)

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’)

combiner: PCell

The combiner of the MZI

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: PCell

The splitter of the MZI

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’)

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
arm1: PCell, locked
arm2: PCell, locked
child_cells: locked
links: locked

Views

class Layout
Parameters
delay_length: float

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

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)

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)

flatten_contents: ( bool, 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

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

combiner_transformation: GenericNoDistortTransform
splitter_transformation: GenericNoDistortTransform
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.

manhattan: ( bool, 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.

bend_radius: float and number > 0

Bend radius for the auto-generated bends.

rounding_algorithm:

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

Other Parameters
child_transformations: locked

Examples

from technologies import silicon_photonics  # 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
from technologies import silicon_photonics  # 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