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.
@@ -1,57 +1,466 @@
1
- import os
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
- def setup():
8
+
9
+ class _IHP130_IOLibrary(LambdaLibrary, _IHP130Path):
8
10
  '''
9
11
  IHP 130 IO Cells
10
12
  '''
11
- libdir = "lambdapdk/ihp130/libs/sg13g2_io"
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
- lib = siliconcompiler.Library('sg13g2_io', package='ihp130')
14
- register_ihp130_data_source(lib)
15
- register_data_source(lib)
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
- # pdk
18
- lib.set('option', 'pdk', 'ihp130')
427
+ # version
428
+ self.package.set_version("v1")
19
429
 
20
- lib.set('output', 'slow', 'nldm',
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
- for corner in ('slow', 'typical', 'fast'):
28
- lib.set('output', corner, 'spice',
29
- 'ihp-sg13g2/libs.ref/sg13g2_io/spice/sg13g2_io.spi')
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
- lib.set('asic', 'cells', 'filler', ['sg13g2_Filler200',
36
- 'sg13g2_Filler400',
37
- 'sg13g2_Filler1000',
38
- 'sg13g2_Filler2000',
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
- lib.set('output', 'blackbox', 'verilog',
43
- os.path.join(libdir, 'blackbox', 'sg13g2_io.v'), package='lambdapdk')
442
+ # version
443
+ self.package.set_version("v1")
44
444
 
45
- lambda_lib = siliconcompiler.Library('lambdalib_sg13g2_io', package='lambdapdk')
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
- return [lib, lambda_lib]
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
- if __name__ == "__main__":
56
- for lib in setup(siliconcompiler.Chip('<lib>')):
57
- lib.write_manifest(f'{lib.top()}.json')
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 siliconcompiler import Chip, Library
2
- from lambdapdk import register_data_source
3
- from lambdapdk.ihp130 import register_ihp130_data_source
4
-
5
-
6
- def setup():
7
- libs = []
8
- stackup = '5M2TL'
9
-
10
- for config in ('1024x64', '2048x64', '256x48', '256x64', '512x64', '64x64'):
11
- mem_name = f'RM_IHPSG13_1P_{config}_c2_bm_bist'
12
- lib = Library(mem_name, package='ihp130')
13
- register_ihp130_data_source(lib)
14
- register_data_source(lib)
15
- path_base = 'ihp-sg13g2/libs.ref/sg13g2_sram'
16
- lib.add('output', stackup, 'lef', f'{path_base}/lef/{mem_name}.lef')
17
- lib.add('output', stackup, 'gds', f'{path_base}/gds/{mem_name}.gds')
18
- lib.add('output', stackup, 'cdl', f'{path_base}/cdl/{mem_name}.cdl')
19
-
20
- lib.add('output', 'typ', 'nldm', f'{path_base}/lib/{mem_name}_typ_1p20V_25C.lib')
21
- lib.add('output', 'slow', 'nldm', f'{path_base}/lib/{mem_name}_slow_1p08V_125C.lib')
22
- lib.add('output', 'fast', 'nldm', f'{path_base}/lib/{mem_name}_fast_1p32V_m55C.lib')
23
-
24
- lib.add('output', 'rtl', 'verilog', f'{path_base}/verilog/{mem_name}.v')
25
- lib.add('output', 'rtl', 'verilog',
26
- f'{path_base}/verilog/RM_IHPSG13_1P_core_behavioral_bm_bist.v')
27
-
28
- lib.set('option', 'file', 'openroad_pdngen',
29
- 'lambdapdk/ihp130/libs/sg13g2_sram/apr/openroad/pdngen.tcl',
30
- package='lambdapdk')
31
- lib.set('option', 'file', 'openroad_global_connect',
32
- 'lambdapdk/ihp130/libs/sg13g2_sram/apr/openroad/global_connect.tcl',
33
- package='lambdapdk')
34
-
35
- libs.append(lib)
36
-
37
- lambda_lib = Library('lambdalib_sg13g2_sram', package='lambdapdk')
38
- register_data_source(lambda_lib)
39
- lambda_lib.add('option', 'ydir', 'lambdapdk/ihp130/libs/sg13g2_sram/lambda')
40
- for lib in libs:
41
- lambda_lib.use(lib)
42
- lambda_lib.add('asic', 'macrolib', lib.design)
43
-
44
- libs.append(lambda_lib)
45
-
46
- return libs
47
-
48
-
49
- #########################
50
- if __name__ == "__main__":
51
- for lib in setup(Chip('<lib>')):
52
- lib.write_manifest(f'{lib.top()}.json')
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")