88 lines
3.3 KiB
Python
88 lines
3.3 KiB
Python
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])
|
|
|