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

152 lines
5.8 KiB
Python

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