152 lines
5.8 KiB
Python
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])
|
|
|
|
|