from typing import Any import nazca as nd import numpy as np from .Foundry import Foundry from .layer_models import LayerSpec class IMEC_Si220_Active(Foundry) : lib_path = 'GDS_lib\\' W_ISL = 5 SP_ISL = 5 SZ_CT = 0.25 SP_CT = 0.35 SP_METAL = 1.5 LAYERS = { 'WG_COR' : LayerSpec('WG_COR', (37,4), aliases=('STRIP_COR',)), 'WG_CLD' : LayerSpec('WG_CLD', (37,5), aliases=('STRIP_CLD',)), 'WG_TRE' : LayerSpec('WG_TRE', (37,6), aliases=('STRIP_TRE',)), # 'WG_HOL' : LayerSpec('WG_HOL', (37,2), aliases=('STRIP_HOL',)), 'WG_PRI' : LayerSpec('WG_PRI', (38,0), aliases=('STRIP_PRI',)), 'FC_COR' : LayerSpec('FC_COR', (35,4), aliases=('SRIB_COR',)), 'FC_CLD' : LayerSpec('FC_CLD', (35,5), aliases=('SRIB_CLD',)), 'FC_TRE' : LayerSpec('FC_TRE', (35,6), aliases=('SRIB_TRE',)), # 'FC_HOL' : LayerSpec('FC_HOL', (35,2), aliases=('SRIB_HOL',)), 'FC_PRI' : LayerSpec('FC_PRI', (36,0), aliases=('SRIB_PRI',)), 'SKT_COR' : LayerSpec('SKT_COR', (43,4), aliases=('RIB_COR',)), 'SKT_CLD' : LayerSpec('SKT_CLD', (43,5), aliases=('RIB_CLD',)), 'SKT_TRE' : LayerSpec('SKT_TRE', (43,6), aliases=('RIB_TRE',)), # 'SKT_HOL' : LayerSpec('SKT_HOL', (43,2), aliases=('RIB_HOL',)), 'SKT_PRI' : LayerSpec('SKT_PRI', (44,0), aliases=('RIB_PRI',)), 'FCW_COR' : (31,24), 'FCW_CLD' : (31,25), 'FCW_TRE' : (31,26), 'FCW_PRI' : (32,0), 'METPASS' : LayerSpec('METPASS', (18,0), aliases=('PAD',)), 'MHD' : LayerSpec('MHD', (14,0), aliases=('HEATER',)), 'PCON' : LayerSpec('PCON', (10,0), aliases=('VIA_S2M',)), ## silicide to metal 'PVH' : LayerSpec('PVH', (53,0), aliases=('VIA_H2M',)), ## heaters to metal 'M1_DRW' : LayerSpec('M1_DRW', (11,0), aliases=('METAL',)), 'M1_NOFILL' : (11,9), 'M2_DRW' : LayerSpec('M2_DRW', (13,0), aliases=('METAL_2',)), 'M2_NOFILL' : (13,9), 'VIA12' : LayerSpec('VIA12', (12,0), aliases=('VIA_M2M',)), 'LPASS' : LayerSpec('LPASS', (91,0), aliases=('GC_OPEN',)), 'PASS1' : LayerSpec('PASS1', (16,0), aliases=('SiN_OPEN',)), 'PASS2' : LayerSpec('PASS2', (17,0), aliases=('PAD_OPEN',)), 'EXPOWG' : (84,0), 'N1': (2,0), 'P1': (3,0), 'N2': (6,0), 'P2': (7,0), 'NBODY': (25,0), 'PBODY': (26,0), 'NP': (4,0), 'PP': (5,0), } 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','STRIP_CLD'],growth=[0,self.SLAB_GROWTH]) self._add_xsection_(xsection='rib_s',layers=['RIB_COR','RIB_CLD'],growth=[0,self.SLAB_GROWTH]) self._add_xsection_(xsection='rib',layers=['RIB_COR','RIB_CLD','STRIP_COR','STRIP_CLD'],growth=[0,4.1,4,6.5]) 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','SiN_OPEN','PAD','PAD_OPEN'],growth=[0,-3,0,-3]) self._add_xsection_(xsection='expowg',layers=['EXPOWG','FCW_COR','FCW_CLD'],growth=[0,1,3])