Technolgy file archetecture revised with dictionary input method

This commit is contained in:
=
2026-06-07 17:07:20 +08:00
parent 8a17f1dde0
commit 54d20eb154
163 changed files with 5948 additions and 1297 deletions
+340 -144
View File
@@ -1,3 +1,5 @@
"""Mach-Zehnder interferometer mesh composite layouts."""
from typing import Any, Optional
import nazca as nd
import numpy as np
@@ -18,6 +20,51 @@ from .MZI import __BS_generate__
class W_waveguide:
"""W-shaped waveguide phase shifter section.
Parameters
----------
xs_wg : str, optional
Waveguide cross-section name.
w_wg : float, optional
Optical waveguide width in microns.
R_bend : int, optional
Bend radius used by W-shaped routing.
dL : float, optional
Vertical excursion of the W routing.
L_wg : int, optional
Total phase shifter waveguide length.
xs_heater : str, optional
Heater cross-section name.
w_ht : float, optional
Heater width. Use 0 to disable heater geometry.
xs_metal : str, optional
Metal routing cross-section name.
w_metal : float, optional
Metal routing width.
via_h2m : Any, optional
Heater-to-metal via object or cell.
isl : Any, optional
Optional isolation helper.
n_bends : int, optional
Number of W bend periods.
show_pins : bool, optional
Show Nazca pin stubs in the generated layout.
ISL_UPPER : bool, optional
Enable upper isolation placement when used.
ISL_LOWER : bool, optional
Enable lower isolation placement when used.
L_patch : float, optional
Straight patch length at bend interfaces.
reverse : bool, optional
Swap optical input/output pin naming.
Attributes
----------
cell : nazca.Cell
Generated W-waveguide layout cell.
"""
def __init__(self,
xs_wg: str='strip',
w_wg: float = 0.45,
@@ -36,26 +83,9 @@ class W_waveguide:
ISL_LOWER: bool = True,
L_patch: float = 0.25,
reverse: bool=False) -> None:
"""Generate a W-shaped waveguide phase shifter section.
"""Initialize the W waveguide composite.
Args:
xs_wg (str, optional): Waveguide xsection name. Defaults to 'strip'.
w_wg (float, optional): Waveguide width. Defaults to 0.45.
R_bend (int, optional): Bend radius used by the W routing. Defaults to 10.
dL (float, optional): Vertical excursion of each W bend. Defaults to 20.
L_wg (int, optional): Total phase shifter waveguide length. Defaults to 80.
xs_heater (str, optional): Heater xsection name. Defaults to 'heater'.
w_ht (float, optional): Heater width; use 0 to disable heater geometry. Defaults to 2.5.
xs_metal (str, optional): Metal xsection name. Defaults to 'metal'.
w_metal (float, optional): Metal routing width. Defaults to 6.
via_h2m (Any, optional): Heater-to-metal via object or cell. Defaults to None.
isl (Any, optional): Optional isolation helper reserved for isolation layout. Defaults to None.
n_bends (int, optional): Number of W bend periods. Defaults to 3.
show_pins (bool, optional): Show Nazca pin stubs. Defaults to False.
ISL_UPPER (bool, optional): Enable upper isolation placement when used. Defaults to True.
ISL_LOWER (bool, optional): Enable lower isolation placement when used. Defaults to True.
L_patch (float, optional): Short straight patch length at bend interfaces. Defaults to 0.25.
reverse (bool, optional): Swap optical input/output pin naming. Defaults to False.
See the class docstring for parameter descriptions.
"""
self.xs_wg = xs_wg
self.w_wg = w_wg
@@ -155,6 +185,61 @@ class W_waveguide:
## Standard unit of a mesh with one MZI and a PS
class UMat_2x2_S:
"""Standard 2x2 MZI mesh unit with phase shifter routing.
Parameters
----------
name : str, optional
Nazca cell name.
BS : Any, optional
Beam splitter cell or object. If omitted, a default DC is generated.
xs_wg : str, optional
Optical waveguide cross-section name.
L_arm : int, optional
Straight arm length between beam splitters.
D_arm : int, optional
Vertical spacing between MZI arms.
w_wg : float, optional
Input/output waveguide width.
R_bend : int, optional
Routing bend radius.
w_arm : float, optional
Internal arm width. If omitted, ``w_wg`` is used.
Ltp : int, optional
Taper length between bus and arm widths.
xs_heater : str, optional
Heater cross-section name.
bend_heaters : bool, optional
Route heaters along bent arms.
dL_ht : float, optional
Heater routing vertical offset.
dL_AMZI : float, optional
Differential length added for AMZI behavior.
L_heater : Any, optional
Optional explicit heater length.
xs_metal : str, optional
Metal routing cross-section name.
w_ht : float, optional
Heater width.
w_metal : float, optional
Metal routing width.
via_h2m : Any, optional
Heater-to-metal via object or cell.
isl : Any, optional
Isolation helper object or cell.
ht_same_side : bool, optional
Place both heater contacts on the same side.
port_align : bool, optional
Align optical ports to a common grid.
show_pins : bool, optional
Show Nazca pin stubs in the generated layout.
Attributes
----------
cell : nazca.Cell
Generated 2x2 unit mesh layout cell.
"""
def __init__(self,
name: str="unit_mesh_2x2",
BS: Any=None,
@@ -182,31 +267,9 @@ class UMat_2x2_S:
ht_same_side: bool= False,
port_align: bool = True,
show_pins: bool=False) -> None:
"""Generate a standard 2x2 MZI mesh unit with phase shifter routing.
"""Initialize the UMat 2x2 S composite.
Args:
name (str, optional): Nazca cell name. Defaults to "unit_mesh_2x2".
BS (Any, optional): Beam splitter cell/object; None generates the default DC. Defaults to None.
xs_wg (str, optional): Waveguide xsection name. Defaults to 'strip'.
L_arm (int, optional): Straight arm length between beam splitters. Defaults to 80.
D_arm (int, optional): Vertical spacing between MZI arms. Defaults to 50.
w_wg (float, optional): Input/output waveguide width. Defaults to 0.45.
R_bend (int, optional): Routing bend radius. Defaults to 6.
w_arm (Optional[float], optional): Internal arm width; None uses w_wg. Defaults to None.
Ltp (int, optional): Taper length between w_wg and w_arm. Defaults to 15.
xs_heater (str, optional): Heater xsection name. Defaults to 'heater'.
bend_heaters (bool, optional): Route heaters along bent arms. Defaults to False.
dL_ht (float, optional): Heater routing vertical offset. Defaults to 30.
dL_AMZI (float, optional): Differential length added for AMZI behavior. Defaults to 0.
L_heater (Any, optional): Optional explicit heater length. Defaults to None.
xs_metal (str, optional): Metal xsection name. Defaults to 'metal'.
w_ht (float, optional): Heater width. Defaults to 2.5.
w_metal (float, optional): Metal width. Defaults to 8.
via_h2m (Any, optional): Heater-to-metal via object or cell. Defaults to None.
isl (Any, optional): Isolation helper object or cell. Defaults to None.
ht_same_side (bool, optional): Place both heater contacts on the same side. Defaults to False.
port_align (bool, optional): Align optical ports to a common grid. Defaults to True.
show_pins (bool, optional): Show Nazca pin stubs. Defaults to False.
See the class docstring for parameter descriptions.
"""
self.BS = __BS_generate__(BS=BS,xs=xs_wg,func_name="mxpic::functioanl::Umat_2x2_S")
@@ -344,8 +407,65 @@ class UMat_2x2_S:
return MZI_Unit
class MZI_mesh_U:
"""Universal MZI mesh built from repeated 2x2 MZI units.
Parameters
----------
BS : Any, optional
Beam splitter cell or object used by unit cells.
xs_wg : str, optional
Optical waveguide cross-section name.
L_arm : int, optional
Straight arm length in each unit MZI.
D_arm : int, optional
Vertical spacing between MZI arms.
w_wg : float, optional
Input/output waveguide width.
n_ports : int, optional
Number of mesh ports.
R_bend : int, optional
Routing bend radius.
L_compensate : int, optional
Length used for compensation routing.
R_compensate : int, optional
Bend radius used by compensation routing.
mesh_type : str, optional
Mesh topology name, such as ``"triangle"`` or ``"parallelogram"``.
xs_heater : str, optional
Heater cross-section name.
bend_heaters : bool, optional
Route heaters along bent arms.
dL_ht : float, optional
Heater routing vertical offset.
xs_metal : str, optional
Metal routing cross-section name.
w_ht : float, optional
Heater width.
w_metal : float, optional
Metal routing width.
w_arm : float, optional
Internal arm width. If omitted, ``w_wg`` is used.
Ltp : int, optional
Taper length between bus and arm widths.
via_h2m : Any, optional
Heater-to-metal via object or cell.
isl : Any, optional
Isolation helper object or cell.
port_align : bool, optional
Align optical ports to a common grid.
L_heater : Any, optional
Optional explicit heater length.
show_pins : bool, optional
Show Nazca pin stubs in the generated layout.
Attributes
----------
cell : nazca.Cell
Generated universal MZI mesh layout cell.
"""
def __init__(self,
BS: Any=None,
BS: Any=None,
xs_wg: str='strip',
L_arm: int = 80,
D_arm: int = 50,
@@ -371,32 +491,9 @@ class MZI_mesh_U:
port_align: bool = True,
L_heater: Any = None,
show_pins: bool=False) -> None:
"""Generate a universal MZI mesh using repeated 2x2 MZI units.
"""Initialize the MZI mesh U composite.
Args:
BS (Any, optional): Beam splitter cell/object; None generates the default DC. Defaults to None.
xs_wg (str, optional): Waveguide xsection name. Defaults to 'strip'.
L_arm (int, optional): MZI unit arm length. Defaults to 80.
D_arm (int, optional): MZI unit arm spacing. Defaults to 50.
w_wg (float, optional): Mesh waveguide width. Defaults to 0.45.
n_ports (int, optional): Number of optical input/output ports. Defaults to 8.
R_bend (int, optional): Mesh routing bend radius. Defaults to 6.
L_compensate (int, optional): Straight length inside compensation bends. Defaults to 10.
R_compensate (int, optional): Bend radius inside compensation cells. Defaults to 10.
mesh_type (str, optional): Mesh topology, such as 'triangle' or 'parallelogram'. Defaults to 'triangle'.
xs_heater (str, optional): Heater xsection name. Defaults to 'heater'.
bend_heaters (bool, optional): Route heaters along bent arms. Defaults to True.
dL_ht (float, optional): Heater routing vertical offset. Defaults to 30.
xs_metal (str, optional): Metal xsection name. Defaults to 'metal'.
w_ht (float, optional): Heater width. Defaults to 2.5.
w_metal (float, optional): Metal width. Defaults to 8.
w_arm (Optional[float], optional): Internal arm width; None uses w_wg. Defaults to None.
Ltp (int, optional): Taper length between w_wg and w_arm. Defaults to 10.
via_h2m (Any, optional): Heater-to-metal via object or cell. Defaults to None.
isl (Any, optional): Isolation helper object or cell. Defaults to None.
port_align (bool, optional): Align external optical ports. Defaults to True.
L_heater (Any, optional): Optional explicit heater length for unit cells. Defaults to None.
show_pins (bool, optional): Show Nazca pin stubs. Defaults to False.
See the class docstring for parameter descriptions.
"""
self.BS = __BS_generate__(BS=BS,xs=xs_wg,func_name="mxpic::functioanl::MZI_mesh_U")
@@ -682,8 +779,63 @@ class MZI_mesh_U:
return mesh
class AMZI_W:
"""Asymmetric MZI with W-shaped phase shifter arms.
Parameters
----------
name : str, optional
Nazca cell name.
BS : Any, optional
Beam splitter cell or object. If omitted, a default DC is generated.
xs_wg : str, optional
Optical waveguide cross-section name.
D_arm : int, optional
Vertical spacing between MZI arms.
w_wg : float, optional
Input/output waveguide width.
R_bend : int, optional
Routing bend radius.
n_bend : int, optional
Number of W-shaped bend periods.
w_arm : float, optional
Internal arm width. If omitted, ``w_wg`` is used.
Ltp : int, optional
Taper length between bus and arm widths.
xs_heater : str, optional
Heater cross-section name.
dL_ht : float, optional
Heater routing vertical offset.
dL_AMZI : float, optional
Differential length added for AMZI behavior.
L_heater : Any, optional
Optional explicit heater length.
xs_metal : str, optional
Metal routing cross-section name.
w_ht : float, optional
Heater width.
w_metal : float, optional
Metal routing width.
D_port : Any, optional
Output port pitch override.
via_h2m : Any, optional
Heater-to-metal via object or cell.
isl : Any, optional
Isolation helper object or cell.
port_align : bool, optional
Align optical ports to a common grid.
L_patch : float, optional
Straight patch length at routing interfaces.
show_pins : bool, optional
Show Nazca pin stubs in the generated layout.
Attributes
----------
cell : nazca.Cell
Generated asymmetric W-MZI layout cell.
"""
def __init__(self,
name: str="AMZI_W",
name: str="AMZI_W",
BS: Any=None,
xs_wg: str='strip',
D_arm: int = 50,
@@ -710,31 +862,9 @@ class AMZI_W:
port_align: bool = True,
L_patch: float = 0.25,
show_pins: bool=False) -> None:
"""Generate an asymmetric MZI with W-shaped phase shifter arms.
"""Initialize the AMZI W composite.
Args:
name (str, optional): Nazca cell name. Defaults to "AMZI_W".
BS (Any, optional): Beam splitter cell/object; None generates the default DC. Defaults to None.
xs_wg (str, optional): Waveguide xsection name. Defaults to 'strip'.
D_arm (int, optional): Vertical spacing between MZI arms. Defaults to 50.
w_wg (float, optional): Input/output waveguide width. Defaults to 0.45.
R_bend (int, optional): Routing bend radius. Defaults to 6.
n_bend (int, optional): Number of W bends in the phase shifter. Defaults to 3.
w_arm (Optional[float], optional): Internal arm width; None uses w_wg. Defaults to None.
Ltp (int, optional): Taper length between w_wg and w_arm. Defaults to 15.
xs_heater (str, optional): Heater xsection name. Defaults to 'heater'.
dL_ht (float, optional): Heater routing vertical offset. Defaults to 30.
dL_AMZI (float, optional): Differential length between AMZI arms. Defaults to 0.
L_heater (Any, optional): Optional explicit heater length. Defaults to None.
xs_metal (str, optional): Metal xsection name. Defaults to 'metal'.
w_ht (float, optional): Heater width. Defaults to 2.5.
w_metal (float, optional): Metal width. Defaults to 8.
D_port (Any, optional): Optional external port spacing override. Defaults to None.
via_h2m (Any, optional): Heater-to-metal via object or cell. Defaults to None.
isl (Any, optional): Isolation helper object or cell. Defaults to None.
port_align (bool, optional): Align optical ports to a common grid. Defaults to True.
L_patch (float, optional): Short straight patch length at bend interfaces. Defaults to 0.25.
show_pins (bool, optional): Show Nazca pin stubs. Defaults to False.
See the class docstring for parameter descriptions.
"""
self.BS = __BS_generate__(BS=BS,xs=xs_wg,func_name="mxpic::functioanl::Umat_2x2_S")
@@ -898,8 +1028,63 @@ class AMZI_W:
## Parlogon mesh
class MZI_mesh_Parl(MZI_mesh_U):
"""Parallelogram MZI mesh topology wrapper.
Parameters
----------
BS : Any, optional
Beam splitter cell or object used by unit cells.
xs_wg : str, optional
Optical waveguide cross-section name.
L_arm : int, optional
Straight arm length in each unit MZI.
D_arm : int, optional
Vertical spacing between MZI arms.
w_wg : float, optional
Input/output waveguide width.
n_ports : int, optional
Number of mesh ports.
R_bend : int, optional
Routing bend radius.
L_compensate : int, optional
Length used for compensation routing.
R_compensate : int, optional
Bend radius used by compensation routing.
xs_heater : str, optional
Heater cross-section name.
bend_heaters : bool, optional
Route heaters along bent arms.
dL_ht : float, optional
Heater routing vertical offset.
xs_metal : str, optional
Metal routing cross-section name.
w_ht : float, optional
Heater width.
w_metal : float, optional
Metal routing width.
w_ram : float, optional
Internal arm width passed to the unit mesh generator.
Ltp : int, optional
Taper length between bus and arm widths.
via_h2m : Any, optional
Heater-to-metal via object or cell.
isl : Any, optional
Isolation helper object or cell.
L_heater : Any, optional
Optional explicit heater length.
port_align : bool, optional
Align optical ports to a common grid.
show_pins : bool, optional
Show Nazca pin stubs in the generated layout.
Attributes
----------
cell : nazca.Cell
Generated parallelogram MZI mesh layout cell.
"""
def __init__(self,
BS: Any=None, xs_wg: str='strip',
BS: Any=None, xs_wg: str='strip',
L_arm: int=80, D_arm: int=50,
w_wg: float=0.45, n_ports: int=8, R_bend: int=6, L_compensate: int=10, R_compensate: int=10,
xs_heater: str='heater', bend_heaters: bool=True, dL_ht: float=0, xs_metal: str='metal', w_ht: float=2.5, w_metal: float=8,
@@ -908,31 +1093,9 @@ class MZI_mesh_Parl(MZI_mesh_U):
isl: Any = None,
L_heater: Any = None,
port_align: bool=True, show_pins: bool=False) -> None:
"""Generate a parallelogram MZI mesh.
"""Initialize the MZI mesh Parl composite.
Args:
BS (Any, optional): Beam splitter cell/object; None generates the default DC. Defaults to None.
xs_wg (str, optional): Waveguide xsection name. Defaults to 'strip'.
L_arm (int, optional): MZI unit arm length. Defaults to 80.
D_arm (int, optional): MZI unit arm spacing. Defaults to 50.
w_wg (float, optional): Mesh waveguide width. Defaults to 0.45.
n_ports (int, optional): Number of optical input/output ports. Defaults to 8.
R_bend (int, optional): Mesh routing bend radius. Defaults to 6.
L_compensate (int, optional): Straight length inside compensation bends. Defaults to 10.
R_compensate (int, optional): Bend radius inside compensation cells. Defaults to 10.
xs_heater (str, optional): Heater xsection name. Defaults to 'heater'.
bend_heaters (bool, optional): Route heaters along bent arms. Defaults to True.
dL_ht (float, optional): Heater routing vertical offset. Defaults to 0.
xs_metal (str, optional): Metal xsection name. Defaults to 'metal'.
w_ht (float, optional): Heater width. Defaults to 2.5.
w_metal (float, optional): Metal width. Defaults to 8.
w_ram (float, optional): Internal arm width passed to the unit cell. Defaults to 0.45.
Ltp (int, optional): Taper length between waveguide widths. Defaults to 15.
via_h2m (Any, optional): Heater-to-metal via object or cell. Defaults to None.
isl (Any, optional): Isolation helper object or cell. Defaults to None.
L_heater (Any, optional): Optional explicit heater length. Defaults to None.
port_align (bool, optional): Align external optical ports. Defaults to True.
show_pins (bool, optional): Show Nazca pin stubs. Defaults to False.
See the class docstring for parameter descriptions.
"""
super().__init__(BS, xs_wg, L_arm, D_arm, w_wg, n_ports, R_bend, L_compensate, R_compensate, 'parallelogram', xs_heater, bend_heaters, dL_ht, xs_metal, w_ht, w_metal,
w_ram,Ltp,
@@ -940,8 +1103,63 @@ class MZI_mesh_Parl(MZI_mesh_U):
## Triangle mesh
class MZI_mesh_Tri(MZI_mesh_U):
"""Triangular MZI mesh topology wrapper.
Parameters
----------
BS : Any, optional
Beam splitter cell or object used by unit cells.
xs_wg : str, optional
Optical waveguide cross-section name.
L_arm : int, optional
Straight arm length in each unit MZI.
D_arm : int, optional
Vertical spacing between MZI arms.
w_wg : float, optional
Input/output waveguide width.
n_ports : int, optional
Number of mesh ports.
R_bend : int, optional
Routing bend radius.
L_compensate : int, optional
Length used for compensation routing.
R_compensate : int, optional
Bend radius used by compensation routing.
xs_heater : str, optional
Heater cross-section name.
bend_heaters : bool, optional
Route heaters along bent arms.
dL_ht : float, optional
Heater routing vertical offset.
xs_metal : str, optional
Metal routing cross-section name.
w_ht : float, optional
Heater width.
w_metal : float, optional
Metal routing width.
w_ram : float, optional
Internal arm width passed to the unit mesh generator.
Ltp : int, optional
Taper length between bus and arm widths.
via_h2m : Any, optional
Heater-to-metal via object or cell.
isl : Any, optional
Isolation helper object or cell.
L_heater : Any, optional
Optional explicit heater length.
port_align : bool, optional
Align optical ports to a common grid.
show_pins : bool, optional
Show Nazca pin stubs in the generated layout.
Attributes
----------
cell : nazca.Cell
Generated triangular MZI mesh layout cell.
"""
def __init__(self,
BS: Any=None, xs_wg: str='strip',
BS: Any=None, xs_wg: str='strip',
L_arm: int=80, D_arm: int=50, w_wg: float=0.45,
n_ports: int=8, R_bend: int=6, L_compensate: int=10, R_compensate: int=10,
xs_heater: str='heater', bend_heaters: bool=True, dL_ht: float=0, xs_metal: str='metal', w_ht: float=2.5, w_metal: float=8,
@@ -950,31 +1168,9 @@ class MZI_mesh_Tri(MZI_mesh_U):
isl: Any = None,
L_heater: Any = None,
port_align: bool=True, show_pins: bool=False) -> None:
"""Generate a triangular MZI mesh.
"""Initialize the MZI mesh Tri composite.
Args:
BS (Any, optional): Beam splitter cell/object; None generates the default DC. Defaults to None.
xs_wg (str, optional): Waveguide xsection name. Defaults to 'strip'.
L_arm (int, optional): MZI unit arm length. Defaults to 80.
D_arm (int, optional): MZI unit arm spacing. Defaults to 50.
w_wg (float, optional): Mesh waveguide width. Defaults to 0.45.
n_ports (int, optional): Number of optical input/output ports. Defaults to 8.
R_bend (int, optional): Mesh routing bend radius. Defaults to 6.
L_compensate (int, optional): Straight length inside compensation bends. Defaults to 10.
R_compensate (int, optional): Bend radius inside compensation cells. Defaults to 10.
xs_heater (str, optional): Heater xsection name. Defaults to 'heater'.
bend_heaters (bool, optional): Route heaters along bent arms. Defaults to True.
dL_ht (float, optional): Heater routing vertical offset. Defaults to 0.
xs_metal (str, optional): Metal xsection name. Defaults to 'metal'.
w_ht (float, optional): Heater width. Defaults to 2.5.
w_metal (float, optional): Metal width. Defaults to 8.
w_ram (float, optional): Internal arm width passed to the unit cell. Defaults to 0.45.
Ltp (int, optional): Taper length between waveguide widths. Defaults to 15.
via_h2m (Any, optional): Heater-to-metal via object or cell. Defaults to None.
isl (Any, optional): Isolation helper object or cell. Defaults to None.
L_heater (Any, optional): Optional explicit heater length. Defaults to None.
port_align (bool, optional): Align external optical ports. Defaults to True.
show_pins (bool, optional): Show Nazca pin stubs. Defaults to False.
See the class docstring for parameter descriptions.
"""
super().__init__(BS, xs_wg, L_arm, D_arm, w_wg, n_ports, R_bend, L_compensate, R_compensate, 'triangle', xs_heater, bend_heaters, dL_ht, xs_metal, w_ht, w_metal,
w_ram,Ltp,