Files
mxpic_forge/mxpic/technologies/IMEC.py
T
2026-06-04 23:21:39 +08:00

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])