MZIWithCells¶
-
class
picazzo3.filters.mzi.cell.
MZIWithCells
(*args, **kwargs)¶ An MZI which contains another cell in one or both arms.
Parameters: arm1_contents: ( PCell ), *None allowed*
Cell to place in the SOUTH arm. Use None when only a waveguide is required.
arm1_contents_port_names: length == 2
port names for the contents ports in arm1. Default = (‘in’, ‘out’)
arm2_contents: ( PCell ), *None allowed*
Cell to place in the NORTH arm. Use None when only a waveguide is required.
arm2_contents_port_names: length == 2
port names for the contents ports in arm2. Default = (‘in’, ‘out’)
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: 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
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(annotate=True)
Views
-
Layout
¶ Parameters: angle_step: float and number > 0
Angle step for rounding.
arm1_contents_length: ( float and Real, number and number >= 0 ), *None allowed*
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
arm2_contents_length: ( float and Real, number and number >= 0 ), *None allowed*
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
extra_length: float
if positive, the lower (south) arm is longer, if negative, the upper (north) arm
manhattan: ( bool, bool_, bool or int )
Adds rectangular blocks in the bends to avoid as much as possible non-manhattan angles.
view_name: str and ( Alphanumeric string or Contains _$ )
The name of the view
arm1_direction:
direction of routing (DIRECTION.NORTH or DIRECTION.SOUTH)
arm2_direction:
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
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.
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
-