lambdapdk 0.1.56__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 +84 -119
- 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.56.dist-info → lambdapdk-0.2.0.dist-info}/METADATA +5 -5
- lambdapdk-0.2.0.dist-info/RECORD +30 -0
- lambdapdk-0.2.0.dist-info/entry_points.txt +2 -0
- lambdapdk-0.1.56.dist-info/RECORD +0 -30
- lambdapdk-0.1.56.dist-info/entry_points.txt +0 -4
- {lambdapdk-0.1.56.dist-info → lambdapdk-0.2.0.dist-info}/WHEEL +0 -0
- {lambdapdk-0.1.56.dist-info → lambdapdk-0.2.0.dist-info}/licenses/LICENSE +0 -0
- {lambdapdk-0.1.56.dist-info → lambdapdk-0.2.0.dist-info}/top_level.txt +0 -0
|
@@ -1,57 +1,466 @@
|
|
|
1
|
-
import
|
|
2
|
-
import siliconcompiler
|
|
3
|
-
from lambdapdk import register_data_source
|
|
4
|
-
from lambdapdk.ihp130 import register_ihp130_data_source
|
|
1
|
+
from pathlib import Path
|
|
5
2
|
|
|
3
|
+
from siliconcompiler import ASIC
|
|
4
|
+
from lambdalib import LambalibTechLibrary
|
|
5
|
+
from lambdapdk import LambdaLibrary, _LambdaPath
|
|
6
|
+
from lambdapdk.ihp130 import IHP130PDK, _IHP130Path
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
|
|
9
|
+
class _IHP130_IOLibrary(LambdaLibrary, _IHP130Path):
|
|
8
10
|
'''
|
|
9
11
|
IHP 130 IO Cells
|
|
10
12
|
'''
|
|
11
|
-
|
|
13
|
+
def __init__(self, voltage):
|
|
14
|
+
super().__init__()
|
|
15
|
+
self.set_name(f"sg13g2_io_{voltage}")
|
|
16
|
+
|
|
17
|
+
path_base = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
18
|
+
|
|
19
|
+
self.add_asic_pdk(IHP130PDK())
|
|
20
|
+
|
|
21
|
+
with self.active_dataroot("ihp130"):
|
|
22
|
+
if voltage == "1p2V":
|
|
23
|
+
for corner_name, filename in [
|
|
24
|
+
('slow', 'sg13g2_io_slow_1p08V_3p0V_125C.lib'),
|
|
25
|
+
('typical', 'sg13g2_io_typ_1p2V_3p3V_25C.lib'),
|
|
26
|
+
('fast', 'sg13g2_io_fast_1p32V_3p6V_m40C.lib')]:
|
|
27
|
+
with self.active_fileset(f"models.timing.{corner_name}.nldm"):
|
|
28
|
+
self.add_file(f"ihp-sg13g2/libs.ref/sg13g2_io/lib/{filename}")
|
|
29
|
+
self.add_asic_libcornerfileset(corner_name, "nldm")
|
|
30
|
+
else:
|
|
31
|
+
for corner_name, filename in [
|
|
32
|
+
('slow', 'sg13g2_io_slow_1p35V_3p0V_125C.lib'),
|
|
33
|
+
('typical', 'sg13g2_io_typ_1p5V_3p3V_25C.lib'),
|
|
34
|
+
('fast', 'sg13g2_io_fast_1p65V_3p6V_m40C.lib')]:
|
|
35
|
+
with self.active_fileset(f"models.timing.{corner_name}.nldm"):
|
|
36
|
+
self.add_file(f"ihp-sg13g2/libs.ref/sg13g2_io/lib/{filename}")
|
|
37
|
+
self.add_asic_libcornerfileset(corner_name, "nldm")
|
|
38
|
+
|
|
39
|
+
with self.active_fileset("models.spice"):
|
|
40
|
+
self.add_file("ihp-sg13g2/libs.ref/sg13g2_io/spice/sg13g2_io.spi", filetype="spice")
|
|
41
|
+
|
|
42
|
+
with self.active_dataroot("ihp130"):
|
|
43
|
+
with self.active_fileset("models.physical"):
|
|
44
|
+
self.add_file("ihp-sg13g2/libs.ref/sg13g2_io/lef/sg13g2_io.lef")
|
|
45
|
+
self.add_file("ihp-sg13g2/libs.ref/sg13g2_io/gds/sg13g2_io.gds")
|
|
46
|
+
self.add_asic_aprfileset()
|
|
47
|
+
|
|
48
|
+
with self.active_fileset("models.lvs"):
|
|
49
|
+
self.add_file("ihp-sg13g2/libs.ref/sg13g2_io/cdl/sg13g2_io.cdl")
|
|
50
|
+
self.add_asic_aprfileset()
|
|
51
|
+
|
|
52
|
+
self.add_asic_celllist('filler', ['sg13g2_Filler200',
|
|
53
|
+
'sg13g2_Filler400',
|
|
54
|
+
'sg13g2_Filler1000',
|
|
55
|
+
'sg13g2_Filler2000',
|
|
56
|
+
'sg13g2_Filler4000',
|
|
57
|
+
'sg13g2_Filler10000'])
|
|
58
|
+
|
|
59
|
+
with self.active_dataroot("lambdapdk"):
|
|
60
|
+
with self.active_fileset("models.blackbox"):
|
|
61
|
+
self.add_file(path_base / "blackbox" / "sg13g2_io.v")
|
|
62
|
+
self.add_yosys_blackbox_fileset("models.blackbox")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class IHP130_IO_1p2(_IHP130_IOLibrary):
|
|
66
|
+
def __init__(self):
|
|
67
|
+
super().__init__("1p2")
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class IHP130_IO_1p5(_IHP130_IOLibrary):
|
|
71
|
+
def __init__(self):
|
|
72
|
+
super().__init__("1p5")
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class IHP130Lambdalib_la_iovdd_1p2(LambalibTechLibrary, _LambdaPath):
|
|
76
|
+
def __init__(self):
|
|
77
|
+
super().__init__("la_iovdd", [IHP130_IO_1p2])
|
|
78
|
+
self.set_name("ihp130_1p2_la_iovdd")
|
|
79
|
+
|
|
80
|
+
# version
|
|
81
|
+
self.package.set_version("v1")
|
|
82
|
+
|
|
83
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
84
|
+
|
|
85
|
+
with self.active_dataroot("lambdapdk"):
|
|
86
|
+
with self.active_fileset("rtl"):
|
|
87
|
+
self.add_file(lib_path / "lambda" / "la_iovdd.v")
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class IHP130Lambdalib_la_iocorner_1p2(LambalibTechLibrary, _LambdaPath):
|
|
91
|
+
def __init__(self):
|
|
92
|
+
super().__init__("la_iocorner", [IHP130_IO_1p2])
|
|
93
|
+
self.set_name("ihp130_1p2_la_iocorner")
|
|
94
|
+
|
|
95
|
+
# version
|
|
96
|
+
self.package.set_version("v1")
|
|
97
|
+
|
|
98
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
99
|
+
|
|
100
|
+
with self.active_dataroot("lambdapdk"):
|
|
101
|
+
with self.active_fileset("rtl"):
|
|
102
|
+
self.add_file(lib_path / "lambda" / "la_iocorner.v")
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class IHP130Lambdalib_la_iotxdiff_1p2(LambalibTechLibrary, _LambdaPath):
|
|
106
|
+
def __init__(self):
|
|
107
|
+
super().__init__("la_iotxdiff", [IHP130_IO_1p2])
|
|
108
|
+
self.set_name("ihp130_1p2_la_iotxdiff")
|
|
109
|
+
|
|
110
|
+
# version
|
|
111
|
+
self.package.set_version("v1")
|
|
112
|
+
|
|
113
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
114
|
+
|
|
115
|
+
with self.active_dataroot("lambdapdk"):
|
|
116
|
+
with self.active_fileset("rtl"):
|
|
117
|
+
self.add_file(lib_path / "lambda" / "la_iotxdiff.v")
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class IHP130Lambdalib_la_ioanalog_1p2(LambalibTechLibrary, _LambdaPath):
|
|
121
|
+
def __init__(self):
|
|
122
|
+
super().__init__("la_ioanalog", [IHP130_IO_1p2])
|
|
123
|
+
self.set_name("ihp130_1p2_la_ioanalog")
|
|
124
|
+
|
|
125
|
+
# version
|
|
126
|
+
self.package.set_version("v1")
|
|
127
|
+
|
|
128
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
129
|
+
|
|
130
|
+
with self.active_dataroot("lambdapdk"):
|
|
131
|
+
with self.active_fileset("rtl"):
|
|
132
|
+
self.add_file(lib_path / "lambda" / "la_ioanalog.v")
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class IHP130Lambdalib_la_ioinput_1p2(LambalibTechLibrary, _LambdaPath):
|
|
136
|
+
def __init__(self):
|
|
137
|
+
super().__init__("la_ioinput", [IHP130_IO_1p2])
|
|
138
|
+
self.set_name("ihp130_1p2_la_ioinput")
|
|
139
|
+
|
|
140
|
+
# version
|
|
141
|
+
self.package.set_version("v1")
|
|
142
|
+
|
|
143
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
144
|
+
|
|
145
|
+
with self.active_dataroot("lambdapdk"):
|
|
146
|
+
with self.active_fileset("rtl"):
|
|
147
|
+
self.add_file(lib_path / "lambda" / "la_ioinput.v")
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
class IHP130Lambdalib_la_iovss_1p2(LambalibTechLibrary, _LambdaPath):
|
|
151
|
+
def __init__(self):
|
|
152
|
+
super().__init__("la_iovss", [IHP130_IO_1p2])
|
|
153
|
+
self.set_name("ihp130_1p2_la_iovss")
|
|
154
|
+
|
|
155
|
+
# version
|
|
156
|
+
self.package.set_version("v1")
|
|
157
|
+
|
|
158
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
159
|
+
|
|
160
|
+
with self.active_dataroot("lambdapdk"):
|
|
161
|
+
with self.active_fileset("rtl"):
|
|
162
|
+
self.add_file(lib_path / "lambda" / "la_iovss.v")
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
class IHP130Lambdalib_la_iovddio_1p2(LambalibTechLibrary, _LambdaPath):
|
|
166
|
+
def __init__(self):
|
|
167
|
+
super().__init__("la_iovddio", [IHP130_IO_1p2])
|
|
168
|
+
self.set_name("ihp130_1p2_la_iovddio")
|
|
169
|
+
|
|
170
|
+
# version
|
|
171
|
+
self.package.set_version("v1")
|
|
172
|
+
|
|
173
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
174
|
+
|
|
175
|
+
with self.active_dataroot("lambdapdk"):
|
|
176
|
+
with self.active_fileset("rtl"):
|
|
177
|
+
self.add_file(lib_path / "lambda" / "la_iovddio.v")
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
class IHP130Lambdalib_la_iovssio_1p2(LambalibTechLibrary, _LambdaPath):
|
|
181
|
+
def __init__(self):
|
|
182
|
+
super().__init__("la_iovssio", [IHP130_IO_1p2])
|
|
183
|
+
self.set_name("ihp130_1p2_la_iovssio")
|
|
184
|
+
|
|
185
|
+
# version
|
|
186
|
+
self.package.set_version("v1")
|
|
187
|
+
|
|
188
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
189
|
+
|
|
190
|
+
with self.active_dataroot("lambdapdk"):
|
|
191
|
+
with self.active_fileset("rtl"):
|
|
192
|
+
self.add_file(lib_path / "lambda" / "la_iovssio.v")
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
class IHP130Lambdalib_la_iovdda_1p2(LambalibTechLibrary, _LambdaPath):
|
|
196
|
+
def __init__(self):
|
|
197
|
+
super().__init__("la_iovdda", [IHP130_IO_1p2])
|
|
198
|
+
self.set_name("ihp130_1p2_la_iovdda")
|
|
199
|
+
|
|
200
|
+
# version
|
|
201
|
+
self.package.set_version("v1")
|
|
202
|
+
|
|
203
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
204
|
+
|
|
205
|
+
with self.active_dataroot("lambdapdk"):
|
|
206
|
+
with self.active_fileset("rtl"):
|
|
207
|
+
self.add_file(lib_path / "lambda" / "la_iovdda.v")
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
class IHP130Lambdalib_la_iovssa_1p2(LambalibTechLibrary, _LambdaPath):
|
|
211
|
+
def __init__(self):
|
|
212
|
+
super().__init__("la_iovssa", [IHP130_IO_1p2])
|
|
213
|
+
self.set_name("ihp130_1p2_la_iovssa")
|
|
214
|
+
|
|
215
|
+
# version
|
|
216
|
+
self.package.set_version("v1")
|
|
217
|
+
|
|
218
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
219
|
+
|
|
220
|
+
with self.active_dataroot("lambdapdk"):
|
|
221
|
+
with self.active_fileset("rtl"):
|
|
222
|
+
self.add_file(lib_path / "lambda" / "la_iovssa.v")
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
class IHP130Lambdalib_la_iorxdiff_1p2(LambalibTechLibrary, _LambdaPath):
|
|
226
|
+
def __init__(self):
|
|
227
|
+
super().__init__("la_iorxdiff", [IHP130_IO_1p2])
|
|
228
|
+
self.set_name("ihp130_1p2_la_iorxdiff")
|
|
229
|
+
|
|
230
|
+
# version
|
|
231
|
+
self.package.set_version("v1")
|
|
232
|
+
|
|
233
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
234
|
+
|
|
235
|
+
with self.active_dataroot("lambdapdk"):
|
|
236
|
+
with self.active_fileset("rtl"):
|
|
237
|
+
self.add_file(lib_path / "lambda" / "la_iorxdiff.v")
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
class IHP130Lambdalib_la_iobidir_1p2(LambalibTechLibrary, _LambdaPath):
|
|
241
|
+
def __init__(self):
|
|
242
|
+
super().__init__("la_iobidir", [IHP130_IO_1p2])
|
|
243
|
+
self.set_name("ihp130_1p2_la_iobidir")
|
|
244
|
+
|
|
245
|
+
# version
|
|
246
|
+
self.package.set_version("v1")
|
|
247
|
+
|
|
248
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
249
|
+
|
|
250
|
+
with self.active_dataroot("lambdapdk"):
|
|
251
|
+
with self.active_fileset("rtl"):
|
|
252
|
+
self.add_file(lib_path / "lambda" / "la_iobidir.v")
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
class IHP130LambdaLib_IO_1p2(LambalibTechLibrary):
|
|
256
|
+
@classmethod
|
|
257
|
+
def alias(cls, project: ASIC):
|
|
258
|
+
IHP130Lambdalib_la_iovdd_1p2.alias(project)
|
|
259
|
+
IHP130Lambdalib_la_iocorner_1p2.alias(project)
|
|
260
|
+
IHP130Lambdalib_la_iotxdiff_1p2.alias(project)
|
|
261
|
+
IHP130Lambdalib_la_ioanalog_1p2.alias(project)
|
|
262
|
+
IHP130Lambdalib_la_ioinput_1p2.alias(project)
|
|
263
|
+
IHP130Lambdalib_la_iovss_1p2.alias(project)
|
|
264
|
+
IHP130Lambdalib_la_iovddio_1p2.alias(project)
|
|
265
|
+
IHP130Lambdalib_la_iovssio_1p2.alias(project)
|
|
266
|
+
IHP130Lambdalib_la_iovdda_1p2.alias(project)
|
|
267
|
+
IHP130Lambdalib_la_iovssa_1p2.alias(project)
|
|
268
|
+
IHP130Lambdalib_la_iorxdiff_1p2.alias(project)
|
|
269
|
+
IHP130Lambdalib_la_iobidir_1p2.alias(project)
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
class IHP130Lambdalib_la_iovdd_1p5(LambalibTechLibrary, _LambdaPath):
|
|
273
|
+
def __init__(self):
|
|
274
|
+
super().__init__("la_iovdd", [IHP130_IO_1p5])
|
|
275
|
+
self.set_name("ihp130_1p5_la_iovdd")
|
|
276
|
+
|
|
277
|
+
# version
|
|
278
|
+
self.package.set_version("v1")
|
|
279
|
+
|
|
280
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
281
|
+
|
|
282
|
+
with self.active_dataroot("lambdapdk"):
|
|
283
|
+
with self.active_fileset("rtl"):
|
|
284
|
+
self.add_file(lib_path / "lambda" / "la_iovdd.v")
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
class IHP130Lambdalib_la_iocorner_1p5(LambalibTechLibrary, _LambdaPath):
|
|
288
|
+
def __init__(self):
|
|
289
|
+
super().__init__("la_iocorner", [IHP130_IO_1p5])
|
|
290
|
+
self.set_name("ihp130_1p5_la_iocorner")
|
|
291
|
+
|
|
292
|
+
# version
|
|
293
|
+
self.package.set_version("v1")
|
|
294
|
+
|
|
295
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
296
|
+
|
|
297
|
+
with self.active_dataroot("lambdapdk"):
|
|
298
|
+
with self.active_fileset("rtl"):
|
|
299
|
+
self.add_file(lib_path / "lambda" / "la_iocorner.v")
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
class IHP130Lambdalib_la_iotxdiff_1p5(LambalibTechLibrary, _LambdaPath):
|
|
303
|
+
def __init__(self):
|
|
304
|
+
super().__init__("la_iotxdiff", [IHP130_IO_1p5])
|
|
305
|
+
self.set_name("ihp130_1p5_la_iotxdiff")
|
|
306
|
+
|
|
307
|
+
# version
|
|
308
|
+
self.package.set_version("v1")
|
|
309
|
+
|
|
310
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
311
|
+
|
|
312
|
+
with self.active_dataroot("lambdapdk"):
|
|
313
|
+
with self.active_fileset("rtl"):
|
|
314
|
+
self.add_file(lib_path / "lambda" / "la_iotxdiff.v")
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
class IHP130Lambdalib_la_ioanalog_1p5(LambalibTechLibrary, _LambdaPath):
|
|
318
|
+
def __init__(self):
|
|
319
|
+
super().__init__("la_ioanalog", [IHP130_IO_1p5])
|
|
320
|
+
self.set_name("ihp130_1p5_la_ioanalog")
|
|
321
|
+
|
|
322
|
+
# version
|
|
323
|
+
self.package.set_version("v1")
|
|
324
|
+
|
|
325
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
326
|
+
|
|
327
|
+
with self.active_dataroot("lambdapdk"):
|
|
328
|
+
with self.active_fileset("rtl"):
|
|
329
|
+
self.add_file(lib_path / "lambda" / "la_ioanalog.v")
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
class IHP130Lambdalib_la_ioinput_1p5(LambalibTechLibrary, _LambdaPath):
|
|
333
|
+
def __init__(self):
|
|
334
|
+
super().__init__("la_ioinput", [IHP130_IO_1p5])
|
|
335
|
+
self.set_name("ihp130_1p5_la_ioinput")
|
|
336
|
+
|
|
337
|
+
# version
|
|
338
|
+
self.package.set_version("v1")
|
|
339
|
+
|
|
340
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
341
|
+
|
|
342
|
+
with self.active_dataroot("lambdapdk"):
|
|
343
|
+
with self.active_fileset("rtl"):
|
|
344
|
+
self.add_file(lib_path / "lambda" / "la_ioinput.v")
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
class IHP130Lambdalib_la_iovss_1p5(LambalibTechLibrary, _LambdaPath):
|
|
348
|
+
def __init__(self):
|
|
349
|
+
super().__init__("la_iovss", [IHP130_IO_1p5])
|
|
350
|
+
self.set_name("ihp130_1p5_la_iovss")
|
|
351
|
+
|
|
352
|
+
# version
|
|
353
|
+
self.package.set_version("v1")
|
|
354
|
+
|
|
355
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
356
|
+
|
|
357
|
+
with self.active_dataroot("lambdapdk"):
|
|
358
|
+
with self.active_fileset("rtl"):
|
|
359
|
+
self.add_file(lib_path / "lambda" / "la_iovss.v")
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
class IHP130Lambdalib_la_iovddio_1p5(LambalibTechLibrary, _LambdaPath):
|
|
363
|
+
def __init__(self):
|
|
364
|
+
super().__init__("la_iovddio", [IHP130_IO_1p5])
|
|
365
|
+
self.set_name("ihp130_1p5_la_iovddio")
|
|
366
|
+
|
|
367
|
+
# version
|
|
368
|
+
self.package.set_version("v1")
|
|
369
|
+
|
|
370
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
371
|
+
|
|
372
|
+
with self.active_dataroot("lambdapdk"):
|
|
373
|
+
with self.active_fileset("rtl"):
|
|
374
|
+
self.add_file(lib_path / "lambda" / "la_iovddio.v")
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
class IHP130Lambdalib_la_iovssio_1p5(LambalibTechLibrary, _LambdaPath):
|
|
378
|
+
def __init__(self):
|
|
379
|
+
super().__init__("la_iovssio", [IHP130_IO_1p5])
|
|
380
|
+
self.set_name("ihp130_1p5_la_iovssio")
|
|
381
|
+
|
|
382
|
+
# version
|
|
383
|
+
self.package.set_version("v1")
|
|
384
|
+
|
|
385
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
386
|
+
|
|
387
|
+
with self.active_dataroot("lambdapdk"):
|
|
388
|
+
with self.active_fileset("rtl"):
|
|
389
|
+
self.add_file(lib_path / "lambda" / "la_iovssio.v")
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
class IHP130Lambdalib_la_iovdda_1p5(LambalibTechLibrary, _LambdaPath):
|
|
393
|
+
def __init__(self):
|
|
394
|
+
super().__init__("la_iovdda", [IHP130_IO_1p5])
|
|
395
|
+
self.set_name("ihp130_1p5_la_iovdda")
|
|
396
|
+
|
|
397
|
+
# version
|
|
398
|
+
self.package.set_version("v1")
|
|
399
|
+
|
|
400
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
401
|
+
|
|
402
|
+
with self.active_dataroot("lambdapdk"):
|
|
403
|
+
with self.active_fileset("rtl"):
|
|
404
|
+
self.add_file(lib_path / "lambda" / "la_iovdda.v")
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
class IHP130Lambdalib_la_iovssa_1p5(LambalibTechLibrary, _LambdaPath):
|
|
408
|
+
def __init__(self):
|
|
409
|
+
super().__init__("la_iovssa", [IHP130_IO_1p5])
|
|
410
|
+
self.set_name("ihp130_1p5_la_iovssa")
|
|
411
|
+
|
|
412
|
+
# version
|
|
413
|
+
self.package.set_version("v1")
|
|
414
|
+
|
|
415
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
416
|
+
|
|
417
|
+
with self.active_dataroot("lambdapdk"):
|
|
418
|
+
with self.active_fileset("rtl"):
|
|
419
|
+
self.add_file(lib_path / "lambda" / "la_iovssa.v")
|
|
420
|
+
|
|
12
421
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
422
|
+
class IHP130Lambdalib_la_iorxdiff_1p5(LambalibTechLibrary, _LambdaPath):
|
|
423
|
+
def __init__(self):
|
|
424
|
+
super().__init__("la_iorxdiff", [IHP130_IO_1p5])
|
|
425
|
+
self.set_name("ihp130_1p5_la_iorxdiff")
|
|
16
426
|
|
|
17
|
-
|
|
18
|
-
|
|
427
|
+
# version
|
|
428
|
+
self.package.set_version("v1")
|
|
19
429
|
|
|
20
|
-
|
|
21
|
-
'ihp-sg13g2/libs.ref/sg13g2_io/lib/sg13g2_io_slow_1p08V_3p0V_125C.lib')
|
|
22
|
-
lib.set('output', 'typical', 'nldm',
|
|
23
|
-
'ihp-sg13g2/libs.ref/sg13g2_io/lib/sg13g2_io_typ_1p5V_3p3V_25C.lib')
|
|
24
|
-
lib.set('output', 'fast', 'nldm',
|
|
25
|
-
'ihp-sg13g2/libs.ref/sg13g2_io/lib/sg13g2_io_fast_1p32V_3p6V_m40C.lib')
|
|
430
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
26
431
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
432
|
+
with self.active_dataroot("lambdapdk"):
|
|
433
|
+
with self.active_fileset("rtl"):
|
|
434
|
+
self.add_file(lib_path / "lambda" / "la_iorxdiff.v")
|
|
30
435
|
|
|
31
|
-
lib.set('output', '5M2TL', 'lef', 'ihp-sg13g2/libs.ref/sg13g2_io/lef/sg13g2_io.lef')
|
|
32
|
-
lib.set('output', '5M2TL', 'cdl', 'ihp-sg13g2/libs.ref/sg13g2_io/cdl/sg13g2_io.cdl')
|
|
33
|
-
lib.add('output', '5M2TL', 'gds', 'ihp-sg13g2/libs.ref/sg13g2_io/gds/sg13g2_io.gds')
|
|
34
436
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
'sg13g2_Filler4000',
|
|
40
|
-
'sg13g2_Filler10000'])
|
|
437
|
+
class IHP130Lambdalib_la_iobidir_1p5(LambalibTechLibrary, _LambdaPath):
|
|
438
|
+
def __init__(self):
|
|
439
|
+
super().__init__("la_iobidir", [IHP130_IO_1p5])
|
|
440
|
+
self.set_name("ihp130_1p5_la_iobidir")
|
|
41
441
|
|
|
42
|
-
|
|
43
|
-
|
|
442
|
+
# version
|
|
443
|
+
self.package.set_version("v1")
|
|
44
444
|
|
|
45
|
-
|
|
46
|
-
register_data_source(lambda_lib)
|
|
47
|
-
lambda_lib.add('option', 'ydir', os.path.join(libdir, 'lambda'))
|
|
48
|
-
lambda_lib.use(lib)
|
|
49
|
-
lambda_lib.set('asic', 'macrolib', lib.design)
|
|
445
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_io")
|
|
50
446
|
|
|
51
|
-
|
|
447
|
+
with self.active_dataroot("lambdapdk"):
|
|
448
|
+
with self.active_fileset("rtl"):
|
|
449
|
+
self.add_file(lib_path / "lambda" / "la_iobidir.v")
|
|
52
450
|
|
|
53
451
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
452
|
+
class IHP130LambdaLib_IO_1p5(LambalibTechLibrary):
|
|
453
|
+
@classmethod
|
|
454
|
+
def alias(cls, project: ASIC):
|
|
455
|
+
IHP130Lambdalib_la_iovdd_1p5.alias(project)
|
|
456
|
+
IHP130Lambdalib_la_iocorner_1p5.alias(project)
|
|
457
|
+
IHP130Lambdalib_la_iotxdiff_1p5.alias(project)
|
|
458
|
+
IHP130Lambdalib_la_ioanalog_1p5.alias(project)
|
|
459
|
+
IHP130Lambdalib_la_ioinput_1p5.alias(project)
|
|
460
|
+
IHP130Lambdalib_la_iovss_1p5.alias(project)
|
|
461
|
+
IHP130Lambdalib_la_iovddio_1p5.alias(project)
|
|
462
|
+
IHP130Lambdalib_la_iovssio_1p5.alias(project)
|
|
463
|
+
IHP130Lambdalib_la_iovdda_1p5.alias(project)
|
|
464
|
+
IHP130Lambdalib_la_iovssa_1p5.alias(project)
|
|
465
|
+
IHP130Lambdalib_la_iorxdiff_1p5.alias(project)
|
|
466
|
+
IHP130Lambdalib_la_iobidir_1p5.alias(project)
|
|
@@ -1,52 +1,97 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
3
|
-
from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
path_base =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
from lambdalib import LambalibTechLibrary
|
|
4
|
+
from lambdapdk import LambdaLibrary, _LambdaPath
|
|
5
|
+
from lambdapdk.ihp130 import IHP130PDK, _IHP130Path
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class _IHP130SRAMLibrary(LambdaLibrary, _IHP130Path):
|
|
9
|
+
def __init__(self, config):
|
|
10
|
+
super().__init__()
|
|
11
|
+
self.set_name(f'RM_IHPSG13_1P_{config}_c2_bm_bist')
|
|
12
|
+
|
|
13
|
+
self.add_asic_pdk(IHP130PDK())
|
|
14
|
+
|
|
15
|
+
path_base = Path("lambdapdk", "ihp130", "libs", "sg13g2_sram")
|
|
16
|
+
|
|
17
|
+
with self.active_dataroot("ihp130"):
|
|
18
|
+
with self.active_fileset("models.physical"):
|
|
19
|
+
self.add_file(f"ihp-sg13g2/libs.ref/sg13g2_sram/lef/{self.name}.lef")
|
|
20
|
+
self.add_file(f"ihp-sg13g2/libs.ref/sg13g2_sram/gds/{self.name}.gds")
|
|
21
|
+
self.add_asic_aprfileset()
|
|
22
|
+
|
|
23
|
+
with self.active_fileset("models.lvs"):
|
|
24
|
+
self.add_file(f"ihp-sg13g2/libs.ref/sg13g2_sram/cdl/{self.name}.cdl")
|
|
25
|
+
self.add_asic_aprfileset()
|
|
26
|
+
|
|
27
|
+
for corner_name, filename in [
|
|
28
|
+
('slow', f'{self.name}_slow_1p08V_125C.lib'),
|
|
29
|
+
('typical', f'{self.name}_typ_1p20V_25C.lib'),
|
|
30
|
+
('fast', f'{self.name}_fast_1p32V_m55C.lib')]:
|
|
31
|
+
with self.active_fileset(f"models.timing.nldm.{corner_name}"):
|
|
32
|
+
self.add_file(f"ihp-sg13g2/libs.ref/sg13g2_sram/lib/{filename}")
|
|
33
|
+
self.add_asic_libcornerfileset(corner_name, "nldm")
|
|
34
|
+
|
|
35
|
+
with self.active_fileset("rtl"):
|
|
36
|
+
self.add_file(f"ihp-sg13g2/libs.ref/sg13g2_sram/verilog/{self.name}.v")
|
|
37
|
+
self.add_file("ihp-sg13g2/libs.ref/sg13g2_sram/verilog/"
|
|
38
|
+
"RM_IHPSG13_1P_core_behavioral_bm_bist.v")
|
|
39
|
+
|
|
40
|
+
with self.active_dataroot("lambdapdk"):
|
|
41
|
+
with self.active_fileset("openroad.powergrid"):
|
|
42
|
+
self.add_file(path_base / "apr" / "openroad" / "pdngen.tcl")
|
|
43
|
+
self.add_openroad_powergridfileset()
|
|
44
|
+
with self.active_fileset("openroad.globalconnect"):
|
|
45
|
+
self.add_file(path_base / "apr" / "openroad" / "global_connect.tcl")
|
|
46
|
+
self.add_openroad_globalconnectfileset()
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class IHP130_SRAM_1024x64(_IHP130SRAMLibrary):
|
|
50
|
+
def __init__(self):
|
|
51
|
+
super().__init__("1024x64")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class IHP130_SRAM_2048x64(_IHP130SRAMLibrary):
|
|
55
|
+
def __init__(self):
|
|
56
|
+
super().__init__("2048x64")
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class IHP130_SRAM_256x48(_IHP130SRAMLibrary):
|
|
60
|
+
def __init__(self):
|
|
61
|
+
super().__init__("256x48")
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class IHP130_SRAM_256x64(_IHP130SRAMLibrary):
|
|
65
|
+
def __init__(self):
|
|
66
|
+
super().__init__("256x64")
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class IHP130_SRAM_512x64(_IHP130SRAMLibrary):
|
|
70
|
+
def __init__(self):
|
|
71
|
+
super().__init__("512x64")
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class IHP130_SRAM_64x64(_IHP130SRAMLibrary):
|
|
75
|
+
def __init__(self):
|
|
76
|
+
super().__init__("64x64")
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class IHP130Lambdalib_SinglePort(LambalibTechLibrary, _LambdaPath):
|
|
80
|
+
def __init__(self):
|
|
81
|
+
super().__init__("la_spram", [
|
|
82
|
+
IHP130_SRAM_1024x64,
|
|
83
|
+
IHP130_SRAM_2048x64,
|
|
84
|
+
IHP130_SRAM_256x48,
|
|
85
|
+
IHP130_SRAM_256x64,
|
|
86
|
+
IHP130_SRAM_512x64,
|
|
87
|
+
IHP130_SRAM_64x64])
|
|
88
|
+
self.set_name("ihp130_la_spram")
|
|
89
|
+
|
|
90
|
+
# version
|
|
91
|
+
self.package.set_version("v1")
|
|
92
|
+
|
|
93
|
+
lib_path = Path("lambdapdk", "ihp130", "libs", "sg13g2_sram")
|
|
94
|
+
|
|
95
|
+
with self.active_dataroot("lambdapdk"):
|
|
96
|
+
with self.active_fileset("rtl"):
|
|
97
|
+
self.add_file(lib_path / "lambda" / "la_spram.v")
|