from typing import Any import nazca as nd from .Foundry import Foundry from .layer_models import LayerSpec class CT_CU3ML(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 LAYERS = { 'RIB' : LayerSpec('RIB', (275,0), aliases=('STRIP_COR',)), 'GRAT' : LayerSpec('GRAT', (407,0), aliases=('SRIB_COR',)), 'SLAB' : LayerSpec('SLAB', (406,0), aliases=('RIB_COR',)), 'NitrideWG' : LayerSpec('NitrideWG', (263,0), aliases=('SINWG',)), 'NitrideWG_RIB' : LayerSpec('NitrideWG_RIB', (415,0), aliases=('RIB_SIN',), description='Legacy map used NitrideWG for this layer.'), 'TIN' : LayerSpec('TIN', (398,0), aliases=('HEATER',)), 'ContSi' : LayerSpec('ContSi', (268,0), aliases=('VIA_S2M',)), 'ContGe' : LayerSpec('ContGe', (35,0), aliases=('VIA_G2M',)), # 'VIA1' : LayerSpec('VIA1', (85,0), aliases=('VIA_H2M',)), 'VIA1' : LayerSpec('VIA1', (85,0), aliases=('VIA_M2M',)), 'VIA2' : LayerSpec('VIA2', (86,0), aliases=('VIA_M2M_2',)), 'VIA3' : LayerSpec('VIA3', (419,0), aliases=('VIA_M2M_3',)), 'M1' : LayerSpec('M1', (6,0), aliases=('METAL',)), 'M2' : LayerSpec('M2', (86,0), aliases=('METAL_2',)), 'M3' : LayerSpec('M3', (27,0), aliases=('METAL_3','PAD')), 'BEOL_N0_RMV' : LayerSpec('BEOL_N0_RMV', (283,0), aliases=('N0RMV',)), 'BEOL_N1_RMV' : LayerSpec('BEOL_N1_RMV', (289,0), aliases=('N1RMV',)), 'BEOL_N2_RMV' : LayerSpec('BEOL_N2_RMV', (290,0), aliases=('N2RMV',)), 'BEOL_N3_RMV' : LayerSpec('BEOL_N3_RMV', (291,0), aliases=('N3RMV',)), 'SIN_RMV' : LayerSpec('SIN_RMV', (483,0), aliases=('PAD_OPEN',)), 'DT' : LayerSpec('DT', (404,0), aliases=('ISL',)), ### Active part 'P' : (256,0), 'N' : (257,0), 'P+' : (258,0), 'N+' : (259,0), 'P++' : (260,0), 'N++' : (261,0), 'GePD' : LayerSpec('GePD', (262,0), aliases=('GE',)), 'GeN+' : LayerSpec('GeN+', (265,0), aliases=('GN+',)), 'GeP+' : LayerSpec('GeP+', (266,0), aliases=('GP+',)), 'GeWindow' : LayerSpec('GeWindow', (264,0), aliases=('GW',)), } ROLES = {} def __init__(self, layermap: Any=None, roles: Any=None) -> None: super().__init__(layermap=layermap or self.LAYERS, roles=roles or self.ROLES) self._add_xsection_(xsection='strip',layers=['STRIP_COR'],growth=[0]) self._add_xsection_(xsection='rib',layers=['STRIP_COR','RIB_COR'],growth=[0,4]) ## 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_3','PAD_OPEN'],growth=[0,-2.5]) ## DRC 4.2 - [AMF-QP-RND-006]