lambdapdk 0.1.55__py3-none-any.whl → 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lambdapdk/__init__.py +444 -113
- lambdapdk/asap7/__init__.py +73 -99
- lambdapdk/asap7/libs/asap7sc7p5t.py +124 -159
- lambdapdk/asap7/libs/fakeio7.py +260 -22
- lambdapdk/asap7/libs/fakekit7.py +14 -19
- lambdapdk/asap7/libs/fakeram7.py +233 -33
- lambdapdk/freepdk45/__init__.py +59 -89
- lambdapdk/freepdk45/libs/fakeram45.py +75 -27
- lambdapdk/freepdk45/libs/nangate45.py +90 -125
- lambdapdk/gf180/__init__.py +216 -131
- lambdapdk/gf180/libs/gf180io.py +744 -68
- lambdapdk/gf180/libs/gf180mcu.py +188 -138
- lambdapdk/gf180/libs/gf180sram.py +123 -63
- lambdapdk/ihp130/__init__.py +85 -120
- lambdapdk/ihp130/libs/sg13g2_io.py +450 -41
- lambdapdk/ihp130/libs/sg13g2_sram.py +97 -52
- lambdapdk/ihp130/libs/sg13g2_stdcell.py +117 -135
- lambdapdk/interposer/__init__.py +110 -74
- lambdapdk/interposer/libs/bumps.py +41 -26
- lambdapdk/sky130/__init__.py +70 -92
- lambdapdk/sky130/libs/sky130io.py +248 -37
- lambdapdk/sky130/libs/sky130sc.py +174 -206
- lambdapdk/sky130/libs/sky130sram.py +47 -34
- {lambdapdk-0.1.55.dist-info → lambdapdk-0.2.0.dist-info}/METADATA +6 -6
- lambdapdk-0.2.0.dist-info/RECORD +30 -0
- lambdapdk-0.2.0.dist-info/entry_points.txt +2 -0
- lambdapdk-0.1.55.dist-info/RECORD +0 -30
- lambdapdk-0.1.55.dist-info/entry_points.txt +0 -4
- {lambdapdk-0.1.55.dist-info → lambdapdk-0.2.0.dist-info}/WHEEL +0 -0
- {lambdapdk-0.1.55.dist-info → lambdapdk-0.2.0.dist-info}/licenses/LICENSE +0 -0
- {lambdapdk-0.1.55.dist-info → lambdapdk-0.2.0.dist-info}/top_level.txt +0 -0
lambdapdk/ihp130/__init__.py
CHANGED
|
@@ -1,23 +1,18 @@
|
|
|
1
|
+
from pathlib import Path
|
|
1
2
|
|
|
2
|
-
import
|
|
3
|
-
import siliconcompiler
|
|
4
|
-
from lambdapdk import register_data_source
|
|
3
|
+
from lambdapdk import LambdaPDK, _LambdaPath
|
|
5
4
|
|
|
6
5
|
|
|
7
|
-
pdk_rev = '
|
|
6
|
+
pdk_rev = '0854e9bcd558b68c573149038b4c95706314e2f1'
|
|
8
7
|
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
ref=pdk_rev)
|
|
9
|
+
class _IHP130Path(_LambdaPath):
|
|
10
|
+
def __init__(self):
|
|
11
|
+
super().__init__()
|
|
12
|
+
self.set_dataroot("ihp130", "git+https://github.com/IHP-GmbH/IHP-Open-PDK", pdk_rev)
|
|
15
13
|
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
# PDK Setup
|
|
19
|
-
####################################################
|
|
20
|
-
def setup():
|
|
15
|
+
class IHP130PDK(LambdaPDK, _IHP130Path):
|
|
21
16
|
'''
|
|
22
17
|
130nm BiCMOS Open Source PDK, dedicated for Analog/Digital, Mixed Signal and RF Design
|
|
23
18
|
|
|
@@ -38,110 +33,80 @@ def setup():
|
|
|
38
33
|
|
|
39
34
|
* https://github.com/IHP-GmbH/IHP-Open-PDK
|
|
40
35
|
'''
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
'
|
|
89
|
-
|
|
90
|
-
'
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
pdk.set('pdk', process, 'pexmodel', 'openroad-openrcx', stackup, corner,
|
|
119
|
-
lpdkdir + '/pex/openroad/' + corner + '.rules', package='lambdapdk')
|
|
120
|
-
|
|
121
|
-
# DRC
|
|
122
|
-
drcs = {
|
|
123
|
-
"maximal": 'ihp-sg13g2/libs.tech/klayout/tech/drc/sg13g2_maximal.lydrc',
|
|
124
|
-
"minimal": 'ihp-sg13g2/libs.tech/klayout/tech/drc/sg13g2_minimal.lydrc'
|
|
125
|
-
}
|
|
126
|
-
for drc, runset in drcs.items():
|
|
127
|
-
pdk.set('pdk', process, 'drc', 'runset', 'klayout', stackup, drc, runset)
|
|
128
|
-
|
|
129
|
-
key = f'drc_params:{drc}'
|
|
130
|
-
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'in_gds=<input>')
|
|
131
|
-
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'cell=<topcell>')
|
|
132
|
-
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'report_file=<report>')
|
|
133
|
-
|
|
134
|
-
# Documentation
|
|
135
|
-
pdk.set('pdk', process, 'doc', 'overview',
|
|
136
|
-
'ihp-sg13g2/libs.doc/doc/SG13G2_os_process_spec.pdf')
|
|
137
|
-
pdk.set('pdk', process, 'doc', 'drc_rules',
|
|
138
|
-
'ihp-sg13g2/libs.doc/doc/SG13G2_os_layout_rules.pdf')
|
|
139
|
-
|
|
140
|
-
return pdk
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
#########################
|
|
144
|
-
if __name__ == "__main__":
|
|
145
|
-
pdk = setup()
|
|
146
|
-
pdk.write_manifest(f'{pdk.top()}.json')
|
|
147
|
-
pdk.check_filepaths()
|
|
36
|
+
def __init__(self):
|
|
37
|
+
super().__init__()
|
|
38
|
+
self.set_name("ihp130")
|
|
39
|
+
|
|
40
|
+
self.set_foundry("Leibniz-Institut für innovative Mikroelektronik")
|
|
41
|
+
self.package.set_version(pdk_rev)
|
|
42
|
+
self.set_node(130)
|
|
43
|
+
self.set_stackup("5M2TL")
|
|
44
|
+
|
|
45
|
+
pdk_path = Path("lambdapdk", "ihp130", "base")
|
|
46
|
+
|
|
47
|
+
# Docs
|
|
48
|
+
with self.active_dataroot("ihp130"):
|
|
49
|
+
self.package.add_doc("quickstart", "ihp-sg13g2/libs.doc/doc/SG13G2_os_process_spec.pdf")
|
|
50
|
+
self.package.add_doc("signoff", "ihp-sg13g2/libs.doc/doc/SG13G2_os_layout_rules.pdf")
|
|
51
|
+
|
|
52
|
+
with self.active_dataroot("ihp130"):
|
|
53
|
+
# APR Setup
|
|
54
|
+
with self.active_fileset("views.lef"):
|
|
55
|
+
self.add_file("ihp-sg13g2/libs.ref/sg13g2_stdcell/lef/sg13g2_tech.lef")
|
|
56
|
+
for tool in ('openroad', 'klayout', 'magic'):
|
|
57
|
+
self.add_aprtechfileset(tool)
|
|
58
|
+
|
|
59
|
+
with self.active_fileset("layermap"):
|
|
60
|
+
self.add_file("ihp-sg13g2/libs.tech/klayout/tech/sg13g2.map", filetype="layermap")
|
|
61
|
+
|
|
62
|
+
self.set_aprroutinglayers(min="Metal2", max="Metal5")
|
|
63
|
+
|
|
64
|
+
# Klayout setup
|
|
65
|
+
with self.active_dataroot("ihp130"):
|
|
66
|
+
with self.active_fileset("klayout.techmap"):
|
|
67
|
+
self.add_file("ihp-sg13g2/libs.tech/klayout/tech/sg13g2.lyt", filetype="layermap")
|
|
68
|
+
self.add_file("ihp-sg13g2/libs.tech/klayout/tech/sg13g2.lyp", filetype="display")
|
|
69
|
+
self.add_layermapfileset("klayout", "def", "klayout")
|
|
70
|
+
self.add_displayfileset("klayout")
|
|
71
|
+
self.add_layermapfileset("klayout", "def", "gds", fileset="layermap")
|
|
72
|
+
|
|
73
|
+
# OpenROAD setup
|
|
74
|
+
self.set_openroad_rclayers(signal="Metal2", clock="Metal5")
|
|
75
|
+
self.add_openroad_pinlayers(vertical="Metal2", horizontal="Metal3")
|
|
76
|
+
|
|
77
|
+
# Openroad global routing grid derating
|
|
78
|
+
openroad_layer_adjustments = {
|
|
79
|
+
'Metal1': 0.25,
|
|
80
|
+
'Metal2': 0.25,
|
|
81
|
+
'Metal3': 0.25,
|
|
82
|
+
'Metal4': 0.25,
|
|
83
|
+
'Metal5': 0.25,
|
|
84
|
+
'TopMetal1': 0.00,
|
|
85
|
+
'TopMetal2': 0.00
|
|
86
|
+
}
|
|
87
|
+
for layer, adj in openroad_layer_adjustments.items():
|
|
88
|
+
self.set_openroad_globalroutingderating(layer, adj)
|
|
89
|
+
|
|
90
|
+
# PEX
|
|
91
|
+
with self.active_dataroot("lambdapdk"):
|
|
92
|
+
with self.active_fileset("openroad.pex"):
|
|
93
|
+
self.add_file(pdk_path / "pex" / "openroad" / "typical.tcl", filetype="tcl")
|
|
94
|
+
self.add_file(pdk_path / "pex" / "openroad" / "typical.rules", filetype="openrcx")
|
|
95
|
+
|
|
96
|
+
self.add_pexmodelfileset("openroad", "typical")
|
|
97
|
+
self.add_pexmodelfileset("openroad-openrcx", "typical")
|
|
98
|
+
|
|
99
|
+
# DRC
|
|
100
|
+
drcs = {
|
|
101
|
+
"maximal": 'ihp-sg13g2/libs.tech/klayout/tech/drc/sg13g2_maximal.lydrc',
|
|
102
|
+
"minimal": 'ihp-sg13g2/libs.tech/klayout/tech/drc/sg13g2_minimal.lydrc'
|
|
103
|
+
}
|
|
104
|
+
with self.active_dataroot("ihp130"):
|
|
105
|
+
for drc, runset in drcs.items():
|
|
106
|
+
with self.active_fileset(f"klayout.drc.{drc}"):
|
|
107
|
+
self.add_file(runset, filetype="drc")
|
|
108
|
+
self.add_runsetfileset("drc", "klayout", drc)
|
|
109
|
+
|
|
110
|
+
self.add_klayout_drcparam(drc, "in_gds=<input>")
|
|
111
|
+
self.add_klayout_drcparam(drc, "cell=<topcell>")
|
|
112
|
+
self.add_klayout_drcparam(drc, "report_file=<report>")
|