from typing import Any import nazca as nd import numpy as np from .Foundry import Foundry from .layer_models import LayerSpec class CUMEC_CSiP130Cu(Foundry) : lib_path = 'GDS_lib\\' W_ISL = 5 SP_ISL = 5 SZ_CT = 0.25 SP_CT = 0.35 SP_METAL = 1.5 LAYERS = { 'FETCH_COR' : LayerSpec('FETCH_COR', (31,1), aliases=('STRIP_COR',)), 'FETCH_CLD' : LayerSpec('FETCH_CLD', (31,2), aliases=('STRIP_CLD',)), 'FETCH_TRE' : LayerSpec('FETCH_TRE', (31,3), aliases=('STRIP_TRE',)), 'FETCH_HOL' : LayerSpec('FETCH_HOL', (31,4), aliases=('STRIP_HOL',)), 'SETCH_COR' : LayerSpec('SETCH_COR', (32,1), aliases=('SRIB_COR',)), 'SETCH_CLD' : LayerSpec('SETCH_CLD', (32,2), aliases=('SRIB_CLD',)), 'SETCH_TRE' : LayerSpec('SETCH_TRE', (32,3), aliases=('SRIB_TRE',)), 'SETCH_HOL' : LayerSpec('SETCH_HOL', (32,4), aliases=('SRIB_HOL',)), 'METCH_COR' : LayerSpec('METCH_COR', (33,1), aliases=('RIB_COR',)), 'METCH_CLD' : LayerSpec('METCH_CLD', (33,2), aliases=('RIB_CLD',)), 'METCH_TRE' : LayerSpec('METCH_TRE', (33,3), aliases=('RIB_TRE',)), 'METCH_HOL' : LayerSpec('METCH_HOL', (33,4), aliases=('RIB_HOL',)), 'HEATER' : (19,0), 'CT' : LayerSpec('CT', (50,0), aliases=('VIA_H2M','VIA_S2M')), 'V1' : LayerSpec('V1', (51,0), aliases=('VIA_M2M',)), 'METAL' : (11,1), 'METAL_SLTBK' : (11,21), 'METAL_2' : (12,1), 'METAL_2_SLTBK' : (12,21), 'BOND_PAD' : LayerSpec('BOND_PAD', (20,0), aliases=('PAD',)), 'PASS1' : (60,0), 'PASS2' : (63,0), 'OPEN' : LayerSpec('OPEN', (61,0), aliases=('GC_OPEN',)), 'ISL' : (67,0), 'NW' : (21,0), 'PW' : (22,0), 'NLD' : (23,0), 'PLD' : (24,0), 'NLD2' : (25,0), 'PLD2' : (26,0), 'NP' : (27,0), 'PP' : (28,0), 'EPI' : LayerSpec('EPI', (40,0), aliases=('GE',)), 'SA' : (36,0), 'ABOX' : (97,1), 'PBOX' : (97,2), 'NOFILL' : (92,0), 'LOGO' : (90,0), 'PINREC' : (95,0), 'DEVREC' : (1001,0), } ROLES = {} def __init__(self, layermap: Any=None, roles: Any=None) -> None: super().__init__(layermap=layermap or self.LAYERS, roles=roles or self.ROLES) """ Default xsection """ self._add_xsection_(xsection='strip',layers=['STRIP_COR','STRIP_CLD'],growth=[0,self.SLAB_GROWTH]) self._add_xsection_(xsection='rib_s',layers=['STRIP_COR','STRIP_CLD'],growth=[0,self.SLAB_GROWTH]) self._add_xsection_(xsection='rib',layers=['RIB_COR','RIB_CLD','STRIP_COR','STRIP_CLD'],growth=[0,self.SLAB_GROWTH*2,self.SLAB_GROWTH,self.SLAB_GROWTH*2]) self._add_xsection_(xsection='rib_slab',layers=['RIB_COR','RIB_CLD',],growth=[0,self.SLAB_GROWTH*2]) self._add_xsection_(xsection='drib',layers=['RIB_COR','RIB_CLD','STRIP_COR','STRIP_CLD'],growth=[0,self.SLAB_GROWTH*2,self.SLAB_GROWTH,self.SLAB_GROWTH*2]) self._add_xsection_(xsection='pad',layers=['METAL_2','PAD','PASS1', 'PASS2'],growth=[0,0,-2.5,-2.5]) self._add_xsection_(xsection='isl',layers=['ISL','STRIP_CLD','GC_OPEN'],growth=[0,1,3]) self._add_xsection_(xsection='metal',layers=['METAL','METAL_SLTBK'],growth=[0,0]) self._add_xsection_(xsection='metal_2',layers=['METAL_2','METAL_2_SLTBK'],growth=[0,0]) class CUMEC_CSiP180Al_PASSIVE(Foundry) : lib_path = 'GDS_lib\\' W_ISL = 5 SP_ISL = 5 SZ_CT = 0.25 SP_CT = 0.35 SP_METAL = 1.5 LAYERS = { 'FETCH_COR' : LayerSpec('FETCH_COR', (31,1), aliases=('STRIP_COR',)), 'FETCH_CLD' : LayerSpec('FETCH_CLD', (31,2), aliases=('STRIP_CLD',)), 'FETCH_TRE' : LayerSpec('FETCH_TRE', (31,3), aliases=('STRIP_TRE',)), 'FETCH_HOL' : LayerSpec('FETCH_HOL', (31,4), aliases=('STRIP_HOL',)), 'SETCH_COR' : LayerSpec('SETCH_COR', (32,1), aliases=('SRIB_COR',)), 'SETCH_CLD' : LayerSpec('SETCH_CLD', (32,2), aliases=('SRIB_CLD',)), 'SETCH_TRE' : LayerSpec('SETCH_TRE', (32,3), aliases=('SRIB_TRE',)), 'SETCH_HOL' : LayerSpec('SETCH_HOL', (32,4), aliases=('SRIB_HOL',)), 'METCH_COR' : LayerSpec('METCH_COR', (33,1), aliases=('RIB_COR',)), 'METCH_CLD' : LayerSpec('METCH_CLD', (33,2), aliases=('RIB_CLD',)), 'METCH_TRE' : LayerSpec('METCH_TRE', (33,3), aliases=('RIB_TRE',)), 'METCH_HOL' : LayerSpec('METCH_HOL', (33,4), aliases=('RIB_HOL',)), 'HEATER' : (19,0), # 'CT' : LayerSpec('CT', (50,0), aliases=('VIA_H2M',)), 'METAL' : (11,1), 'PASS1' : (60,0), # 'OPEN' : LayerSpec('OPEN', (61,0), aliases=('GC_OPEN',)), 'ISL' : (67,0), } ROLES = {} def __init__(self, layermap: Any=None, roles: Any=None) -> None: super().__init__(layermap=layermap or self.LAYERS, roles=roles or self.ROLES) """ Default xsection """ self._add_xsection_(xsection='strip',layers=['STRIP_COR','STRIP_CLD'],growth=[0,self.SLAB_GROWTH]) self._add_xsection_(xsection='rib_s',layers=['SRIB_COR','SRIB_CLD'],growth=[0,self.SLAB_GROWTH]) self._add_xsection_(xsection='rib',layers=['RIB_COR','RIB_CLD','STRIP_COR','STRIP_CLD'],growth=[0,self.SLAB_GROWTH*2,self.SLAB_GROWTH,self.SLAB_GROWTH*2]) self._add_xsection_(xsection='rib_s_wg',layers=['SRIB_COR','SRIB_CLD','STRIP_COR','STRIP_CLD'],growth=[0,5,2.5,5]) self._add_xsection_(xsection='rib_slab',layers=['RIB_COR','RIB_CLD',],growth=[0,self.SLAB_GROWTH*2]) self._add_xsection_(xsection='drib',layers=['RIB_COR','RIB_CLD','STRIP_COR','STRIP_CLD'],growth=[0,self.SLAB_GROWTH*2,self.SLAB_GROWTH,self.SLAB_GROWTH*2]) self._add_xsection_(xsection='pad',layers=['METAL','PASS1'],growth=[0,-2.5]) self._add_xsection_(xsection='isl',layers=['ISL','STRIP_CLD'],growth=[0,1])