lambdapdk 0.1.55__tar.gz → 0.2.0rc1__tar.gz

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.
Files changed (67) hide show
  1. {lambdapdk-0.1.55/lambdapdk.egg-info → lambdapdk-0.2.0rc1}/PKG-INFO +6 -6
  2. lambdapdk-0.2.0rc1/lambdapdk/__init__.py +310 -0
  3. lambdapdk-0.2.0rc1/lambdapdk/asap7/__init__.py +111 -0
  4. lambdapdk-0.2.0rc1/lambdapdk/asap7/libs/asap7sc7p5t.py +123 -0
  5. lambdapdk-0.2.0rc1/lambdapdk/asap7/libs/fakeio7.py +26 -0
  6. lambdapdk-0.2.0rc1/lambdapdk/asap7/libs/fakekit7.py +22 -0
  7. lambdapdk-0.2.0rc1/lambdapdk/asap7/libs/fakeram7.py +240 -0
  8. lambdapdk-0.2.0rc1/lambdapdk/freepdk45/__init__.py +78 -0
  9. lambdapdk-0.2.0rc1/lambdapdk/freepdk45/libs/fakeram45.py +81 -0
  10. lambdapdk-0.2.0rc1/lambdapdk/freepdk45/libs/nangate45.py +91 -0
  11. lambdapdk-0.2.0rc1/lambdapdk/gf180/__init__.py +272 -0
  12. lambdapdk-0.2.0rc1/lambdapdk/gf180/libs/gf180io.py +108 -0
  13. lambdapdk-0.2.0rc1/lambdapdk/gf180/libs/gf180mcu.py +209 -0
  14. lambdapdk-0.2.0rc1/lambdapdk/gf180/libs/gf180sram.py +121 -0
  15. lambdapdk-0.2.0rc1/lambdapdk/ihp130/__init__.py +112 -0
  16. lambdapdk-0.2.0rc1/lambdapdk/ihp130/libs/sg13g2_io.py +70 -0
  17. lambdapdk-0.2.0rc1/lambdapdk/ihp130/libs/sg13g2_sram.py +94 -0
  18. lambdapdk-0.2.0rc1/lambdapdk/ihp130/libs/sg13g2_stdcell.py +117 -0
  19. lambdapdk-0.2.0rc1/lambdapdk/interposer/__init__.py +147 -0
  20. lambdapdk-0.2.0rc1/lambdapdk/interposer/libs/bumps.py +46 -0
  21. lambdapdk-0.2.0rc1/lambdapdk/sky130/__init__.py +101 -0
  22. lambdapdk-0.2.0rc1/lambdapdk/sky130/libs/sky130io.py +50 -0
  23. lambdapdk-0.2.0rc1/lambdapdk/sky130/libs/sky130sc.py +175 -0
  24. lambdapdk-0.2.0rc1/lambdapdk/sky130/libs/sky130sram.py +56 -0
  25. {lambdapdk-0.1.55 → lambdapdk-0.2.0rc1/lambdapdk.egg-info}/PKG-INFO +6 -6
  26. {lambdapdk-0.1.55 → lambdapdk-0.2.0rc1}/lambdapdk.egg-info/SOURCES.txt +0 -1
  27. lambdapdk-0.2.0rc1/lambdapdk.egg-info/entry_points.txt +2 -0
  28. lambdapdk-0.2.0rc1/lambdapdk.egg-info/requires.txt +10 -0
  29. {lambdapdk-0.1.55 → lambdapdk-0.2.0rc1}/pyproject.toml +5 -7
  30. lambdapdk-0.2.0rc1/tests/test_getters.py +9 -0
  31. {lambdapdk-0.1.55 → lambdapdk-0.2.0rc1}/tests/test_lambda.py +3 -0
  32. lambdapdk-0.2.0rc1/tests/test_paths.py +39 -0
  33. lambdapdk-0.1.55/lambdapdk/__init__.py +0 -161
  34. lambdapdk-0.1.55/lambdapdk/asap7/__init__.py +0 -134
  35. lambdapdk-0.1.55/lambdapdk/asap7/libs/asap7sc7p5t.py +0 -162
  36. lambdapdk-0.1.55/lambdapdk/asap7/libs/fakeio7.py +0 -35
  37. lambdapdk-0.1.55/lambdapdk/asap7/libs/fakekit7.py +0 -27
  38. lambdapdk-0.1.55/lambdapdk/asap7/libs/fakeram7.py +0 -43
  39. lambdapdk-0.1.55/lambdapdk/freepdk45/__init__.py +0 -108
  40. lambdapdk-0.1.55/lambdapdk/freepdk45/libs/fakeram45.py +0 -36
  41. lambdapdk-0.1.55/lambdapdk/freepdk45/libs/nangate45.py +0 -130
  42. lambdapdk-0.1.55/lambdapdk/gf180/__init__.py +0 -186
  43. lambdapdk-0.1.55/lambdapdk/gf180/libs/gf180io.py +0 -73
  44. lambdapdk-0.1.55/lambdapdk/gf180/libs/gf180mcu.py +0 -163
  45. lambdapdk-0.1.55/lambdapdk/gf180/libs/gf180sram.py +0 -63
  46. lambdapdk-0.1.55/lambdapdk/ihp130/__init__.py +0 -147
  47. lambdapdk-0.1.55/lambdapdk/ihp130/libs/sg13g2_io.py +0 -57
  48. lambdapdk-0.1.55/lambdapdk/ihp130/libs/sg13g2_sram.py +0 -52
  49. lambdapdk-0.1.55/lambdapdk/ihp130/libs/sg13g2_stdcell.py +0 -139
  50. lambdapdk-0.1.55/lambdapdk/interposer/__init__.py +0 -111
  51. lambdapdk-0.1.55/lambdapdk/interposer/libs/bumps.py +0 -31
  52. lambdapdk-0.1.55/lambdapdk/sky130/__init__.py +0 -123
  53. lambdapdk-0.1.55/lambdapdk/sky130/libs/sky130io.py +0 -53
  54. lambdapdk-0.1.55/lambdapdk/sky130/libs/sky130sc.py +0 -211
  55. lambdapdk-0.1.55/lambdapdk/sky130/libs/sky130sram.py +0 -45
  56. lambdapdk-0.1.55/lambdapdk.egg-info/entry_points.txt +0 -4
  57. lambdapdk-0.1.55/lambdapdk.egg-info/requires.txt +0 -10
  58. lambdapdk-0.1.55/tests/test_getters.py +0 -47
  59. lambdapdk-0.1.55/tests/test_local_detect.py +0 -8
  60. lambdapdk-0.1.55/tests/test_paths.py +0 -58
  61. {lambdapdk-0.1.55 → lambdapdk-0.2.0rc1}/LICENSE +0 -0
  62. {lambdapdk-0.1.55 → lambdapdk-0.2.0rc1}/MANIFEST.in +0 -0
  63. {lambdapdk-0.1.55 → lambdapdk-0.2.0rc1}/README.md +0 -0
  64. {lambdapdk-0.1.55 → lambdapdk-0.2.0rc1}/lambdapdk/interposer/_generator.py +0 -0
  65. {lambdapdk-0.1.55 → lambdapdk-0.2.0rc1}/lambdapdk.egg-info/dependency_links.txt +0 -0
  66. {lambdapdk-0.1.55 → lambdapdk-0.2.0rc1}/lambdapdk.egg-info/top_level.txt +0 -0
  67. {lambdapdk-0.1.55 → lambdapdk-0.2.0rc1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lambdapdk
3
- Version: 0.1.55
3
+ Version: 0.2.0rc1
4
4
  Summary: Library of open source Process Design Kits
5
5
  Author: Zero ASIC
6
6
  License: Apache License
@@ -198,13 +198,13 @@ Project-URL: Homepage, https://github.com/siliconcompiler/lambdapdk
198
198
  Requires-Python: >=3.8
199
199
  Description-Content-Type: text/markdown
200
200
  License-File: LICENSE
201
- Requires-Dist: siliconcompiler>=0.27.0
201
+ Requires-Dist: siliconcompiler>=0.34.3
202
+ Requires-Dist: lambdalib==0.4.0-rc1
202
203
  Provides-Extra: test
203
- Requires-Dist: flake8==7.2.0; extra == "test"
204
- Requires-Dist: pytest==8.4.0; extra == "test"
204
+ Requires-Dist: flake8==7.3.0; extra == "test"
205
+ Requires-Dist: pytest==8.4.1; extra == "test"
205
206
  Requires-Dist: pytest-timeout==2.4.0; extra == "test"
206
- Requires-Dist: tclint==0.5.4; extra == "test"
207
- Requires-Dist: lambdalib==0.3.4; extra == "test"
207
+ Requires-Dist: tclint==0.6.0; extra == "test"
208
208
  Requires-Dist: sc-leflib==0.4.0; extra == "test"
209
209
  Requires-Dist: Jinja2==3.1.6; extra == "test"
210
210
  Dynamic: license-file
@@ -0,0 +1,310 @@
1
+ import os.path
2
+ from siliconcompiler.pathschema import PathSchema
3
+
4
+ from siliconcompiler.package import PythonPathResolver
5
+
6
+ from siliconcompiler.tools.klayout import KLayoutPDK
7
+ from siliconcompiler.tools.openroad import OpenROADPDK
8
+
9
+ from siliconcompiler.tools.yosys import YosysStdCellLibrary
10
+ from siliconcompiler.tools.openroad import OpenROADStdCellLibrary
11
+ from siliconcompiler.tools.bambu import BambuStdCellLibrary
12
+ from siliconcompiler.tools.klayout import KLayoutLibrary
13
+
14
+ __version__ = "0.2.0-rc1"
15
+
16
+
17
+ class _LambdaPath(PathSchema):
18
+ def __init__(self):
19
+ super().__init__()
20
+ PythonPathResolver.set_dataroot(
21
+ self,
22
+ "lambdapdk",
23
+ "lambdapdk",
24
+ "https://github.com/siliconcompiler/lambdapdk/archive/refs/tags/",
25
+ alternative_ref=f"v{__version__}",
26
+ python_module_path_append="..")
27
+
28
+
29
+ class LambdaPDK(KLayoutPDK, OpenROADPDK, _LambdaPath):
30
+ def __init__(self):
31
+ super().__init__()
32
+
33
+
34
+ class LambdaLibrary(YosysStdCellLibrary,
35
+ OpenROADStdCellLibrary,
36
+ KLayoutLibrary,
37
+ BambuStdCellLibrary,
38
+ _LambdaPath):
39
+ def __init__(self):
40
+ super().__init__()
41
+
42
+
43
+ def get_pdks():
44
+ '''
45
+ Returns a list of pdks in lambdapdk
46
+ '''
47
+
48
+ from lambdapdk.asap7 import ASAP7PDK
49
+ from lambdapdk.freepdk45 import FreePDK45PDK
50
+ from lambdapdk.sky130 import Sky130PDK
51
+ from lambdapdk.gf180 import GF180_3LM_1TM_6K_7t, \
52
+ GF180_3LM_1TM_6K_9t, \
53
+ GF180_3LM_1TM_9K_7t, \
54
+ GF180_3LM_1TM_9K_9t, \
55
+ GF180_3LM_1TM_11K_7t, \
56
+ GF180_3LM_1TM_11K_9t, \
57
+ GF180_3LM_1TM_30K_7t, \
58
+ GF180_3LM_1TM_30K_9t, \
59
+ GF180_4LM_1TM_6K_7t, \
60
+ GF180_4LM_1TM_6K_9t, \
61
+ GF180_4LM_1TM_9K_7t, \
62
+ GF180_4LM_1TM_9K_9t, \
63
+ GF180_4LM_1TM_11K_7t, \
64
+ GF180_4LM_1TM_11K_9t, \
65
+ GF180_4LM_1TM_30K_7t, \
66
+ GF180_4LM_1TM_30K_9t, \
67
+ GF180_5LM_1TM_9K_7t, \
68
+ GF180_5LM_1TM_9K_9t, \
69
+ GF180_5LM_1TM_11K_7t, \
70
+ GF180_5LM_1TM_11K_9t, \
71
+ GF180_6LM_1TM_9K_7t, \
72
+ GF180_6LM_1TM_9K_9t
73
+ from lambdapdk.ihp130 import IHP130PDK
74
+ from lambdapdk.interposer import Interposer_3ML_0400, \
75
+ Interposer_3ML_0800, \
76
+ Interposer_3ML_2000, \
77
+ Interposer_3ML_0400_2000, \
78
+ Interposer_4ML_0400, \
79
+ Interposer_4ML_0800, \
80
+ Interposer_4ML_2000, \
81
+ Interposer_4ML_0400_2000, \
82
+ Interposer_5ML_0400, \
83
+ Interposer_5ML_0800, \
84
+ Interposer_5ML_2000, \
85
+ Interposer_5ML_0400_2000
86
+
87
+ return set([
88
+ ASAP7PDK(),
89
+ FreePDK45PDK(),
90
+ Sky130PDK(),
91
+ IHP130PDK(),
92
+ GF180_3LM_1TM_6K_7t(),
93
+ GF180_3LM_1TM_6K_9t(),
94
+ GF180_3LM_1TM_9K_7t(),
95
+ GF180_3LM_1TM_9K_9t(),
96
+ GF180_3LM_1TM_11K_7t(),
97
+ GF180_3LM_1TM_11K_9t(),
98
+ GF180_3LM_1TM_30K_7t(),
99
+ GF180_3LM_1TM_30K_9t(),
100
+ GF180_4LM_1TM_6K_7t(),
101
+ GF180_4LM_1TM_6K_9t(),
102
+ GF180_4LM_1TM_9K_7t(),
103
+ GF180_4LM_1TM_9K_9t(),
104
+ GF180_4LM_1TM_11K_7t(),
105
+ GF180_4LM_1TM_11K_9t(),
106
+ GF180_4LM_1TM_30K_7t(),
107
+ GF180_4LM_1TM_30K_9t(),
108
+ GF180_5LM_1TM_9K_7t(),
109
+ GF180_5LM_1TM_9K_9t(),
110
+ GF180_5LM_1TM_11K_7t(),
111
+ GF180_5LM_1TM_11K_9t(),
112
+ GF180_6LM_1TM_9K_7t(),
113
+ GF180_6LM_1TM_9K_9t(),
114
+ Interposer_3ML_0400(),
115
+ Interposer_3ML_0800(),
116
+ Interposer_3ML_2000(),
117
+ Interposer_3ML_0400_2000(),
118
+ Interposer_4ML_0400(),
119
+ Interposer_4ML_0800(),
120
+ Interposer_4ML_2000(),
121
+ Interposer_4ML_0400_2000(),
122
+ Interposer_5ML_0400(),
123
+ Interposer_5ML_0800(),
124
+ Interposer_5ML_2000(),
125
+ Interposer_5ML_0400_2000()
126
+ ])
127
+
128
+
129
+ def get_pdk_names():
130
+ '''
131
+ Returns a list of pdks in lambdapdk
132
+ '''
133
+
134
+ return set([pdk.name for pdk in get_pdks()])
135
+
136
+
137
+ def get_libs():
138
+ '''
139
+ Returns a list of libraries in lambdapdk
140
+ '''
141
+
142
+ from lambdapdk.asap7.libs.asap7sc7p5t import ASAP7SC7p5RVT, ASAP7SC7p5SLVT, ASAP7SC7p5LVT
143
+ from lambdapdk.asap7.libs.fakeio7 import FakeIO7Library
144
+ from lambdapdk.asap7.libs.fakekit7 import FakeKit7Library
145
+ from lambdapdk.asap7.libs.fakeram7 import \
146
+ FakeRAM7_dp_64x32, \
147
+ FakeRAM7_sp_64x32, \
148
+ FakeRAM7_dp_128x32, \
149
+ FakeRAM7_sp_128x32, \
150
+ FakeRAM7_dp_256x32, \
151
+ FakeRAM7_sp_256x32, \
152
+ FakeRAM7_dp_256x64, \
153
+ FakeRAM7_sp_256x64, \
154
+ FakeRAM7_dp_512x32, \
155
+ FakeRAM7_sp_512x32, \
156
+ FakeRAM7_dp_512x64, \
157
+ FakeRAM7_sp_512x64, \
158
+ FakeRAM7_dp_512x128, \
159
+ FakeRAM7_sp_512x128, \
160
+ FakeRAM7_dp_1024x32, \
161
+ FakeRAM7_sp_1024x32, \
162
+ FakeRAM7_dp_1024x64, \
163
+ FakeRAM7_sp_1024x64, \
164
+ FakeRAM7_dp_2048x32, \
165
+ FakeRAM7_sp_2048x32, \
166
+ FakeRAM7_dp_2048x64, \
167
+ FakeRAM7_sp_2048x64, \
168
+ FakeRAM7_dp_4096x32, \
169
+ FakeRAM7_sp_4096x32, \
170
+ FakeRAM7_dp_4096x64, \
171
+ FakeRAM7_sp_4096x64, \
172
+ FakeRAM7_dp_8192x32, \
173
+ FakeRAM7_sp_8192x32, \
174
+ FakeRAM7_dp_8192x64, \
175
+ FakeRAM7_sp_8192x64, \
176
+ FakeRAM7Lambdalib_SinglePort, \
177
+ FakeRAM7Lambdalib_DoublePort
178
+ from lambdapdk.freepdk45.libs.nangate45 import Nangate45
179
+ from lambdapdk.freepdk45.libs.fakeram45 import \
180
+ FakeRAM45_64x32, \
181
+ FakeRAM45_128x32, \
182
+ FakeRAM45_256x32, \
183
+ FakeRAM45_256x64, \
184
+ FakeRAM45_512x32, \
185
+ FakeRAM45_512x64, \
186
+ FakeRAM45Lambdalib_SinglePort
187
+ from lambdapdk.gf180.libs.gf180io import GF180_IO_3LM, GF180_IO_4LM, GF180_IO_5LM
188
+ from lambdapdk.gf180.libs.gf180mcu import GF180_MCU_7T_3LMLibrary, \
189
+ GF180_MCU_7T_4LMLibrary, \
190
+ GF180_MCU_7T_5LMLibrary, \
191
+ GF180_MCU_7T_6LMLibrary, \
192
+ GF180_MCU_9T_3LMLibrary, \
193
+ GF180_MCU_9T_4LMLibrary, \
194
+ GF180_MCU_9T_5LMLibrary, \
195
+ GF180_MCU_9T_6LMLibrary
196
+ from lambdapdk.gf180.libs.gf180sram import GF180_SRAM_64x8, \
197
+ GF180_SRAM_128x8, \
198
+ GF180_SRAM_256x8, \
199
+ GF180_SRAM_512x8, \
200
+ GF180Lambdalib_SinglePort
201
+ from lambdapdk.ihp130.libs.sg13g2_io import IHP130_IO_1p2, IHP130_IO_1p5
202
+ from lambdapdk.ihp130.libs.sg13g2_sram import \
203
+ IHP130_SRAM_1024x64, IHP130_SRAM_2048x64, \
204
+ IHP130_SRAM_256x48, IHP130_SRAM_256x64, \
205
+ IHP130_SRAM_512x64, IHP130_SRAM_64x64, \
206
+ IHP130Lambdalib_SinglePort
207
+ from lambdapdk.ihp130.libs.sg13g2_stdcell import IHP130StdCell_1p2, IHP130StdCell_1p5
208
+ from lambdapdk.interposer.libs.bumps import BumpLibrary
209
+ from lambdapdk.sky130.libs.sky130io import Sky130_IOLibrary
210
+ from lambdapdk.sky130.libs.sky130sc import Sky130_SCHDLibrary, Sky130_SCHDLLLibrary
211
+ from lambdapdk.sky130.libs.sky130sram import Sky130_SRAM_64x256, Sky130Lambdalib_SinglePort
212
+
213
+ return set([
214
+ ASAP7SC7p5RVT(), ASAP7SC7p5SLVT(), ASAP7SC7p5LVT(),
215
+ FakeIO7Library(), FakeKit7Library(),
216
+ FakeRAM7_dp_64x32(),
217
+ FakeRAM7_sp_64x32(),
218
+ FakeRAM7_dp_128x32(),
219
+ FakeRAM7_sp_128x32(),
220
+ FakeRAM7_dp_256x32(),
221
+ FakeRAM7_sp_256x32(),
222
+ FakeRAM7_dp_256x64(),
223
+ FakeRAM7_sp_256x64(),
224
+ FakeRAM7_dp_512x32(),
225
+ FakeRAM7_sp_512x32(),
226
+ FakeRAM7_dp_512x64(),
227
+ FakeRAM7_sp_512x64(),
228
+ FakeRAM7_dp_512x128(),
229
+ FakeRAM7_sp_512x128(),
230
+ FakeRAM7_dp_1024x32(),
231
+ FakeRAM7_sp_1024x32(),
232
+ FakeRAM7_dp_1024x64(),
233
+ FakeRAM7_sp_1024x64(),
234
+ FakeRAM7_dp_2048x32(),
235
+ FakeRAM7_sp_2048x32(),
236
+ FakeRAM7_dp_2048x64(),
237
+ FakeRAM7_sp_2048x64(),
238
+ FakeRAM7_dp_4096x32(),
239
+ FakeRAM7_sp_4096x32(),
240
+ FakeRAM7_dp_4096x64(),
241
+ FakeRAM7_sp_4096x64(),
242
+ FakeRAM7_dp_8192x32(),
243
+ FakeRAM7_sp_8192x32(),
244
+ FakeRAM7_dp_8192x64(),
245
+ FakeRAM7_sp_8192x64(),
246
+ FakeRAM7Lambdalib_SinglePort(),
247
+ FakeRAM7Lambdalib_DoublePort(),
248
+ Nangate45(),
249
+ FakeRAM45_64x32(),
250
+ FakeRAM45_128x32(),
251
+ FakeRAM45_256x32(),
252
+ FakeRAM45_256x64(),
253
+ FakeRAM45_512x32(),
254
+ FakeRAM45_512x64(),
255
+ FakeRAM45Lambdalib_SinglePort(),
256
+ GF180_IO_3LM(), GF180_IO_4LM(), GF180_IO_5LM(),
257
+ GF180_MCU_7T_3LMLibrary(),
258
+ GF180_MCU_7T_4LMLibrary(),
259
+ GF180_MCU_7T_5LMLibrary(),
260
+ GF180_MCU_7T_6LMLibrary(),
261
+ GF180_MCU_9T_3LMLibrary(),
262
+ GF180_MCU_9T_4LMLibrary(),
263
+ GF180_MCU_9T_5LMLibrary(),
264
+ GF180_MCU_9T_6LMLibrary(),
265
+ GF180_SRAM_64x8(),
266
+ GF180_SRAM_128x8(),
267
+ GF180_SRAM_256x8(),
268
+ GF180_SRAM_512x8(),
269
+ GF180Lambdalib_SinglePort(),
270
+ IHP130_IO_1p2(), IHP130_IO_1p5(),
271
+ IHP130_SRAM_1024x64(), IHP130_SRAM_2048x64(),
272
+ IHP130_SRAM_256x48(), IHP130_SRAM_256x64(),
273
+ IHP130_SRAM_512x64(), IHP130_SRAM_64x64(),
274
+ IHP130Lambdalib_SinglePort(),
275
+ IHP130StdCell_1p2(), IHP130StdCell_1p5(),
276
+ BumpLibrary(),
277
+ Sky130_IOLibrary(),
278
+ Sky130_SCHDLibrary(), Sky130_SCHDLLLibrary(),
279
+ Sky130_SRAM_64x256(), Sky130Lambdalib_SinglePort()
280
+ ])
281
+
282
+
283
+ def get_lib_names():
284
+ '''
285
+ Returns a list of libraries names in lambdapdk
286
+ '''
287
+
288
+ return set([lib.name for lib in get_libs()])
289
+
290
+
291
+ def get_docs_codeurl(file=None):
292
+ base_url = f"https://github.com/siliconcompiler/lambdapdk/blob/v{__version__}"
293
+
294
+ if not file:
295
+ return base_url
296
+
297
+ root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
298
+
299
+ def relpath(file):
300
+ file = os.path.abspath(file)
301
+ if file.startswith(root):
302
+ return os.path.relpath(file, root)
303
+ return None
304
+
305
+ if os.path.isabs(file):
306
+ file = relpath(file)
307
+ if not file:
308
+ return None
309
+
310
+ return f"{base_url}/{file}"
@@ -0,0 +1,111 @@
1
+ from pathlib import Path
2
+
3
+ from lambdapdk import LambdaPDK
4
+
5
+
6
+ class ASAP7PDK(LambdaPDK):
7
+ '''
8
+ The asap7 PDK was developed at ASU in collaboration with ARM Research.
9
+ With funding from the DARPA IDEA program, the PDK was released
10
+ a permissive open source PDK in 2021. The PDK contains SPICE-compatible
11
+ FinFET device models (BSIM-CMG), Technology files for Cadence Virtuoso,
12
+ Design Rule Checker (DRC), Layout vs Schematic Checker (LVS) and
13
+ Extraction Deck for the 7nm technology node. For more details regarding
14
+ the technical specifications of the PDK, please refer the PDK
15
+ documentation and associated publication. Note that this process
16
+ design kit is provided as an academic and research aid only and the
17
+ resulting designs are not manufacturable.
18
+
19
+ PDK content:
20
+
21
+ * open source DRM
22
+ * device primitive library (virtuoso)
23
+ * spice (hspice)
24
+ * extraction runsets (calibre)
25
+ * drc runsets (calibre)
26
+ * APR technology files
27
+ * 7.5 track multi-vt standard cell libraries
28
+
29
+ More information:
30
+
31
+ * https://asap.asu.edu/
32
+ * L.T. Clark, V. Vashishtha, L. Shifren, A. Gujja, S. Sinha, B. Cline,
33
+ C. Ramamurthya, and G. Yeric, “ASAP7: A 7-nm FinFET Predictive Process
34
+ Design Kit,” Microelectronics Journal, vol. 53, pp. 105-115, July 2016.
35
+
36
+
37
+ Sources: https://github.com/The-OpenROAD-Project/asap7
38
+
39
+ .. warning::
40
+ Work in progress (not ready for use)
41
+ '''
42
+
43
+ def __init__(self):
44
+ super().__init__()
45
+ self.set_name("asap7")
46
+
47
+ pdk_path = Path("lambdapdk", "asap7", "base")
48
+
49
+ self.set_foundry("virtual")
50
+ self.set_version("r1p7")
51
+ self.set_node(7)
52
+ self.set_stackup("10M")
53
+ self.set_wafersize(300)
54
+ self.set_scribewidth(0.1, 0.1)
55
+ self.set_edgemargin(2)
56
+ self.set_defectdensity(1.25)
57
+
58
+ with self.active_dataroot("lambdapdk"):
59
+ # APR Setup
60
+ with self.active_fileset("views.lef"):
61
+ self.add_file(pdk_path / "apr" / "asap7_tech.lef")
62
+ for tool in ('openroad', 'klayout', 'magic'):
63
+ self.add_aprtechfileset(tool)
64
+
65
+ with self.active_fileset("layermap"):
66
+ self.add_file(pdk_path / "apr" / "asap7.layermap", filetype="layermap")
67
+
68
+ with self.active_fileset("models.spice"):
69
+ self.add_file(pdk_path / "spice" / "hspice" / "7nm.lib", filetype="library")
70
+ self.add_devmodelfileset("xyce", "spice")
71
+
72
+ # Klayout setup
73
+ with self.active_fileset("klayout.techmap"):
74
+ self.add_file(pdk_path / "setup" / "klayout" / "asap7.lyt", filetype="layermap")
75
+ self.add_file(pdk_path / "setup" / "klayout" / "asap7.lyp", filetype="display")
76
+ self.add_layermapfileset("klayout", "def", "klayout")
77
+ self.add_displayfileset("klayout")
78
+ self.add_layermapfileset("klayout", "def", "gds", fileset="layermap")
79
+
80
+ self.set_aprroutinglayers(min="M2", max="M7")
81
+
82
+ # OpenROAD setup
83
+ self.set_openroad_rclayers(signal="M3", clock="M3")
84
+
85
+ # Openroad global routing grid derating
86
+ for layer, derate in [
87
+ ('M1', 0.25),
88
+ ('M2', 0.25),
89
+ ('M3', 0.25),
90
+ ('M4', 0.25),
91
+ ('M5', 0.25),
92
+ ('M6', 0.25),
93
+ ('M7', 0.25),
94
+ ('M8', 0.25),
95
+ ('M9', 0.25),
96
+ ('Pad', 0.25)]:
97
+ self.set_openroad_globalroutingderating(layer, derate)
98
+
99
+ self.add_openroad_pinlayers(vertical="M5", horizontal="M4")
100
+
101
+ with self.active_fileset("openroad.routing"):
102
+ # Relaxed routing rules
103
+ self.add_file(pdk_path / "apr" / "openroad_relaxed_rules.tcl", filetype="tcl")
104
+
105
+ # PEX
106
+ with self.active_fileset("openroad.pex"):
107
+ self.add_file(pdk_path / "pex" / "openroad" / "typical.tcl", filetype="tcl")
108
+ self.add_file(pdk_path / "pex" / "openroad" / "typical.rules", filetype="openrcx")
109
+
110
+ self.add_pexmodelfileset("openroad", "typical")
111
+ self.add_pexmodelfileset("openroad-openrcx", "typical")
@@ -0,0 +1,123 @@
1
+ from pathlib import Path
2
+
3
+ from lambdapdk import LambdaLibrary
4
+ from lambdapdk.asap7 import ASAP7PDK
5
+
6
+
7
+ class _ASAP7SC7p5Base(LambdaLibrary):
8
+ '''
9
+ ASAP 7 7.5-track standard cell library.
10
+ '''
11
+ def __init__(self, vt, suffix):
12
+ super().__init__()
13
+ self.set_name(f"asap7sc7p5t_{vt}")
14
+
15
+ # version
16
+ self.set_version("28")
17
+
18
+ # PDK
19
+ self.add_asic_pdk(ASAP7PDK())
20
+
21
+ # site name
22
+ self.add_asic_site('asap7sc7p5t')
23
+
24
+ # tie cells
25
+ self.add_asic_celllist('tie', [f"TIEHIx1_ASAP7_75t_{suffix}",
26
+ f"TIELOx1_ASAP7_75t_{suffix}"])
27
+
28
+ # filler
29
+ self.add_asic_celllist('filler', [f"FILLER_ASAP7_75t_{suffix}",
30
+ f"FILLERxp5_ASAP7_75t_{suffix}"])
31
+
32
+ # decap
33
+ self.add_asic_celllist('decap', [f"DECAPx1_ASAP7_75t_{suffix}",
34
+ f"DECAPx2_ASAP7_75t_{suffix}",
35
+ f"DECAPx4_ASAP7_75t_{suffix}",
36
+ f"DECAPx6_ASAP7_75t_{suffix}",
37
+ f"DECAPx10_ASAP7_75t_{suffix}"])
38
+
39
+ # Stupid small cells
40
+ self.add_asic_celllist('dontuse', ["*x1p*_ASAP7*",
41
+ "*xp*_ASAP7*",
42
+ "SDF*",
43
+ "ICG*"])
44
+
45
+ # Tapcell
46
+ self.add_asic_celllist('tap', f"TAPCELL_ASAP7_75t_{suffix}")
47
+
48
+ # Endcap
49
+ self.add_asic_celllist('endcap', f"DECAPx1_ASAP7_75t_{suffix}")
50
+
51
+ lib_path = Path("lambdapdk", "asap7", "libs", f"asap7sc7p5t_{vt}")
52
+
53
+ # General filelists
54
+ with self.active_dataroot("lambdapdk"):
55
+ for corner_name, lib_corner in [
56
+ ('typical', 'TT'),
57
+ ('fast', 'FF'),
58
+ ('slow', 'SS')]:
59
+
60
+ for lib_type in ('AO', 'INVBUF', 'OA', 'SEQ', 'SIMPLE'):
61
+ with self.active_fileset(f"models.timing.{corner_name}.nldm.{lib_type}"):
62
+ self.add_file(lib_path / "nldm" /
63
+ f"asap7sc7p5t_{lib_type}_{suffix}VT_{lib_corner}_nldm.lib.gz")
64
+ self.add_asic_libcornerfileset(corner_name, "nldm")
65
+
66
+ with self.active_fileset("models.spice"):
67
+ self.add_file(lib_path / "netlist" / f"asap7sc7p5t_28_{suffix}.sp")
68
+
69
+ with self.active_fileset("models.physical"):
70
+ self.add_file(lib_path / "lef" / f"asap7sc7p5t_28_{suffix}.lef")
71
+ self.add_file(lib_path / "gds" / f"asap7sc7p5t_28_{suffix}.gds.gz")
72
+ self.add_asic_aprfileset()
73
+
74
+ with self.active_fileset("models.lvs"):
75
+ self.add_file(lib_path / "netlist" / f"asap7sc7p5t_28_{suffix}.cdl")
76
+ self.add_asic_aprfileset()
77
+
78
+ # Setup for yosys
79
+ with self.active_dataroot("lambdapdk"):
80
+ self.set_yosys_driver_cell(f"BUFx2_ASAP7_75t_{suffix}")
81
+ self.set_yosys_buffer_cell(f"BUFx2_ASAP7_75t_{suffix}", "A", "Y")
82
+ self.set_yosys_tielow_cell(f"TIELOx1_ASAP7_75t_{suffix}", "L")
83
+ self.set_yosys_tiehigh_cell(f"TIEHIx1_ASAP7_75t_{suffix}", "H")
84
+
85
+ cap_table = { # BUFx2_ASAP7_75t_, fF
86
+ 'R': "2.308",
87
+ 'L': "2.383",
88
+ 'SL': "2.464"
89
+ }
90
+ self.set_yosys_abc(1, cap_table[suffix])
91
+ self.set_yosys_adder_map(lib_path / "techmap" / "yosys" / "cells_adders.v")
92
+ self.add_yosys_tech_map(lib_path / "techmap" / "yosys" / "cells_latch.v")
93
+
94
+ # Setup for openroad
95
+ with self.active_dataroot("lambdapdk"):
96
+ self.set_openroad_placement_density(0.60)
97
+ self.set_openroad_tielow_cell(f"TIELOx1_ASAP7_75t_{suffix}", "L")
98
+ self.set_openroad_tiehigh_cell(f"TIEHIx1_ASAP7_75t_{suffix}", "H")
99
+ self.set_openroad_macro_placement_halo(5, 5)
100
+ self.set_openroad_tracks_file(lib_path / "apr" / "openroad" / "tracks.tcl")
101
+ self.set_openroad_tapcells_file(lib_path / "apr" / "openroad" / "tapcells.tcl")
102
+ self.add_openroad_global_connect_file(lib_path / "apr" / "openroad" /
103
+ "global_connect.tcl")
104
+ self.add_openroad_power_grid_file(lib_path / "apr" / "openroad" / "pdngen.tcl")
105
+
106
+ # Setup for bambu
107
+ self.set_bambu_device_name("asap7-WC")
108
+ self.set_bambu_clock_multiplier(0.001)
109
+
110
+
111
+ class ASAP7SC7p5RVT(_ASAP7SC7p5Base):
112
+ def __init__(self):
113
+ super().__init__("rvt", "R")
114
+
115
+
116
+ class ASAP7SC7p5LVT(_ASAP7SC7p5Base):
117
+ def __init__(self):
118
+ super().__init__("lvt", "L")
119
+
120
+
121
+ class ASAP7SC7p5SLVT(_ASAP7SC7p5Base):
122
+ def __init__(self):
123
+ super().__init__("slvt", "SL")
@@ -0,0 +1,26 @@
1
+ from pathlib import Path
2
+
3
+ from lambdapdk import LambdaLibrary
4
+ from lambdapdk.asap7 import ASAP7PDK
5
+
6
+
7
+ class FakeIO7Library(LambdaLibrary):
8
+ '''
9
+ ASAP7 Fake I/O library.
10
+ '''
11
+ def __init__(self):
12
+ super().__init__()
13
+ self.set_name("fakeio7")
14
+
15
+ self.add_asic_pdk(ASAP7PDK())
16
+
17
+ path_base = Path("lambdapdk", "asap7", "libs", "fakeio7")
18
+
19
+ with self.active_dataroot("lambdapdk"):
20
+ with self.active_fileset("models.physical"):
21
+ self.add_file(path_base / "lef" / "fakeio7.lef")
22
+ self.add_asic_aprfileset()
23
+
24
+ with self.active_fileset("models.blackbox"):
25
+ self.add_file(path_base / "blackbox" / "model.v")
26
+ self.add_yosys_blackbox_fileset("models.blackbox")
@@ -0,0 +1,22 @@
1
+ from pathlib import Path
2
+
3
+ from lambdapdk import LambdaLibrary
4
+ from lambdapdk.asap7 import ASAP7PDK
5
+
6
+
7
+ class FakeKit7Library(LambdaLibrary):
8
+ '''
9
+ ASAP7 Fake Chip Collatoral library.
10
+ '''
11
+ def __init__(self):
12
+ super().__init__()
13
+ self.set_name("fakekit7")
14
+
15
+ self.add_asic_pdk(ASAP7PDK())
16
+
17
+ path_base = Path("lambdapdk", "asap7", "libs", "fakekit7")
18
+
19
+ with self.active_dataroot("lambdapdk"):
20
+ with self.active_fileset("models.physical"):
21
+ self.add_file(path_base / "lef" / "tsv.lef")
22
+ self.add_asic_aprfileset()