MZIWithCells

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

An MZI which contains another cell in one or both arms.

Parameters:

arm1_contents: optional

Cell to place in the SOUTH arm. Use None when only a waveguide is required.

arm1_contents_port_names: length == 2, optional

port names for the contents ports in arm1. Default = (‘in’, ‘out’)

arm2_contents: optional

Cell to place in the NORTH arm. Use None when only a waveguide is required.

arm2_contents_port_names: length == 2, optional

port names for the contents ports in arm2. Default = (‘in’, ‘out’)

auto_transition: optional

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

trace_template: PCell and _WaveguideTemplate, optional

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

Examples

from technologies import silicon_photonics
from picazzo3.filters.mzi import MZIWithCells
from picazzo3.wg.dircoup import BendDirectionalCoupler
from picazzo3.filters.ring import RingRectNotchFilter

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

ring = RingRectNotchFilter(name="my_ring_8")

mzi = MZIWithCells(name="my_mzi_cells_1",
                   splitter=split,
                   combiner=split,
                   arm1_contents=ring,
                   arm1_contents_port_names=["in", "out"],
                   )
layout = mzi.Layout(extra_length=-50.0)

layout.visualize()
../../../../_images/picazzo3-filters-mzi-cell-MZIWithCells-1.png

Views

Layout
Parameters:

angle_step: float and number > 0, optional

angle step for rounding

arm1_contents_length: optional

Specify manually the physical length of the content in the South arm. If None, it will be calculated by the arms from the distance between the ports.

arm1_contents_transformation: GenericNoDistortTransform, optional

arm2_contents_length: optional

Specify manually the physical length of the content in the North arm. If None, it will be calculated by the arms from the distance between the ports.

arm2_contents_transformation: GenericNoDistortTransform, optional

extra_length: float, optional

if positive, the lower (south) arm is longer, if negative, the upper (north) 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