releaseing file deleted
This commit is contained in:
@@ -28,6 +28,9 @@ jobs:
|
||||
# This generates the linux_x86_64.whl inside the dist/ folder
|
||||
run: python build_wheel.py
|
||||
|
||||
- name: Export Technology Manifests
|
||||
run: python scripts/export_technology_manifests.py --dest exported_PDKs
|
||||
|
||||
- name: Inject Prebuilt Windows Wheel
|
||||
# This copies your locally-built Windows wheel into the dist/ folder
|
||||
# so they sit side-by-side right before the release is published.
|
||||
@@ -44,4 +47,4 @@ jobs:
|
||||
with:
|
||||
# This command scopes up everything currently sitting in the dist/ folder
|
||||
files: "dist/*.whl"
|
||||
api_key: ${{ secrets.GITEA_TOKEN }}
|
||||
api_key: ${{ secrets.GITEA_TOKEN }}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,65 +0,0 @@
|
||||
import nazca as nd
|
||||
from .Foundry import Foundry
|
||||
|
||||
class AMF_Si220_Active(Foundry) :
|
||||
|
||||
## Generall parameters
|
||||
STD_SMWG_WIDTH = 0.45
|
||||
SLAB_GROWTH = 2
|
||||
W_METAL_MIN = 5
|
||||
SPACING_HEATER_MIN = 2
|
||||
SPACING_METAL_MIN = 4
|
||||
W_HEATER_MIN = 3
|
||||
|
||||
lib_path = 'GDS_lib\\'
|
||||
|
||||
# show_pins = False
|
||||
|
||||
def __init__(self, layermap={
|
||||
|
||||
'STRIP_COR' : ((10,0), 'RIB'),
|
||||
|
||||
'SRIB_COR' : ((11,0), 'GRAT'),
|
||||
|
||||
'RIB_COR' : ((12,0), 'SLAB'),
|
||||
|
||||
'SINWIN1' : ((53,0), 'SINWIN1'),
|
||||
'SINWG1' : ((54,0), 'SINWG1'),
|
||||
|
||||
'HEATER' : ((115,0), 'HTR'),
|
||||
|
||||
'VIA_S2M' : ((100,0), 'VIA1'),
|
||||
'VIA_H2M' : ((120,0), 'VIA2'),
|
||||
'VIA_M2M' : ((120,0), 'VIA2'),
|
||||
|
||||
'METAL' : ((105,0), 'METAL'),
|
||||
'METAL_2' : ((125,0), 'METAL_2'),
|
||||
|
||||
'PAD' : ((150,0), 'BONDPAD'),
|
||||
|
||||
'OPEN' : ((151,0), 'OX_OPEN'),
|
||||
|
||||
'ISL' : ((160,0), 'DT'),
|
||||
|
||||
### Active part
|
||||
'PP' : ((21,0), 'PCONT'),
|
||||
'PCONT' : ((21,0), 'PCONT'),
|
||||
'NP' : ((22,0), 'NCONT'),
|
||||
'NCONT' : ((22,0), 'NCONT'),
|
||||
'PLD' : ((23,0), 'PIM'),
|
||||
'NLD' : ((24,0), 'NIM'),
|
||||
'PLD2' : ((25,0), 'IPD'),
|
||||
'NLD2' : ((26,0), 'NPD'),
|
||||
|
||||
'GE' : ((40,0), 'GeEP'),
|
||||
'PPPGE' : ((20,0), 'PPPGE'),
|
||||
'NPPGE' : ((41,0), 'NPPGE'),
|
||||
}):
|
||||
super().__init__(layermap=layermap)
|
||||
self._add_xsection_(xsection='strip',layers=['STRIP_COR'],growth=[0])
|
||||
self._add_xsection_(xsection='rib',layers=['STRIP_COR','RIB_COR'],growth=[0,3]) ## Slab waveguide
|
||||
self._add_xsection_(xsection='rib_s',layers=['STRIP_COR','SRIB_COR'],growth=[0,4]) ## Slab waveguide
|
||||
self._add_xsection_(xsection='isl',layers=['ISL'],growth=[0])
|
||||
self._add_xsection_(xsection='sn',layers=['SINWG1','SINWIN1'],growth=[0,21])
|
||||
|
||||
self._add_xsection_(xsection='pad',layers=['METAL_2','PAD'],growth=[0,-2.5]) ## DRC 4.2 - [AMF-QP-RND-006]
|
||||
@@ -1,7 +1,7 @@
|
||||
import nazca as nd
|
||||
from .Foundry import Foundry
|
||||
|
||||
class EOM1_2ML_CU(Foundry) :
|
||||
class EOM1_2ML_CU_RDL(Foundry) :
|
||||
|
||||
## Generall parameters
|
||||
STD_SMWG_WIDTH = 0.45
|
||||
@@ -68,4 +68,24 @@ class EOM1_2ML_CU(Foundry) :
|
||||
'PD_SIPP' : ((100,140)),
|
||||
'PD_SINP' : ((100,150)),
|
||||
}):
|
||||
|
||||
super().__init__(layermap=layermap)
|
||||
|
||||
## add cross sections
|
||||
nd.add_xsection("strip")
|
||||
nd.add_layer2xsection("strip",layer="WG_HM",growx=0,growy=0)
|
||||
nd.add_layer2xsection("strip",layer="WG_STRIP",growx=4,growy=4)
|
||||
|
||||
nd.add_xsection("rib_low")
|
||||
nd.add_layer2xsection("rib_low",layer="WG_HM",growx=0,growy=0)
|
||||
nd.add_layer2xsection("rib_low",layer="WG_SRIB",growx=3,growy=3)
|
||||
nd.add_layer2xsection("rib_low",layer="WG_STRIP",leftedge=(-0.5,-3),rightedge=(-0.5,-3.5))
|
||||
nd.add_layer2xsection("rib_low",layer="WG_STRIP",leftedge=(0.5,3.5),rightedge=(0.5,3))
|
||||
|
||||
nd.add_xsection("metal_1")
|
||||
nd.add_layer2xsection("metal_1",layer="UTM",growx=0,growy=0)
|
||||
nd.add_layer2xsection("metal_1",layer="SSIN0",growx=2.5,growy=2.5)
|
||||
|
||||
nd.add_xsection("metal_2")
|
||||
nd.add_layer2xsection("metal_2",layer="UTM2",growx=0,growy=0)
|
||||
nd.add_layer2xsection("metal_2",layer="SSIN1",growx=2.5,growy=2.5)
|
||||
@@ -1,6 +1,5 @@
|
||||
|
||||
from .AMF import AMF_Si220_Active
|
||||
from .Silterra import EOM1_2ML_CU
|
||||
from .Silterra import EOM1_2ML_CU_RDL
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
from .foundries import *
|
||||
from .components import DC as DC, DC_bend as DC_bend, DC_pX_3sg as DC_pX_3sg, EC_dual_layer_px3 as EC_dual_layer_px3
|
||||
from .routing import Route as Route
|
||||
@@ -1,4 +0,0 @@
|
||||
def __cell_arg__(arg, arg_name, func_name): ...
|
||||
def __list_convert__(var, name, func_name): ...
|
||||
def __array_convert__(var, name, func_name, num: int = 1): ...
|
||||
def __xs_exist__(xs, para_name, func_name): ...
|
||||
@@ -1 +0,0 @@
|
||||
from .primitives import *
|
||||
@@ -1,30 +0,0 @@
|
||||
from _typeshed import Incomplete
|
||||
|
||||
class EC_dual_layer_px3:
|
||||
name: Incomplete
|
||||
instantiate: bool
|
||||
w_in: Incomplete
|
||||
L_in: Incomplete
|
||||
Ltp1: Incomplete
|
||||
Ltp2: Incomplete
|
||||
Ltp3: Incomplete
|
||||
L_end: Incomplete
|
||||
w_tip_core: Incomplete
|
||||
w1_slab: Incomplete
|
||||
w_tip_slab: Incomplete
|
||||
w_mid_slab: Incomplete
|
||||
w_box: Incomplete
|
||||
w_box_end: Incomplete
|
||||
L_box_end: Incomplete
|
||||
w_DT: Incomplete
|
||||
xs_SiN: Incomplete
|
||||
layer_SiN_slab: Incomplete
|
||||
layer_top_cover: Incomplete
|
||||
layer_dum_exl_be: Incomplete
|
||||
layer_DT: Incomplete
|
||||
xs_Trench: Incomplete
|
||||
angle_tile: Incomplete
|
||||
R_bend: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, name: str = None, w_in: float = 1.0, L_in: float = 15, Ltp1: float = 100, Ltp2: float = 200, Ltp3: float = 400, L_end: float = 0, w_tip_core: float = 0.2, w1_slab: float = 0.6, w_tip_slab: float = 0.2, w_mid_slab: float = 0.45, w_box: float = 8, w_box_end: float = 12, L_box_end: float = 2, w_DT: float = 12, xs_SiN: str = 'sin', layer_SiN_slab: str = 'SiN_Rib_WG', layer_DT: str = 'OXIDE_FACET', xs_Trench: str = 'air_trench', layer_top_cover: str = 'PAD_OPTICAL', layer_dum_exl_be: str = None, angle_tile: float = 8, R_bend: float = 50) -> None: ...
|
||||
def generate_gds(self): ...
|
||||
@@ -1,5 +0,0 @@
|
||||
from .directional_couplers import *
|
||||
from .EC_dual_layer_px3 import *
|
||||
from .beam_splitters import *
|
||||
from .multimode_interferometers import *
|
||||
from .spiral import *
|
||||
@@ -1,39 +0,0 @@
|
||||
from ...structures import *
|
||||
from ...foundries import *
|
||||
import numpy as np
|
||||
from ...basic import __cell_arg__ as __cell_arg__
|
||||
from ...routing import Route as Route
|
||||
from _typeshed import Incomplete
|
||||
|
||||
class YBranch:
|
||||
name: Incomplete
|
||||
instantiate: bool
|
||||
w: Incomplete
|
||||
L: Incomplete
|
||||
res: Incomplete
|
||||
R_att: Incomplete
|
||||
A_att: Incomplete
|
||||
w_port: Incomplete
|
||||
xs: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, name: str = None, xs: str = 'strip', w: list | np.ndarray = [1.2, 1.0, 1.8, 1.2, 1.0, 1.2, 1.2], L: float = 6, R_att: float = 10, A_att: float = 10, w_port: float = 0.45, show_pins: bool = False, sharp_patch: bool = True, res: float = 0.1) -> None: ...
|
||||
def generate_gds(self, show_pins: bool = False, sharp_patch: bool = True): ...
|
||||
|
||||
class Ybranch_3wg:
|
||||
name: Incomplete
|
||||
instantiate: bool
|
||||
w0: Incomplete
|
||||
w1: Incomplete
|
||||
gap: Incomplete
|
||||
Lcp: Incomplete
|
||||
xs: Incomplete
|
||||
w_wg: Incomplete
|
||||
R0: Incomplete
|
||||
angle: Incomplete
|
||||
L_attach: Incomplete
|
||||
L_in_tp: Incomplete
|
||||
cell: Incomplete
|
||||
L: Incomplete
|
||||
def __init__(self, name=None, w0: float = 0.4, w1: float = 0.2, gap: float = 0.18, Lcp: float = 20, xs: str = 'strip', w_wg: float = 0.45, R0: float = 10, angle: float = 20, L_attach: float = 3, L_in_tp: float = 3, sharp_patch: bool = True) -> None: ...
|
||||
def generate_gds(self, sharp_patch, err_asy: int = 0): ...
|
||||
def generate_test_gds(self, gc, dX_gc2gc: int = 400, dY_gc2gc: int = 80, sharp_patch: bool = True, Rbend: int = 15): ...
|
||||
@@ -1,141 +0,0 @@
|
||||
from ...basic import __cell_arg__ as __cell_arg__
|
||||
from ...routing import Route as Route
|
||||
from ...structures import Clothoid as Clothoid, circle as circle
|
||||
from _typeshed import Incomplete
|
||||
|
||||
class ring_bus_wg:
|
||||
xs: Incomplete
|
||||
R_cp: Incomplete
|
||||
w_bus: Incomplete
|
||||
dLc: Incomplete
|
||||
dAc: Incomplete
|
||||
w_wg: Incomplete
|
||||
bend_DC: Incomplete
|
||||
euler_transistion: Incomplete
|
||||
dL_trans: Incomplete
|
||||
dA_trans: Incomplete
|
||||
R_max_trans: Incomplete
|
||||
w_trans: Incomplete
|
||||
R_max_anti: Incomplete
|
||||
R_min_anti: Incomplete
|
||||
A_anti: Incomplete
|
||||
wg_Ltp: Incomplete
|
||||
dL_p2p: Incomplete
|
||||
res: Incomplete
|
||||
end_patch: Incomplete
|
||||
L: int
|
||||
clothoid_order: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, xs: str = 'strip', R_cp: int = 20, w_bus: float = 0.5, bend_DC: bool = True, w_wg: float = 0.5, dLc: int = 10, dAc: int = 10, euler_transistion: bool = False, dL_trans: int = 10, dA_trans: int = 30, R_max_trans: int = 100, w_trans: float = 0.5, euler_anti_bend: bool = False, R_max_anti: int = 100, R_min_anti: int = 10, A_anti=None, res: float = 0.1, wg_Ltp: int = 5, dL_p2p=None, sharp_patch: bool = True, show_pins: bool = False, end_patch: bool = False, clothoid_order: int = 1) -> None: ...
|
||||
w: Incomplete
|
||||
sz: Incomplete
|
||||
def generate_gds(self, sharp_patch, show_pins: bool = False): ...
|
||||
|
||||
class ADC_STD_2x2:
|
||||
name: Incomplete
|
||||
instantiate: bool
|
||||
wu0: Incomplete
|
||||
xs: Incomplete
|
||||
wu1: Incomplete
|
||||
wu_in: Incomplete
|
||||
wu_out: Incomplete
|
||||
wd0: Incomplete
|
||||
wd1: Incomplete
|
||||
wd_in: Incomplete
|
||||
wd_out: Incomplete
|
||||
Lu: Incomplete
|
||||
Ld: Incomplete
|
||||
angle: Incomplete
|
||||
g0: Incomplete
|
||||
g1: Incomplete
|
||||
sbend_type: Incomplete
|
||||
Rmax: Incomplete
|
||||
Rmin: Incomplete
|
||||
sharp_patch: Incomplete
|
||||
euler_points: Incomplete
|
||||
res: Incomplete
|
||||
Ru0: Incomplete
|
||||
Ru1: Incomplete
|
||||
Rd0: Incomplete
|
||||
Rd1: Incomplete
|
||||
tp_angle: Incomplete
|
||||
cell: Incomplete
|
||||
L: Incomplete
|
||||
def __init__(self, name=None, xs: str = 'strip', wu0: float = 0.45, wu1: float = 0.61, wu_in: float = 0.45, wu_out: float = 0.8, wd0: float = 0.33, wd1: float = 0.2, wd_in: float = 0.45, wd_out: float = 0.8, Lu: int = 33, Ld: int = 33, angle: int = 20, g0: float = 0.2, g1: float = 0.2, sbend_type: str = 'euler', Rmax=None, Rmin: int = 5, Ru0: int = 0, Ru1: int = 20, Rd0: int = 20, Rd1: int = 0, tp_angle: int = 2, sharp_patch: bool = True, show_pins: bool = False, euler_points: int = 64, res: float = 0.1) -> None: ...
|
||||
def generate_gds(self, err: int = 0, show_pins: bool = False): ...
|
||||
err: Incomplete
|
||||
def generate_err(self, err: float = 0.02): ...
|
||||
def generate_test_gds(self, gc, dX_gc2gc: int = 400, dY_gc2gc: int = 80, sharp_patch: bool = True): ...
|
||||
|
||||
class DC(ADC_STD_2x2):
|
||||
def __init__(self, name=None, xs: str = 'strip', w_cp: float = 0.45, w_wg: float = 0.45, L_cp: float = 30, angle: float = 20, gap: float = 0.2, sbend_type: str = 'circular', Rmax: float = None, Rmin: float = 5, R0: float = 10, tp_angle: float = 2, sharp_patch: bool = True, show_pins: bool = False) -> None: ...
|
||||
def generate_test_gds(self, gc, dX_gc2gc: int = 300, dY_gc2gc: int = 40, sharp_patch: bool = True): ...
|
||||
|
||||
class BS_tdc(ADC_STD_2x2):
|
||||
def __init__(self, name=None, xs: str = 'strip', wa0: float = 0.35, wa1: float = 0.45, wb0: float = 0.55, wb1: float = 0.45, w_wg: float = 0.45, gap: float = 0.2, Lt: float = 20, R0: float = 30, angle: float = 15, sbend_type: str = 'circle') -> None: ...
|
||||
|
||||
class MDM(ADC_STD_2x2):
|
||||
wb0: Incomplete
|
||||
wb1: Incomplete
|
||||
w0: Incomplete
|
||||
w1: Incomplete
|
||||
w_wg: Incomplete
|
||||
gap0: Incomplete
|
||||
gap1: Incomplete
|
||||
Lt_bus: Incomplete
|
||||
Lt_cp: Incomplete
|
||||
xs: Incomplete
|
||||
R0: Incomplete
|
||||
angle: Incomplete
|
||||
symmetric_BUS: Incomplete
|
||||
Rmin: Incomplete
|
||||
L: Incomplete
|
||||
def __init__(self, name=None, xs: str = 'strip', wb0: float = 0.45, wb1: float = 0.61, wb_in: float = 0.45, wb_out: float = 0.88, w_wg: float = 0.45, w0: float = 0.33, w1: float = 0.2, gap0: float = 0.2, Lt_bus: float = 20, R0: float = 40, angle: float = 22.5, Lt_cp: float = None, gap1: float = None, Lb0: float = None, symmetric_BUS: bool = True, single_end: bool = True, Rmin: float = 8) -> None: ...
|
||||
def generate_test_gds(self, gc, dX_gc2gc: int = 300, dY_gc2gc: int = 40, sharp_patch: bool = True): ...
|
||||
|
||||
class DC_bend:
|
||||
name: Incomplete
|
||||
instantiate: bool
|
||||
w_in: Incomplete
|
||||
w_out: Incomplete
|
||||
gap: Incomplete
|
||||
r_in: Incomplete
|
||||
r_out: Incomplete
|
||||
theta_arc: Incomplete
|
||||
theta_ext: Incomplete
|
||||
w_wg: Incomplete
|
||||
xs_wg: Incomplete
|
||||
sharp_patch: Incomplete
|
||||
show_pins: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, name=None, w_in: float = 0.45, w_out: float = 0.45, gap: float = 0.2, r_in: int = 40, theta_arc: int = 30, w_wg: float = 0.45, theta_ext: int = 15, xs_wg: str = 'strip', sharp_patch: bool = True, show_pins: bool = False) -> None: ...
|
||||
width: Incomplete
|
||||
length: Incomplete
|
||||
def generate_gds(self, cellname: str = ''): ...
|
||||
def generate_test_gds(self, gc, dX_gc2gc: int = 300, dY_gc2gc: int = 40, sharp_patch: bool = True): ...
|
||||
|
||||
class DC_pX_3sg:
|
||||
name: Incomplete
|
||||
instantiate: bool
|
||||
xs_wg: Incomplete
|
||||
Lc1: Incomplete
|
||||
Lp1: Incomplete
|
||||
Lc2: Incomplete
|
||||
Lt: Incomplete
|
||||
w_cp: Incomplete
|
||||
dw: Incomplete
|
||||
gap: Incomplete
|
||||
R0: Incomplete
|
||||
A: Incomplete
|
||||
w_wg: Incomplete
|
||||
sharp_patch: Incomplete
|
||||
pX_type: Incomplete
|
||||
port_symmetric: Incomplete
|
||||
cell: Incomplete
|
||||
cellU: Incomplete
|
||||
cellD: Incomplete
|
||||
L: Incomplete
|
||||
length: Incomplete
|
||||
def __init__(self, name=None, xs_wg: str = 'strip', Lc1: float = 10, Lp1: float = 5, Lc2: float = 10, Lt: float = 1, w_cp: float = 0.5, dw: float = 0.1, gap: float = 0.2, R0: float = 10, A: float = 15, w_wg: float = 0.45, pX_type: str = 'symmetric', port_symmetric: bool = True, sharp_patch: bool = True) -> None: ...
|
||||
def generate_gds(self, err: int = 0): ...
|
||||
def generate_test_gds(self, gc, dX_gc2gc: int = 300, dY_gc2gc: int = 40, sharp_patch: bool = True): ...
|
||||
@@ -1,121 +0,0 @@
|
||||
from ...basic import __cell_arg__ as __cell_arg__
|
||||
from ...routing import Route as Route
|
||||
from ...structures import Clothoid as Clothoid, circle as circle, hole as hole
|
||||
from _typeshed import Incomplete
|
||||
|
||||
class Nano_ant:
|
||||
w_wg: Incomplete
|
||||
xs_wg: Incomplete
|
||||
etch_type: str
|
||||
vector: Incomplete
|
||||
teeth_number: Incomplete
|
||||
pitch: Incomplete
|
||||
duty_cycle: Incomplete
|
||||
taper_length: Incomplete
|
||||
ant_length: Incomplete
|
||||
width: Incomplete
|
||||
max_theta: Incomplete
|
||||
define_type: Incomplete
|
||||
etch_depth: Incomplete
|
||||
show_pins: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, w_wg: float = 0.41, xs_wg: str = 'strip', define_type: str = 'non-periodic', vector: float | list = [0.5, 0.5, 0.5, 0.5, 0.5, 0.5], taper_length: float = 3, width: float = 6, max_theta: float = 110, pitch: float | list = 0.6, duty_cycle: float | list = 0.3, teeth_number: float = 6, etch_depth: str | list = ['METCH'], show_pins: bool = True) -> None: ...
|
||||
def generate_gds(self, sample_step: float = 0.1, cell_name: str = 'Nanoantenna'): ...
|
||||
def generate_gds_positive(self, sample_step: float = 0.1): ...
|
||||
def generate_gds_error(self) -> None: ...
|
||||
|
||||
class Taper:
|
||||
width1: Incomplete
|
||||
width2: Incomplete
|
||||
length: Incomplete
|
||||
type: Incomplete
|
||||
order: int
|
||||
show_pins: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, width1: int = 4, width2: float = 0.45, length: int = 30, type: str = 'linear', show_pins: bool = False) -> None: ...
|
||||
def generate_gds(self): ...
|
||||
|
||||
class Grating_2D_Hole:
|
||||
w_wg: Incomplete
|
||||
w_gt: Incomplete
|
||||
l_taper: Incomplete
|
||||
type_taper: Incomplete
|
||||
gt_vector: Incomplete
|
||||
gt_num: Incomplete
|
||||
gt_diameter: Incomplete
|
||||
gt_layer: Incomplete
|
||||
polysi_vector: Incomplete
|
||||
polysi_num: Incomplete
|
||||
polysi_diameter: Incomplete
|
||||
polysi_layer: Incomplete
|
||||
reflector_vector: Incomplete
|
||||
l_field_center: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, w_wg: float = 0.5, w_gt: int = 5, l_taper: int = 30, type_taper: str = 'parabolic', gt_vector=[0.5, 0.5, 0.5, 0.5, 0.5], gt_diameter: float = 0.4, gt_layer: str = 'STRIP_COR', polysi_vector=[0.5, 0.5, 0.5, 0.5, 0.5], polysi_diameter: float = 0.4, polysi_layer: str = 'FCW_TRE', reflector_vector=[0.3, 0.3, 0.3, 0.3, 0.3, 0.3], l_field_center: int = 1) -> None: ...
|
||||
reflector_num: Incomplete
|
||||
def generate_gds(self): ...
|
||||
|
||||
class GC_STD_2D:
|
||||
name: Incomplete
|
||||
instantiate: bool
|
||||
num_x: Incomplete
|
||||
num_y: Incomplete
|
||||
Lx_taper: Incomplete
|
||||
Ly_taper: Incomplete
|
||||
Lx_end: Incomplete
|
||||
Ly_end: Incomplete
|
||||
Lx_side: Incomplete
|
||||
Ly_side: Incomplete
|
||||
Lx_port: Incomplete
|
||||
Ly_port: Incomplete
|
||||
xs_open: Incomplete
|
||||
w_wg: Incomplete
|
||||
xs_wg: Incomplete
|
||||
etch_type: Incomplete
|
||||
shape: Incomplete
|
||||
hole_shape: Incomplete
|
||||
Dx_hole: Incomplete
|
||||
Dy_hole: Incomplete
|
||||
Px: Incomplete
|
||||
Py: Incomplete
|
||||
P_AR: Incomplete
|
||||
L_AR: Incomplete
|
||||
show_pins: Incomplete
|
||||
positive: bool
|
||||
layer_etch: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, name=None, etch_type: str = 'FETCH', xs_wg: str = 'grating', Dx_hole: float = 0.3, Dy_hole: float = 0.3, hole_shape: str = 'circle', shape: str = 'circle', xs_open: str = None, Px: float = 0.57, Py: float = 0.57, num_x: float = 25, num_y: float = 25, Lx_taper: float = 50.0, Ly_taper: float = 0.0, Lx_end: float = 1.0, Ly_end: float = 1.0, Lx_side: float = 0.5, Ly_side: float = 0.5, Lx_port: float = 5.0, Ly_port: float = 5.0, w_wg: float = 0.5, show_pins: bool = False, P_AR: float = 0.6, L_AR: float = 1) -> None: ...
|
||||
def generate_negative(self): ...
|
||||
def generate_positive(self): ...
|
||||
def generate_test_gds(self, dX_gc2gc: int = 300): ...
|
||||
|
||||
class GC_STD_1D:
|
||||
name: Incomplete
|
||||
instantiate: bool
|
||||
xs_open: Incomplete
|
||||
xs_wg: Incomplete
|
||||
w_wg: Incomplete
|
||||
L_taper: Incomplete
|
||||
L_end: Incomplete
|
||||
A_taper: Incomplete
|
||||
show_pins: Incomplete
|
||||
L_tail: Incomplete
|
||||
positive: bool
|
||||
Period: Incomplete
|
||||
eta_etch: Incomplete
|
||||
num: Incomplete
|
||||
sector_gc: Incomplete
|
||||
L_AR: Incomplete
|
||||
P_AR: Incomplete
|
||||
layer_etch: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, name=None, xs_wg: str = 'strip', w_wg: float = 0.5, etch_type: str = 'FETCH', xs_open: str = None, L_taper: float = 10.0, L_end: float = 2.0, A_taper: float = 30.0, Period: float = 0.5, eta_etch: float = 0.5, num: int = 20, sector_gc: bool = True, show_pins: bool = False, L_tail: int = 2, P_AR: float = 1.0, L_AR: float = 2.0) -> None: ...
|
||||
def generate_negative(self): ...
|
||||
def generate_positive(self): ...
|
||||
def generate_test_dev(self, dX_gc2gc): ...
|
||||
|
||||
class FA:
|
||||
pitch: Incomplete
|
||||
number: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, fiber_coupler, pitch, number, show_pins: bool = False) -> None: ...
|
||||
@@ -1,29 +0,0 @@
|
||||
from ...structures import *
|
||||
from ...routing import Route as Route
|
||||
from ...structures import Conchoid as Conchoid
|
||||
from _typeshed import Incomplete
|
||||
from turtle import shape as shape
|
||||
|
||||
class MMI_ML:
|
||||
name: Incomplete
|
||||
instantiate: bool
|
||||
L_arm: Incomplete
|
||||
xs: Incomplete
|
||||
w_arm: Incomplete
|
||||
arm_sine_width: Incomplete
|
||||
L_mmi: Incomplete
|
||||
w_mmi: Incomplete
|
||||
res: Incomplete
|
||||
N_out: Incomplete
|
||||
N_in: Incomplete
|
||||
Dp_out: Incomplete
|
||||
Dp_in: Incomplete
|
||||
mmi_sine_width: Incomplete
|
||||
cell: Incomplete
|
||||
L: Incomplete
|
||||
def __init__(self, name=None, L_arm=[10], w_arm=[0.45, 1.35], xs: str = 'strip', arm_sine_width: bool = False, L_mmi=[10], w_mmi=[5, 5], mmi_sine_width: bool = False, sharp_patch: bool = True, show_pins: bool = False, res: float = 0.01, N_out: int = 3, N_in: int = 1, Dp_out: float = 1.5, Dp_in: float = 1.5) -> None: ...
|
||||
def generate_gds(self, sharp_patch, show_pins): ...
|
||||
def generate_test_gds(self, gc, dX_gc2gc, dY_gc2gc, R_bend: int = 10, Xout_offset: int = 50): ...
|
||||
|
||||
class MMI_STD(MMI_ML):
|
||||
def __init__(self, name=None, N_out: int = 3, N_in: int = 1, L_arm: int = 10, w_wg: float = 0.45, w_port: float = 1.2, xs: str = 'strip', L_mmi: int = 10, w_mmi: int = 5, sharp_patch: bool = True, show_pins: bool = False, Dp_out: float = 1.5, Dp_in: float = 1.5) -> None: ...
|
||||
@@ -1,108 +0,0 @@
|
||||
from ...structures import *
|
||||
from ...foundries import *
|
||||
import nazca as nd
|
||||
from ...routing import Route as Route
|
||||
from ...structures import Conchoid as Conchoid
|
||||
from _typeshed import Incomplete
|
||||
from scipy import optimize as optimize
|
||||
|
||||
class spiral:
|
||||
Dmin: Incomplete
|
||||
Lmin: Incomplete
|
||||
R_bend: Incomplete
|
||||
shape: Incomplete
|
||||
cycles: Incomplete
|
||||
width: Incomplete
|
||||
w_port: Incomplete
|
||||
gap: Incomplete
|
||||
xs: Incomplete
|
||||
layer: Incomplete
|
||||
name: Incomplete
|
||||
instantiate: bool
|
||||
port_angle: Incomplete
|
||||
w_bend_center: Incomplete
|
||||
Rmin_bend_center: Incomplete
|
||||
Euler_bend: Incomplete
|
||||
Rmin_euler: Incomplete
|
||||
sharp_patch: Incomplete
|
||||
w_bend_port: Incomplete
|
||||
Ltp_port: Incomplete
|
||||
cell_transition: Incomplete
|
||||
res: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, name: str = None, shape: str = 'circle', Dmin: float = 50, R_bend: float = 10, Rmin_euler: float = 10, Lmin: float = 50, width: float = 2, w_port: float = 0.45, w_bend_center: float = 1, Rmin_bend_center: float = 10, gap: float = 1, cycles: float = 20, xs: str = 'strip', layer: str = None, w_bend_port=None, Ltp_port: int = 10, res: float = 0.5, cell_transition: nd.Cell = None, port_angle: float = 180, Euler_bend: bool = False, show_pins: bool = False, sharp_patch: bool = True, sample_build: bool = False) -> None: ...
|
||||
def __strt_with_taper__(self, width1, width2, xs, length, Ltp: int = 15, Lstart: int = 2): ...
|
||||
Atilt: Incomplete
|
||||
L: Incomplete
|
||||
Ru: Incomplete
|
||||
Rd: Incomplete
|
||||
bend_cell: Incomplete
|
||||
def generate_gds(self, show_pins): ...
|
||||
|
||||
class spiral_rectangle:
|
||||
Dmin: Incomplete
|
||||
Lmin: Incomplete
|
||||
Rmax_bend: Incomplete
|
||||
Rmin_bend: Incomplete
|
||||
wmin_bend: Incomplete
|
||||
cycles: Incomplete
|
||||
width: Incomplete
|
||||
w_port: Incomplete
|
||||
gap: Incomplete
|
||||
xs: Incomplete
|
||||
layer: Incomplete
|
||||
Ltp: Incomplete
|
||||
Lpatch: Incomplete
|
||||
name: Incomplete
|
||||
instantiate: bool
|
||||
port_angle: Incomplete
|
||||
sharp_patch: Incomplete
|
||||
w_bend_port: Incomplete
|
||||
Lport: Incomplete
|
||||
cell_xs_transition: Incomplete
|
||||
res: Incomplete
|
||||
in_out_align: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, name: str = None, Dmin: float = 50, Rmax_bend: float = 10, Rmin_bend: float = 10, wmin_bend: float = 10, Lmin: float = 50, width: float = 2, w_port: float = 0.45, gap: float = 1, cycles: float = 20, xs: str = 'strip', layer: str = None, w_bend_port=None, Lport: int = 10, Ltp: int = 10, res: float = 0.5, cell_xs_transition=None, port_angle: float = 180, show_pins: bool = False, sharp_patch: bool = True, in_out_align: bool = True, Lpatch: float = 0.05, sample_build: bool = False) -> None: ...
|
||||
def __strt_with_taper__(self, width1, width2, xs, length, Ltp: int = 15, Lstart: int = 2): ...
|
||||
bend_cell: Incomplete
|
||||
L: Incomplete
|
||||
def generate_gds(self, show_pins): ...
|
||||
|
||||
class Spiral_Rect_STD(spiral_rectangle):
|
||||
def __init__(self, name: str = None, Dmin: float = 50, R_bend: float = 10, Lmin: float = 50, width: float = 2, w_port: float = 0.45, gap: float = 1, cycles: float = 20, xs: str = 'strip', layer: str = None, Lport: int = 10, in_out_align: bool = True, res: float = 0.5, cell_xs_transition=None, port_angle: float = 180, show_pins: bool = False, sharp_patch: bool = True) -> None: ...
|
||||
|
||||
class spiral_circle:
|
||||
Dmin: Incomplete
|
||||
cycles: Incomplete
|
||||
width: Incomplete
|
||||
w_port: Incomplete
|
||||
gap: Incomplete
|
||||
xs: Incomplete
|
||||
layer: Incomplete
|
||||
name: Incomplete
|
||||
instantiate: bool
|
||||
port_angle: Incomplete
|
||||
w_bend_center: Incomplete
|
||||
Euler_Sbend: Incomplete
|
||||
sharp_patch: Incomplete
|
||||
Lport: Incomplete
|
||||
rib2strip: Incomplete
|
||||
res: Incomplete
|
||||
strict_condition: Incomplete
|
||||
R_ratio_mamnual: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, name: str = None, Dmin: float = 50, width: float = 2, w_port: float = 0.45, w_bend_center: float = 1, gap: float = 1, cycles: float = 20, xs: str = 'strip', layer: str = None, Lport: int = 10, res: float = 0.5, rib2strip: bool = True, port_angle: float = 180, Euler_Sbend: bool = False, show_pins: bool = False, sharp_patch: bool = True, strict_condition: bool = False, R_ratio_mamnual=None) -> None: ...
|
||||
def opt_euler(self, R, R0): ...
|
||||
Atilt: Incomplete
|
||||
Rmax: Incomplete
|
||||
L: Incomplete
|
||||
Ru: Incomplete
|
||||
Rd: Incomplete
|
||||
def generate_gds(self, show_pins): ...
|
||||
|
||||
class Spiral_Cicle_MM(spiral_circle):
|
||||
def __init__(self, name: str = None, Dmin: float = 50, width: float = 2, w_port: float = 0.45, w_bend_center: float = 1, gap: float = 1, cycles: float = 20, xs: str = 'strip', layer: str = None, Lport: int = 10, res: float = 0.5, rib2strip: bool = True, port_angle: float = 180, show_pins: bool = False, sharp_patch: bool = True, strict_condition: bool = False) -> None: ...
|
||||
|
||||
class Spiral_Cicle_STD(spiral_circle):
|
||||
def __init__(self, name: str = None, Dmin: float = 50, width: float = 2, w_port: float = 0.45, gap: float = 1, cycles: float = 20, xs: str = 'strip', layer: str = None, Lport: int = 10, res: float = 0.5, rib2strip: bool = True, port_angle: float = 180, show_pins: bool = False, sharp_patch: bool = True, strict_condition: bool = False) -> None: ...
|
||||
@@ -1,3 +0,0 @@
|
||||
SECRET_KEY: bytes
|
||||
|
||||
def generate_license(mac_address: str, days_valid: int, output_file: str = 'mxpic.lic'): ...
|
||||
@@ -1 +0,0 @@
|
||||
def verify_license() -> None: ...
|
||||
@@ -1,11 +0,0 @@
|
||||
from .Foundry import Foundry as Foundry
|
||||
|
||||
class AMF_Si220_Active(Foundry):
|
||||
STD_SMWG_WIDTH: float
|
||||
SLAB_GROWTH: int
|
||||
W_METAL_MIN: int
|
||||
SPACING_HEATER_MIN: int
|
||||
SPACING_METAL_MIN: int
|
||||
W_HEATER_MIN: int
|
||||
lib_path: str
|
||||
def __init__(self, layermap=...) -> None: ...
|
||||
@@ -1,16 +0,0 @@
|
||||
from _typeshed import Incomplete
|
||||
|
||||
class Foundry:
|
||||
STD_SMWG_WIDTH: float
|
||||
SLAB_GROWTH: int
|
||||
W_METAL_MIN: int
|
||||
SPACING_HEATER_MIN: int
|
||||
SPACING_METAL_MIN: float
|
||||
W_HEATER_MIN: int
|
||||
W_VIA_H2M: float
|
||||
SPACING_VIA_H2M: float
|
||||
ISL_W_MIN: int
|
||||
ISL_SP_MIN: int
|
||||
show_pins: bool
|
||||
layermap: Incomplete
|
||||
def __init__(self, layermap=None) -> None: ...
|
||||
@@ -1,11 +0,0 @@
|
||||
from .Foundry import Foundry as Foundry
|
||||
|
||||
class EOM1_2ML_CU(Foundry):
|
||||
STD_SMWG_WIDTH: float
|
||||
SLAB_GROWTH: int
|
||||
W_METAL_MIN: int
|
||||
SPACING_HEATER_MIN: int
|
||||
SPACING_METAL_MIN: int
|
||||
W_HEATER_MIN: int
|
||||
lib_path: str
|
||||
def __init__(self, layermap=...) -> None: ...
|
||||
@@ -1,2 +0,0 @@
|
||||
from .AMF import AMF_Si220_Active as AMF_Si220_Active
|
||||
from .Silterra import EOM1_2ML_CU as EOM1_2ML_CU
|
||||
@@ -1 +0,0 @@
|
||||
from .routing import *
|
||||
@@ -1,36 +0,0 @@
|
||||
from ..structures import *
|
||||
import nazca as nd
|
||||
from _typeshed import Incomplete
|
||||
|
||||
def ic_exception(msg: str = '') -> None: ...
|
||||
|
||||
class Route(nd.interconnects.Interconnect):
|
||||
PCB: Incomplete
|
||||
sharp_patch: Incomplete
|
||||
Ltp_mm: Incomplete
|
||||
width2_mm: Incomplete
|
||||
MM_route: Incomplete
|
||||
def __init__(self, radius=None, width=None, angle: int = 90, Ltp_mm: int = 10, width2_mm: float = 1.0, MM_route: bool = False, xs=None, layer=None, adapt_width: bool = False, adapt_xs: bool = False, instantiate: bool = False, pinstyle=None, offset=None, varname=None, doc: str = '', PCB: bool = False, modes=None, sharp_patch: bool = True) -> None: ...
|
||||
def connPatch(self) -> None: ...
|
||||
def rt_bend(self, width: int = 3, xs: str = 'strip', angle: int = 90, layer=None, pin=None): ...
|
||||
def strt_mm(self, pin=None, width2=None, Ltp=None, width1=None, Lstart: float = 0.5, length=None, xs=None, arrow: bool = False): ...
|
||||
def line_mm(self, length=None, width=None, xs=None, width_mm=None, Ltp=None): ...
|
||||
def strt_mm_p2p(self, pin1=None, pin2=None, width2=None, Ltp=None, width1=None, Lstart: float = 0.5, length=None, xs=None, arrow: bool = False, name=None): ...
|
||||
def bend_p2p(self, pin1=None, pin2=None, radius=None, width=None, xs=None, name=None, arrow: bool = False, width_mm=None, Ltp=None, sharp_path: bool = True): ...
|
||||
def ubend_route(self, pin=None, offset: float = 20.0, radius=None, width=None, xs=None, length: int = 0, name=None, arrow: bool = False, balance: int = 0, end_angle: bool = False, width_mm=None, Ltp=None): ...
|
||||
def sbend_route(self, radius=None, width=None, pin=None, xs=None, offset: int = 20, Ltot=None, length1: int = 0, length2: int = 0, name=None, arrow: bool = False, Amax: float = 90.0, original_function: bool = False): ...
|
||||
def bend_strt_bend_p2p_mine(self, pin1=None, pin2=None, radius=None, radius1=None, radius2=None, width=None, xs=None, length1: int = 0, length2: int = 0, ictype: str = 'shortest', name=None, arrow: bool = False): ...
|
||||
def bend_route(self, radius=None, angle=None, width=None, pin=None, xs=None, length1: float = 0.1, length2: float = 0.1, name=None, arrow: bool = False, offset=None, sharp_patch: bool = True, original_function: bool = False): ...
|
||||
def bend_route_p2p(self, pin1=None, pin2=None, radius=None, width=None, xs=None, name=None, arrow: bool = False, original_function: bool = False): ...
|
||||
def bend_mine(self, radius=None, angle=None, width=None, pin=None, xs=None, length1: int = 0, length2: int = 0, name=None, arrow: bool = False, offset=None, sharp_patch: bool = True): ...
|
||||
def tube_mine(self, geo, showpins: bool = False, name=None, xs=None, arrow: bool = False, Ltp=None, width_mm=None, sharp_patch=None): ...
|
||||
def strt_bend_strt_p2p_mine(self, pin1=None, pin2=None, radius=None, radius1=None, radius2=None, width=None, xs=None, length1: int = 0, length2: int = 0, ictype: str = 'shortest', name=None, arrow: bool = False, width_mm=None, Ltp=None): ...
|
||||
def sbend_p2p_mine(self, pin1=None, pin2=None, width=None, radius=None, Lstart: int = 0, doFirst: int = 1, arrow: bool = False, width_mm=None, Ltp=None, sharp_patch: bool = False): ...
|
||||
def sbend_p2p(self, pin1=None, pin2=None, width=None, radius=None, Amax: int = 90, xs=None, doStrFirst: int = 1, Lstart: int = 0, BendEndFlag: int = 1, ref=None, name=None, arrow: bool = False, bsb: bool = True, sharp_patch=None, width_mm=None, Ltp=None): ...
|
||||
def bend_strt_bend_p2p(self, pin1=None, pin2=None, radius=None, radius1=None, radius2=None, width=None, xs=None, length1: int = 0, length2: int = 0, ictype: str = 'shortest', name=None, arrow: bool = True, width_mm=None, Ltp=None): ...
|
||||
def ubend_p2p(self, pin1=None, pin2=None, radius=None, width=None, xs=None, length: float = 0.1, name=None, arrow: bool = False, balance: int = 0, end_angle: bool = False, original_function: bool = False, Ltp=None, width_mm=None): ...
|
||||
def strt(self, length=None, width=None, pin=None, xs=None, edge1=None, edge2=None, edgepoints: int = 50, name=None, arrow: bool = False, gridpatch=None): ...
|
||||
def taper(self, length=None, width1=None, width2=None, shift: int = 0, xs=None, pin=None, name=None, patch: bool = False, arrow: bool = False): ...
|
||||
adapt_width: bool
|
||||
def taper_p2p(self, pin1=None, pin2=None, width1=None, width2=None, xs=None, name=None, arrow: bool = False): ...
|
||||
def strt_p2p(self, pin1=None, pin2=None, width=None, xs=None, name=None, arrow: bool = False): ...
|
||||
@@ -1,113 +0,0 @@
|
||||
import numpy as np
|
||||
from _typeshed import Incomplete
|
||||
|
||||
class hole:
|
||||
cell: Incomplete
|
||||
def __init__(self, r_hole: float = 0.3, Dx_hole: float = 0.3, Dy_hole: float = 0.3, Lx_sq: int = 6, Ly_sq: int = 6, offset: int = 0, res: float = 0.05, xs: str = 'strip', layer=None, sharp_patch: bool = True, hole_shape: str = 'circle') -> None: ...
|
||||
|
||||
class strt_round_courner:
|
||||
cell: Incomplete
|
||||
def __init__(self, width: int = 5, length: int = 10, layer=None, radius: int = 1, n_points: int = 64) -> None: ...
|
||||
|
||||
class circle:
|
||||
vtx: Incomplete
|
||||
sz: Incomplete
|
||||
w: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, radius: int = 10, width: float = 0.45, theta_start: int = 0, theta_stop: int = 360, res: float = 0.05, angle=None, xs: str = 'strip', layer=None, sharp_patch: bool = True, y_cut=None) -> None: ...
|
||||
|
||||
class mx_bend:
|
||||
sz: Incomplete
|
||||
w: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, radius: int = 10, width: float = 0.45, theta_start: int = 0, theta_stop: int = 360, res: float = 0.05, angle=None, xs: str = 'strip', layer=None, sharp_patch: bool = True) -> None: ...
|
||||
|
||||
class Elipse_dual:
|
||||
ORx: Incomplete
|
||||
ORy: Incomplete
|
||||
IRx: Incomplete
|
||||
IRy: Incomplete
|
||||
offset_X: Incomplete
|
||||
offset_Y: Incomplete
|
||||
xs: Incomplete
|
||||
layer: Incomplete
|
||||
res: Incomplete
|
||||
theta_start: Incomplete
|
||||
theta_stop: Incomplete
|
||||
y_cut: Incomplete
|
||||
cell: Incomplete
|
||||
wa: Incomplete
|
||||
wb: Incomplete
|
||||
def __init__(self, ORx: float, ORy: float, IRx: float, IRy: float, offset_X: float = 0, offset_Y: float = 0, xs: str = None, layer: str = None, theta_start: float = 0, theta_stop: float = 360, sharp_patch: bool = True, res: float = 0.001, y_cut=None) -> None: ...
|
||||
sz: Incomplete
|
||||
def generate_gds(self, sharp_patch): ...
|
||||
|
||||
class Elipse:
|
||||
La: Incomplete
|
||||
Lb: Incomplete
|
||||
wa: Incomplete
|
||||
wb: Incomplete
|
||||
offset_a: Incomplete
|
||||
offset_b: Incomplete
|
||||
type: Incomplete
|
||||
layer: Incomplete
|
||||
xs: Incomplete
|
||||
theta_start: Incomplete
|
||||
theta_stop: Incomplete
|
||||
res: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, La=None, Lb=None, wa=None, wb=None, offset_a: int = 0, offset_b: int = 0, type: str = 'center', width_type: str = 'sine', layer=None, xs=None, theta_start: int = 0, theta_stop: int = 360, res: float = 0.001, sharp_patch: bool = False, show_pins: bool = False) -> None: ...
|
||||
sz: Incomplete
|
||||
def generate_gds(self, sharp_patch, show_pins): ...
|
||||
|
||||
class Conchoid:
|
||||
Atilt: Incomplete
|
||||
L: Incomplete
|
||||
cell: Incomplete
|
||||
vtx_center: Incomplete
|
||||
vtx: Incomplete
|
||||
K_end: Incomplete
|
||||
R_end: Incomplete
|
||||
def __init__(self, R0, kR, T, w, layer, w_end=None, res: float = 0.1, final_flat=None, begin_flat=None, xs=None) -> None: ...
|
||||
|
||||
class Clothoid:
|
||||
name: Incomplete
|
||||
R: Incomplete
|
||||
A: Incomplete
|
||||
width_type: Incomplete
|
||||
spiral_order: Incomplete
|
||||
dL_cal: Incomplete
|
||||
xs: Incomplete
|
||||
layer: Incomplete
|
||||
dL_wg: Incomplete
|
||||
x: Incomplete
|
||||
y: Incomplete
|
||||
L: Incomplete
|
||||
L0: Incomplete
|
||||
theta: Incomplete
|
||||
vtx_center: Incomplete
|
||||
end_patch: Incomplete
|
||||
sz: Incomplete
|
||||
n_points: Incomplete
|
||||
w: Incomplete
|
||||
cell: Incomplete
|
||||
def __init__(self, name: str = None, R: list | np.ndarray = [10, 20], w: list | np.ndarray | float = [0.4, 0.5], A: list | np.ndarray = [0, 45], width_type: str = 'sine', spiral_order: float | list = 1, Rmax: float = 10000, dL_cal: float = 0.001, dL_wg: float = 0.1, xs: str = 'strip', layer: str = None, sharp_patch: bool = True, end_patch: bool = True, show_pins: bool = False) -> None: ...
|
||||
instantiate: bool
|
||||
vtx: Incomplete
|
||||
sz_p2p: Incomplete
|
||||
def generate_gds(self, sharp_patch, show_pins): ...
|
||||
|
||||
class Racetrack:
|
||||
dLx: Incomplete
|
||||
R_bend: Incomplete
|
||||
dLy: Incomplete
|
||||
xs: Incomplete
|
||||
layer: Incomplete
|
||||
bend_cell: Incomplete
|
||||
A_bend: Incomplete
|
||||
w: Incomplete
|
||||
w_crack: float
|
||||
cell: Incomplete
|
||||
def __init__(self, bend_cell=None, xs: str = 'strip', layer=None, R_bend: int = 10, w: float = 0.5, dLx: int = 100, dLy: int = 100, res: float = 0.001) -> None: ...
|
||||
sz: Incomplete
|
||||
def generate_gds(self): ...
|
||||
@@ -0,0 +1 @@
|
||||
"""Build and export helpers for mxpic."""
|
||||
@@ -0,0 +1,137 @@
|
||||
import argparse
|
||||
import os
|
||||
from typing import Any, Dict
|
||||
|
||||
import yaml
|
||||
|
||||
|
||||
def build_silterra_eom1_manifest() -> Dict[str, Any]:
|
||||
"""Build the Silterra EOM1 manifest consumed by mxpic_EDA."""
|
||||
layers = {
|
||||
"WG_HM": {"layer": 275, "datatype": 0},
|
||||
"WG_STRIP": {"layer": 101, "datatype": 251},
|
||||
"WG_LOWRIB": {"layer": 100, "datatype": 90},
|
||||
"WG_SRIB": {"layer": 100, "datatype": 90},
|
||||
"WG_HIGHRIB": {"layer": 232, "datatype": 0},
|
||||
"HEATER": {"layer": 29, "datatype": 30},
|
||||
"CT_SI": {"layer": 268, "datatype": 0},
|
||||
"CT_GE": {"layer": 35, "datatype": 0},
|
||||
"UTV": {"layer": 172, "datatype": 0},
|
||||
"RDL_VIA": {"layer": 194, "datatype": 0},
|
||||
"UTM": {"layer": 173, "datatype": 0},
|
||||
"UTM2": {"layer": 197, "datatype": 0},
|
||||
"RDL_MET": {"layer": 195, "datatype": 0},
|
||||
"PAD_ELE": {"layer": 100, "datatype": 170},
|
||||
"PAD_OPTICAL": {"layer": 100, "datatype": 160},
|
||||
"PAD_AL": {"layer": 145, "datatype": 0},
|
||||
"WG_N": {"layer": 263, "datatype": 0},
|
||||
"SiN_Rib_WG": {"layer": 63, "datatype": 30},
|
||||
"SSIN0": {"layer": 283, "datatype": 0},
|
||||
"SSIN1": {"layer": 289, "datatype": 0},
|
||||
"SSIN2": {"layer": 290, "datatype": 0},
|
||||
"SSIN3": {"layer": 291, "datatype": 0},
|
||||
"EXCLUSION": {"layer": 57, "datatype": 0},
|
||||
"SALICIDE": {"layer": 128, "datatype": 60},
|
||||
"DM_EXL": {"layer": 23, "datatype": 0},
|
||||
"DM_EXL_FE": {"layer": 23, "datatype": 40},
|
||||
"DM_EXL_BE": {"layer": 23, "datatype": 41},
|
||||
"OXIDE_FACET": {"layer": 90, "datatype": 0},
|
||||
"DT": {"layer": 404, "datatype": 0},
|
||||
"P": {"layer": 256, "datatype": 0},
|
||||
"N": {"layer": 257, "datatype": 0},
|
||||
"PP": {"layer": 258, "datatype": 0},
|
||||
"NP": {"layer": 259, "datatype": 0},
|
||||
"PPP": {"layer": 260, "datatype": 0},
|
||||
"NPP": {"layer": 261, "datatype": 0},
|
||||
"PD_SIPP": {"layer": 100, "datatype": 140},
|
||||
"PD_SINP": {"layer": 100, "datatype": 150},
|
||||
}
|
||||
|
||||
return {
|
||||
"schema_version": "1.0.0",
|
||||
"foundry": "Silterra",
|
||||
"technology": "EMO1_2ML_CU_Al_RDL",
|
||||
"source_class": "mxpic.foundries.Silterra.EOM1_2ML_CU_RDL",
|
||||
"constants": {
|
||||
"STD_SMWG_WIDTH": 0.45,
|
||||
"SLAB_GROWTH": 2,
|
||||
"W_METAL_MIN": 5,
|
||||
"SPACING_HEATER_MIN": 2,
|
||||
"SPACING_METAL_MIN": 4,
|
||||
"W_HEATER_MIN": 3,
|
||||
},
|
||||
"layers": layers,
|
||||
"routing_types": ["euler_bend", "standard_bend"],
|
||||
"defaults": {
|
||||
"xsection": "strip",
|
||||
"family": "optical",
|
||||
"width": 0.45,
|
||||
"radius": 10,
|
||||
"routing_type": "euler_bend",
|
||||
},
|
||||
"xsections": {
|
||||
"strip": {
|
||||
"family": "optical",
|
||||
"default_width": 0.45,
|
||||
"default_radius": 10,
|
||||
"layers": [
|
||||
{"layer": "WG_HM", "growx": 0, "growy": 0},
|
||||
{"layer": "WG_STRIP", "growx": 4, "growy": 4},
|
||||
],
|
||||
},
|
||||
"rib_low": {
|
||||
"family": "optical",
|
||||
"default_width": 0.45,
|
||||
"default_radius": 10,
|
||||
"layers": [
|
||||
{"layer": "WG_HM", "growx": 0, "growy": 0},
|
||||
{"layer": "WG_SRIB", "growx": 3, "growy": 3},
|
||||
{"layer": "WG_STRIP", "leftedge": [-0.5, -3], "rightedge": [-0.5, -3.5]},
|
||||
{"layer": "WG_STRIP", "leftedge": [0.5, 3.5], "rightedge": [0.5, 3]},
|
||||
],
|
||||
},
|
||||
"metal_1": {
|
||||
"family": "electrical",
|
||||
"default_width": 5,
|
||||
"default_radius": 10,
|
||||
"layers": [
|
||||
{"layer": "UTM", "growx": 0, "growy": 0},
|
||||
{"layer": "SSIN0", "growx": 2.5, "growy": 2.5},
|
||||
],
|
||||
},
|
||||
"metal_2": {
|
||||
"family": "electrical",
|
||||
"default_width": 5,
|
||||
"default_radius": 10,
|
||||
"layers": [
|
||||
{"layer": "UTM2", "growx": 0, "growy": 0},
|
||||
{"layer": "SSIN1", "growx": 2.5, "growy": 2.5},
|
||||
],
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def export_manifests(destination_root: str) -> None:
|
||||
"""Export supported technology manifests into an EDA PDK root."""
|
||||
manifest = build_silterra_eom1_manifest()
|
||||
technology_dir = os.path.join(destination_root, manifest["foundry"], manifest["technology"])
|
||||
os.makedirs(technology_dir, exist_ok=True)
|
||||
output_path = os.path.join(technology_dir, "technology.yml")
|
||||
with open(output_path, "w", encoding="utf-8") as file:
|
||||
yaml.safe_dump(manifest, file, sort_keys=False, allow_unicode=True)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description="Export mxpic technology manifests for mxpic_EDA.")
|
||||
parser.add_argument(
|
||||
"--dest",
|
||||
default=os.path.abspath(os.path.join(os.getcwd(), "..", "mxpic_EDAX", "mxpic", "PDKs")),
|
||||
help="Destination mxpic_EDA PDK root.",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
export_manifests(os.path.abspath(args.dest))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,39 @@
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
import yaml
|
||||
|
||||
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
||||
sys.path.insert(0, ROOT)
|
||||
|
||||
from scripts.export_technology_manifests import build_silterra_eom1_manifest, export_manifests
|
||||
|
||||
|
||||
class TechnologyManifestExportTest(unittest.TestCase):
|
||||
def test_silterra_manifest_contains_route_xsections(self):
|
||||
manifest = build_silterra_eom1_manifest()
|
||||
self.assertEqual(manifest["foundry"], "Silterra")
|
||||
self.assertEqual(manifest["technology"], "EMO1_2ML_CU_Al_RDL")
|
||||
self.assertEqual(manifest["defaults"]["xsection"], "strip")
|
||||
self.assertEqual(manifest["defaults"]["routing_type"], "euler_bend")
|
||||
self.assertIn("standard_bend", manifest["routing_types"])
|
||||
self.assertEqual(manifest["xsections"]["strip"]["family"], "optical")
|
||||
self.assertEqual(manifest["xsections"]["rib_low"]["family"], "optical")
|
||||
self.assertEqual(manifest["xsections"]["metal_1"]["family"], "electrical")
|
||||
self.assertEqual(manifest["xsections"]["metal_2"]["family"], "electrical")
|
||||
self.assertIn("WG_STRIP", manifest["layers"])
|
||||
|
||||
def test_export_writes_eda_technology_yml(self):
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
export_manifests(temp_dir)
|
||||
output = os.path.join(temp_dir, "Silterra", "EMO1_2ML_CU_Al_RDL", "technology.yml")
|
||||
self.assertTrue(os.path.exists(output))
|
||||
with open(output, "r", encoding="utf-8") as file:
|
||||
data = yaml.safe_load(file)
|
||||
self.assertEqual(data["xsections"]["metal_1"]["family"], "electrical")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user