78 lines
3.0 KiB
Python
78 lines
3.0 KiB
Python
from typing import Any
|
|
import nazca as nd
|
|
from .Foundry import Foundry
|
|
from .layer_models import LayerSpec
|
|
|
|
class CT_CU3ML(Foundry) :
|
|
|
|
## Generall parameters
|
|
STD_SMWG_WIDTH = 0.45
|
|
SLAB_GROWTH = 2
|
|
W_METAL_MIN = 5
|
|
SPACING_HEATER_MIN = 2
|
|
SPACING_METAL_MIN = 4
|
|
W_HEATER_MIN = 3
|
|
|
|
lib_path = 'GDS_lib\\'
|
|
|
|
# show_pins = False
|
|
|
|
LAYERS = {
|
|
|
|
'RIB' : LayerSpec('RIB', (275,0), aliases=('STRIP_COR',)),
|
|
|
|
'GRAT' : LayerSpec('GRAT', (407,0), aliases=('SRIB_COR',)),
|
|
|
|
'SLAB' : LayerSpec('SLAB', (406,0), aliases=('RIB_COR',)),
|
|
|
|
'NitrideWG' : LayerSpec('NitrideWG', (263,0), aliases=('SINWG',)),
|
|
'NitrideWG_RIB' : LayerSpec('NitrideWG_RIB', (415,0), aliases=('RIB_SIN',), description='Legacy map used NitrideWG for this layer.'),
|
|
|
|
'TIN' : LayerSpec('TIN', (398,0), aliases=('HEATER',)),
|
|
|
|
'ContSi' : LayerSpec('ContSi', (268,0), aliases=('VIA_S2M',)),
|
|
'ContGe' : LayerSpec('ContGe', (35,0), aliases=('VIA_G2M',)),
|
|
# 'VIA1' : LayerSpec('VIA1', (85,0), aliases=('VIA_H2M',)),
|
|
'VIA1' : LayerSpec('VIA1', (85,0), aliases=('VIA_M2M',)),
|
|
'VIA2' : LayerSpec('VIA2', (86,0), aliases=('VIA_M2M_2',)),
|
|
'VIA3' : LayerSpec('VIA3', (419,0), aliases=('VIA_M2M_3',)),
|
|
|
|
'M1' : LayerSpec('M1', (6,0), aliases=('METAL',)),
|
|
'M2' : LayerSpec('M2', (86,0), aliases=('METAL_2',)),
|
|
'M3' : LayerSpec('M3', (27,0), aliases=('METAL_3','PAD')),
|
|
|
|
'BEOL_N0_RMV' : LayerSpec('BEOL_N0_RMV', (283,0), aliases=('N0RMV',)),
|
|
'BEOL_N1_RMV' : LayerSpec('BEOL_N1_RMV', (289,0), aliases=('N1RMV',)),
|
|
'BEOL_N2_RMV' : LayerSpec('BEOL_N2_RMV', (290,0), aliases=('N2RMV',)),
|
|
'BEOL_N3_RMV' : LayerSpec('BEOL_N3_RMV', (291,0), aliases=('N3RMV',)),
|
|
|
|
'SIN_RMV' : LayerSpec('SIN_RMV', (483,0), aliases=('PAD_OPEN',)),
|
|
|
|
'DT' : LayerSpec('DT', (404,0), aliases=('ISL',)),
|
|
|
|
### Active part
|
|
'P' : (256,0),
|
|
'N' : (257,0),
|
|
'P+' : (258,0),
|
|
'N+' : (259,0),
|
|
'P++' : (260,0),
|
|
'N++' : (261,0),
|
|
|
|
'GePD' : LayerSpec('GePD', (262,0), aliases=('GE',)),
|
|
'GeN+' : LayerSpec('GeN+', (265,0), aliases=('GN+',)),
|
|
'GeP+' : LayerSpec('GeP+', (266,0), aliases=('GP+',)),
|
|
'GeWindow' : LayerSpec('GeWindow', (264,0), aliases=('GW',)),
|
|
}
|
|
|
|
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'],growth=[0])
|
|
self._add_xsection_(xsection='rib',layers=['STRIP_COR','RIB_COR'],growth=[0,4]) ## Slab waveguide
|
|
self._add_xsection_(xsection='rib_s',layers=['STRIP_COR','SRIB_COR'],growth=[0,4]) ## Slab waveguide
|
|
self._add_xsection_(xsection='isl',layers=['ISL'],growth=[0])
|
|
# self._add_xsection_(xsection='sn',layers=['SINWG1','SINWIN1'],growth=[0,21])
|
|
|
|
self._add_xsection_(xsection='pad',layers=['METAL_3','PAD_OPEN'],growth=[0,-2.5]) ## DRC 4.2 - [AMF-QP-RND-006]
|