lambdapdk 0.1.55__tar.gz → 0.2.0__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.
- {lambdapdk-0.1.55/lambdapdk.egg-info → lambdapdk-0.2.0}/PKG-INFO +6 -6
- lambdapdk-0.2.0/lambdapdk/__init__.py +492 -0
- lambdapdk-0.2.0/lambdapdk/asap7/__init__.py +108 -0
- lambdapdk-0.2.0/lambdapdk/asap7/libs/asap7sc7p5t.py +127 -0
- lambdapdk-0.2.0/lambdapdk/asap7/libs/fakeio7.py +273 -0
- lambdapdk-0.2.0/lambdapdk/asap7/libs/fakekit7.py +22 -0
- lambdapdk-0.2.0/lambdapdk/asap7/libs/fakeram7.py +243 -0
- lambdapdk-0.2.0/lambdapdk/freepdk45/__init__.py +78 -0
- lambdapdk-0.2.0/lambdapdk/freepdk45/libs/fakeram45.py +84 -0
- lambdapdk-0.2.0/lambdapdk/freepdk45/libs/nangate45.py +95 -0
- lambdapdk-0.2.0/lambdapdk/gf180/__init__.py +271 -0
- lambdapdk-0.2.0/lambdapdk/gf180/libs/gf180io.py +749 -0
- lambdapdk-0.2.0/lambdapdk/gf180/libs/gf180mcu.py +213 -0
- lambdapdk-0.2.0/lambdapdk/gf180/libs/gf180sram.py +123 -0
- lambdapdk-0.2.0/lambdapdk/ihp130/__init__.py +112 -0
- lambdapdk-0.2.0/lambdapdk/ihp130/libs/sg13g2_io.py +466 -0
- lambdapdk-0.2.0/lambdapdk/ihp130/libs/sg13g2_sram.py +97 -0
- lambdapdk-0.2.0/lambdapdk/ihp130/libs/sg13g2_stdcell.py +121 -0
- lambdapdk-0.2.0/lambdapdk/interposer/__init__.py +147 -0
- lambdapdk-0.2.0/lambdapdk/interposer/libs/bumps.py +46 -0
- lambdapdk-0.2.0/lambdapdk/sky130/__init__.py +101 -0
- lambdapdk-0.2.0/lambdapdk/sky130/libs/sky130io.py +264 -0
- lambdapdk-0.2.0/lambdapdk/sky130/libs/sky130sc.py +179 -0
- lambdapdk-0.2.0/lambdapdk/sky130/libs/sky130sram.py +58 -0
- {lambdapdk-0.1.55 → lambdapdk-0.2.0/lambdapdk.egg-info}/PKG-INFO +6 -6
- {lambdapdk-0.1.55 → lambdapdk-0.2.0}/lambdapdk.egg-info/SOURCES.txt +0 -1
- lambdapdk-0.2.0/lambdapdk.egg-info/entry_points.txt +2 -0
- lambdapdk-0.2.0/lambdapdk.egg-info/requires.txt +10 -0
- {lambdapdk-0.1.55 → lambdapdk-0.2.0}/pyproject.toml +5 -7
- lambdapdk-0.2.0/tests/test_getters.py +9 -0
- lambdapdk-0.2.0/tests/test_lambda.py +92 -0
- lambdapdk-0.2.0/tests/test_paths.py +39 -0
- lambdapdk-0.1.55/lambdapdk/__init__.py +0 -161
- lambdapdk-0.1.55/lambdapdk/asap7/__init__.py +0 -134
- lambdapdk-0.1.55/lambdapdk/asap7/libs/asap7sc7p5t.py +0 -162
- lambdapdk-0.1.55/lambdapdk/asap7/libs/fakeio7.py +0 -35
- lambdapdk-0.1.55/lambdapdk/asap7/libs/fakekit7.py +0 -27
- lambdapdk-0.1.55/lambdapdk/asap7/libs/fakeram7.py +0 -43
- lambdapdk-0.1.55/lambdapdk/freepdk45/__init__.py +0 -108
- lambdapdk-0.1.55/lambdapdk/freepdk45/libs/fakeram45.py +0 -36
- lambdapdk-0.1.55/lambdapdk/freepdk45/libs/nangate45.py +0 -130
- lambdapdk-0.1.55/lambdapdk/gf180/__init__.py +0 -186
- lambdapdk-0.1.55/lambdapdk/gf180/libs/gf180io.py +0 -73
- lambdapdk-0.1.55/lambdapdk/gf180/libs/gf180mcu.py +0 -163
- lambdapdk-0.1.55/lambdapdk/gf180/libs/gf180sram.py +0 -63
- lambdapdk-0.1.55/lambdapdk/ihp130/__init__.py +0 -147
- lambdapdk-0.1.55/lambdapdk/ihp130/libs/sg13g2_io.py +0 -57
- lambdapdk-0.1.55/lambdapdk/ihp130/libs/sg13g2_sram.py +0 -52
- lambdapdk-0.1.55/lambdapdk/ihp130/libs/sg13g2_stdcell.py +0 -139
- lambdapdk-0.1.55/lambdapdk/interposer/__init__.py +0 -111
- lambdapdk-0.1.55/lambdapdk/interposer/libs/bumps.py +0 -31
- lambdapdk-0.1.55/lambdapdk/sky130/__init__.py +0 -123
- lambdapdk-0.1.55/lambdapdk/sky130/libs/sky130io.py +0 -53
- lambdapdk-0.1.55/lambdapdk/sky130/libs/sky130sc.py +0 -211
- lambdapdk-0.1.55/lambdapdk/sky130/libs/sky130sram.py +0 -45
- lambdapdk-0.1.55/lambdapdk.egg-info/entry_points.txt +0 -4
- lambdapdk-0.1.55/lambdapdk.egg-info/requires.txt +0 -10
- lambdapdk-0.1.55/tests/test_getters.py +0 -47
- lambdapdk-0.1.55/tests/test_lambda.py +0 -90
- lambdapdk-0.1.55/tests/test_local_detect.py +0 -8
- lambdapdk-0.1.55/tests/test_paths.py +0 -58
- {lambdapdk-0.1.55 → lambdapdk-0.2.0}/LICENSE +0 -0
- {lambdapdk-0.1.55 → lambdapdk-0.2.0}/MANIFEST.in +0 -0
- {lambdapdk-0.1.55 → lambdapdk-0.2.0}/README.md +0 -0
- {lambdapdk-0.1.55 → lambdapdk-0.2.0}/lambdapdk/interposer/_generator.py +0 -0
- {lambdapdk-0.1.55 → lambdapdk-0.2.0}/lambdapdk.egg-info/dependency_links.txt +0 -0
- {lambdapdk-0.1.55 → lambdapdk-0.2.0}/lambdapdk.egg-info/top_level.txt +0 -0
- {lambdapdk-0.1.55 → lambdapdk-0.2.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lambdapdk
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
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.
|
|
201
|
+
Requires-Dist: siliconcompiler>=0.35.0
|
|
202
|
+
Requires-Dist: lambdalib>=0.4.0
|
|
202
203
|
Provides-Extra: test
|
|
203
|
-
Requires-Dist: flake8==7.
|
|
204
|
-
Requires-Dist: pytest==8.4.
|
|
204
|
+
Requires-Dist: flake8==7.3.0; extra == "test"
|
|
205
|
+
Requires-Dist: pytest==8.4.2; extra == "test"
|
|
205
206
|
Requires-Dist: pytest-timeout==2.4.0; extra == "test"
|
|
206
|
-
Requires-Dist: tclint==0.
|
|
207
|
-
Requires-Dist: lambdalib==0.3.4; extra == "test"
|
|
207
|
+
Requires-Dist: tclint==0.6.1; 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,492 @@
|
|
|
1
|
+
import os.path
|
|
2
|
+
from siliconcompiler.schema_support.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"
|
|
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
|
+
FakeIO7Lambdalib_la_iovdd, \
|
|
145
|
+
FakeIO7Lambdalib_la_iopoc, \
|
|
146
|
+
FakeIO7Lambdalib_la_iocorner, \
|
|
147
|
+
FakeIO7Lambdalib_la_iotxdiff, \
|
|
148
|
+
FakeIO7Lambdalib_la_ioanalog, \
|
|
149
|
+
FakeIO7Lambdalib_la_ioinput, \
|
|
150
|
+
FakeIO7Lambdalib_la_iocut, \
|
|
151
|
+
FakeIO7Lambdalib_la_iovss, \
|
|
152
|
+
FakeIO7Lambdalib_la_iovddio, \
|
|
153
|
+
FakeIO7Lambdalib_la_iovssio, \
|
|
154
|
+
FakeIO7Lambdalib_la_iovdda, \
|
|
155
|
+
FakeIO7Lambdalib_la_iovssa, \
|
|
156
|
+
FakeIO7Lambdalib_la_ioclamp, \
|
|
157
|
+
FakeIO7Lambdalib_la_iorxdiff, \
|
|
158
|
+
FakeIO7Lambdalib_la_iobidir
|
|
159
|
+
from lambdapdk.asap7.libs.fakekit7 import FakeKit7Library
|
|
160
|
+
from lambdapdk.asap7.libs.fakeram7 import \
|
|
161
|
+
FakeRAM7_dp_64x32, \
|
|
162
|
+
FakeRAM7_sp_64x32, \
|
|
163
|
+
FakeRAM7_dp_128x32, \
|
|
164
|
+
FakeRAM7_sp_128x32, \
|
|
165
|
+
FakeRAM7_dp_256x32, \
|
|
166
|
+
FakeRAM7_sp_256x32, \
|
|
167
|
+
FakeRAM7_dp_256x64, \
|
|
168
|
+
FakeRAM7_sp_256x64, \
|
|
169
|
+
FakeRAM7_dp_512x32, \
|
|
170
|
+
FakeRAM7_sp_512x32, \
|
|
171
|
+
FakeRAM7_dp_512x64, \
|
|
172
|
+
FakeRAM7_sp_512x64, \
|
|
173
|
+
FakeRAM7_dp_512x128, \
|
|
174
|
+
FakeRAM7_sp_512x128, \
|
|
175
|
+
FakeRAM7_dp_1024x32, \
|
|
176
|
+
FakeRAM7_sp_1024x32, \
|
|
177
|
+
FakeRAM7_dp_1024x64, \
|
|
178
|
+
FakeRAM7_sp_1024x64, \
|
|
179
|
+
FakeRAM7_dp_2048x32, \
|
|
180
|
+
FakeRAM7_sp_2048x32, \
|
|
181
|
+
FakeRAM7_dp_2048x64, \
|
|
182
|
+
FakeRAM7_sp_2048x64, \
|
|
183
|
+
FakeRAM7_dp_4096x32, \
|
|
184
|
+
FakeRAM7_sp_4096x32, \
|
|
185
|
+
FakeRAM7_dp_4096x64, \
|
|
186
|
+
FakeRAM7_sp_4096x64, \
|
|
187
|
+
FakeRAM7_dp_8192x32, \
|
|
188
|
+
FakeRAM7_sp_8192x32, \
|
|
189
|
+
FakeRAM7_dp_8192x64, \
|
|
190
|
+
FakeRAM7_sp_8192x64, \
|
|
191
|
+
FakeRAM7Lambdalib_SinglePort, \
|
|
192
|
+
FakeRAM7Lambdalib_DoublePort
|
|
193
|
+
from lambdapdk.freepdk45.libs.nangate45 import Nangate45
|
|
194
|
+
from lambdapdk.freepdk45.libs.fakeram45 import \
|
|
195
|
+
FakeRAM45_64x32, \
|
|
196
|
+
FakeRAM45_128x32, \
|
|
197
|
+
FakeRAM45_256x32, \
|
|
198
|
+
FakeRAM45_256x64, \
|
|
199
|
+
FakeRAM45_512x32, \
|
|
200
|
+
FakeRAM45_512x64, \
|
|
201
|
+
FakeRAM45Lambdalib_SinglePort
|
|
202
|
+
from lambdapdk.gf180.libs.gf180io import GF180_IO_3LM, GF180_IO_4LM, GF180_IO_5LM, \
|
|
203
|
+
GF180Lambdalib_la_iovdd_3LM, \
|
|
204
|
+
GF180Lambdalib_la_iocorner_3LM, \
|
|
205
|
+
GF180Lambdalib_la_iotxdiff_3LM, \
|
|
206
|
+
GF180Lambdalib_la_ioanalog_3LM, \
|
|
207
|
+
GF180Lambdalib_la_ioinput_3LM, \
|
|
208
|
+
GF180Lambdalib_la_iocut_3LM, \
|
|
209
|
+
GF180Lambdalib_la_iovss_3LM, \
|
|
210
|
+
GF180Lambdalib_la_iovddio_3LM, \
|
|
211
|
+
GF180Lambdalib_la_iovssio_3LM, \
|
|
212
|
+
GF180Lambdalib_la_iovdda_3LM, \
|
|
213
|
+
GF180Lambdalib_la_iovssa_3LM, \
|
|
214
|
+
GF180Lambdalib_la_iorxdiff_3LM, \
|
|
215
|
+
GF180Lambdalib_la_iobidir_3LM, \
|
|
216
|
+
GF180Lambdalib_la_iovdd_4LM, \
|
|
217
|
+
GF180Lambdalib_la_iocorner_4LM, \
|
|
218
|
+
GF180Lambdalib_la_iotxdiff_4LM, \
|
|
219
|
+
GF180Lambdalib_la_ioanalog_4LM, \
|
|
220
|
+
GF180Lambdalib_la_ioinput_4LM, \
|
|
221
|
+
GF180Lambdalib_la_iocut_4LM, \
|
|
222
|
+
GF180Lambdalib_la_iovss_4LM, \
|
|
223
|
+
GF180Lambdalib_la_iovddio_4LM, \
|
|
224
|
+
GF180Lambdalib_la_iovssio_4LM, \
|
|
225
|
+
GF180Lambdalib_la_iovdda_4LM, \
|
|
226
|
+
GF180Lambdalib_la_iovssa_4LM, \
|
|
227
|
+
GF180Lambdalib_la_iorxdiff_4LM, \
|
|
228
|
+
GF180Lambdalib_la_iobidir_4LM, \
|
|
229
|
+
GF180Lambdalib_la_iovdd_5LM, \
|
|
230
|
+
GF180Lambdalib_la_iocorner_5LM, \
|
|
231
|
+
GF180Lambdalib_la_iotxdiff_5LM, \
|
|
232
|
+
GF180Lambdalib_la_ioanalog_5LM, \
|
|
233
|
+
GF180Lambdalib_la_ioinput_5LM, \
|
|
234
|
+
GF180Lambdalib_la_iocut_5LM, \
|
|
235
|
+
GF180Lambdalib_la_iovss_5LM, \
|
|
236
|
+
GF180Lambdalib_la_iovddio_5LM, \
|
|
237
|
+
GF180Lambdalib_la_iovssio_5LM, \
|
|
238
|
+
GF180Lambdalib_la_iovdda_5LM, \
|
|
239
|
+
GF180Lambdalib_la_iovssa_5LM, \
|
|
240
|
+
GF180Lambdalib_la_iorxdiff_5LM, \
|
|
241
|
+
GF180Lambdalib_la_iobidir_5LM
|
|
242
|
+
from lambdapdk.gf180.libs.gf180mcu import GF180_MCU_7T_3LMLibrary, \
|
|
243
|
+
GF180_MCU_7T_4LMLibrary, \
|
|
244
|
+
GF180_MCU_7T_5LMLibrary, \
|
|
245
|
+
GF180_MCU_7T_6LMLibrary, \
|
|
246
|
+
GF180_MCU_9T_3LMLibrary, \
|
|
247
|
+
GF180_MCU_9T_4LMLibrary, \
|
|
248
|
+
GF180_MCU_9T_5LMLibrary, \
|
|
249
|
+
GF180_MCU_9T_6LMLibrary
|
|
250
|
+
from lambdapdk.gf180.libs.gf180sram import GF180_SRAM_64x8, \
|
|
251
|
+
GF180_SRAM_128x8, \
|
|
252
|
+
GF180_SRAM_256x8, \
|
|
253
|
+
GF180_SRAM_512x8, \
|
|
254
|
+
GF180Lambdalib_SinglePort
|
|
255
|
+
from lambdapdk.ihp130.libs.sg13g2_io import IHP130_IO_1p2, IHP130_IO_1p5, \
|
|
256
|
+
IHP130Lambdalib_la_iovdd_1p2, \
|
|
257
|
+
IHP130Lambdalib_la_iocorner_1p2, \
|
|
258
|
+
IHP130Lambdalib_la_iotxdiff_1p2, \
|
|
259
|
+
IHP130Lambdalib_la_ioanalog_1p2, \
|
|
260
|
+
IHP130Lambdalib_la_ioinput_1p2, \
|
|
261
|
+
IHP130Lambdalib_la_iovss_1p2, \
|
|
262
|
+
IHP130Lambdalib_la_iovddio_1p2, \
|
|
263
|
+
IHP130Lambdalib_la_iovssio_1p2, \
|
|
264
|
+
IHP130Lambdalib_la_iovdda_1p2, \
|
|
265
|
+
IHP130Lambdalib_la_iovssa_1p2, \
|
|
266
|
+
IHP130Lambdalib_la_iorxdiff_1p2, \
|
|
267
|
+
IHP130Lambdalib_la_iobidir_1p2, \
|
|
268
|
+
IHP130Lambdalib_la_iovdd_1p5, \
|
|
269
|
+
IHP130Lambdalib_la_iocorner_1p5, \
|
|
270
|
+
IHP130Lambdalib_la_iotxdiff_1p5, \
|
|
271
|
+
IHP130Lambdalib_la_ioanalog_1p5, \
|
|
272
|
+
IHP130Lambdalib_la_ioinput_1p5, \
|
|
273
|
+
IHP130Lambdalib_la_iovss_1p5, \
|
|
274
|
+
IHP130Lambdalib_la_iovddio_1p5, \
|
|
275
|
+
IHP130Lambdalib_la_iovssio_1p5, \
|
|
276
|
+
IHP130Lambdalib_la_iovdda_1p5, \
|
|
277
|
+
IHP130Lambdalib_la_iovssa_1p5, \
|
|
278
|
+
IHP130Lambdalib_la_iorxdiff_1p5, \
|
|
279
|
+
IHP130Lambdalib_la_iobidir_1p5
|
|
280
|
+
from lambdapdk.ihp130.libs.sg13g2_sram import \
|
|
281
|
+
IHP130_SRAM_1024x64, IHP130_SRAM_2048x64, \
|
|
282
|
+
IHP130_SRAM_256x48, IHP130_SRAM_256x64, \
|
|
283
|
+
IHP130_SRAM_512x64, IHP130_SRAM_64x64, \
|
|
284
|
+
IHP130Lambdalib_SinglePort
|
|
285
|
+
from lambdapdk.ihp130.libs.sg13g2_stdcell import IHP130StdCell_1p2, IHP130StdCell_1p5
|
|
286
|
+
from lambdapdk.interposer.libs.bumps import BumpLibrary
|
|
287
|
+
from lambdapdk.sky130.libs.sky130io import Sky130_IOLibrary, \
|
|
288
|
+
Sky130Lambdalib_la_ioanalog, \
|
|
289
|
+
Sky130Lambdalib_la_iobidir, \
|
|
290
|
+
Sky130Lambdalib_la_ioclamp, \
|
|
291
|
+
Sky130Lambdalib_la_iocorner, \
|
|
292
|
+
Sky130Lambdalib_la_ioinput, \
|
|
293
|
+
Sky130Lambdalib_la_iorxdiff, \
|
|
294
|
+
Sky130Lambdalib_la_iotxdiff, \
|
|
295
|
+
Sky130Lambdalib_la_iovdd, \
|
|
296
|
+
Sky130Lambdalib_la_iovdda, \
|
|
297
|
+
Sky130Lambdalib_la_iovddio, \
|
|
298
|
+
Sky130Lambdalib_la_iovss, \
|
|
299
|
+
Sky130Lambdalib_la_iovssa, \
|
|
300
|
+
Sky130Lambdalib_la_iovssio
|
|
301
|
+
from lambdapdk.sky130.libs.sky130sc import Sky130_SCHDLibrary, Sky130_SCHDLLLibrary
|
|
302
|
+
from lambdapdk.sky130.libs.sky130sram import Sky130_SRAM_64x256, Sky130Lambdalib_SinglePort
|
|
303
|
+
|
|
304
|
+
return set([
|
|
305
|
+
ASAP7SC7p5RVT(), ASAP7SC7p5SLVT(), ASAP7SC7p5LVT(),
|
|
306
|
+
FakeIO7Library(), FakeKit7Library(),
|
|
307
|
+
FakeRAM7_dp_64x32(),
|
|
308
|
+
FakeRAM7_sp_64x32(),
|
|
309
|
+
FakeRAM7_dp_128x32(),
|
|
310
|
+
FakeRAM7_sp_128x32(),
|
|
311
|
+
FakeRAM7_dp_256x32(),
|
|
312
|
+
FakeRAM7_sp_256x32(),
|
|
313
|
+
FakeRAM7_dp_256x64(),
|
|
314
|
+
FakeRAM7_sp_256x64(),
|
|
315
|
+
FakeRAM7_dp_512x32(),
|
|
316
|
+
FakeRAM7_sp_512x32(),
|
|
317
|
+
FakeRAM7_dp_512x64(),
|
|
318
|
+
FakeRAM7_sp_512x64(),
|
|
319
|
+
FakeRAM7_dp_512x128(),
|
|
320
|
+
FakeRAM7_sp_512x128(),
|
|
321
|
+
FakeRAM7_dp_1024x32(),
|
|
322
|
+
FakeRAM7_sp_1024x32(),
|
|
323
|
+
FakeRAM7_dp_1024x64(),
|
|
324
|
+
FakeRAM7_sp_1024x64(),
|
|
325
|
+
FakeRAM7_dp_2048x32(),
|
|
326
|
+
FakeRAM7_sp_2048x32(),
|
|
327
|
+
FakeRAM7_dp_2048x64(),
|
|
328
|
+
FakeRAM7_sp_2048x64(),
|
|
329
|
+
FakeRAM7_dp_4096x32(),
|
|
330
|
+
FakeRAM7_sp_4096x32(),
|
|
331
|
+
FakeRAM7_dp_4096x64(),
|
|
332
|
+
FakeRAM7_sp_4096x64(),
|
|
333
|
+
FakeRAM7_dp_8192x32(),
|
|
334
|
+
FakeRAM7_sp_8192x32(),
|
|
335
|
+
FakeRAM7_dp_8192x64(),
|
|
336
|
+
FakeRAM7_sp_8192x64(),
|
|
337
|
+
FakeRAM7Lambdalib_SinglePort(),
|
|
338
|
+
FakeRAM7Lambdalib_DoublePort(),
|
|
339
|
+
Nangate45(),
|
|
340
|
+
FakeRAM45_64x32(),
|
|
341
|
+
FakeRAM45_128x32(),
|
|
342
|
+
FakeRAM45_256x32(),
|
|
343
|
+
FakeRAM45_256x64(),
|
|
344
|
+
FakeRAM45_512x32(),
|
|
345
|
+
FakeRAM45_512x64(),
|
|
346
|
+
FakeRAM45Lambdalib_SinglePort(),
|
|
347
|
+
GF180_IO_3LM(), GF180_IO_4LM(), GF180_IO_5LM(),
|
|
348
|
+
GF180_MCU_7T_3LMLibrary(),
|
|
349
|
+
GF180_MCU_7T_4LMLibrary(),
|
|
350
|
+
GF180_MCU_7T_5LMLibrary(),
|
|
351
|
+
GF180_MCU_7T_6LMLibrary(),
|
|
352
|
+
GF180_MCU_9T_3LMLibrary(),
|
|
353
|
+
GF180_MCU_9T_4LMLibrary(),
|
|
354
|
+
GF180_MCU_9T_5LMLibrary(),
|
|
355
|
+
GF180_MCU_9T_6LMLibrary(),
|
|
356
|
+
GF180_SRAM_64x8(),
|
|
357
|
+
GF180_SRAM_128x8(),
|
|
358
|
+
GF180_SRAM_256x8(),
|
|
359
|
+
GF180_SRAM_512x8(),
|
|
360
|
+
GF180Lambdalib_SinglePort(),
|
|
361
|
+
IHP130_IO_1p2(), IHP130_IO_1p5(),
|
|
362
|
+
IHP130_SRAM_1024x64(), IHP130_SRAM_2048x64(),
|
|
363
|
+
IHP130_SRAM_256x48(), IHP130_SRAM_256x64(),
|
|
364
|
+
IHP130_SRAM_512x64(), IHP130_SRAM_64x64(),
|
|
365
|
+
IHP130Lambdalib_SinglePort(),
|
|
366
|
+
IHP130StdCell_1p2(), IHP130StdCell_1p5(),
|
|
367
|
+
BumpLibrary(),
|
|
368
|
+
Sky130_IOLibrary(),
|
|
369
|
+
Sky130_SCHDLibrary(), Sky130_SCHDLLLibrary(),
|
|
370
|
+
Sky130_SRAM_64x256(), Sky130Lambdalib_SinglePort(),
|
|
371
|
+
Sky130Lambdalib_la_ioanalog(),
|
|
372
|
+
Sky130Lambdalib_la_iobidir(),
|
|
373
|
+
Sky130Lambdalib_la_ioclamp(),
|
|
374
|
+
Sky130Lambdalib_la_iocorner(),
|
|
375
|
+
Sky130Lambdalib_la_ioinput(),
|
|
376
|
+
Sky130Lambdalib_la_iorxdiff(),
|
|
377
|
+
Sky130Lambdalib_la_iotxdiff(),
|
|
378
|
+
Sky130Lambdalib_la_iovdd(),
|
|
379
|
+
Sky130Lambdalib_la_iovdda(),
|
|
380
|
+
Sky130Lambdalib_la_iovddio(),
|
|
381
|
+
Sky130Lambdalib_la_iovss(),
|
|
382
|
+
Sky130Lambdalib_la_iovssa(),
|
|
383
|
+
Sky130Lambdalib_la_iovssio(),
|
|
384
|
+
IHP130Lambdalib_la_iovdd_1p2(),
|
|
385
|
+
IHP130Lambdalib_la_iocorner_1p2(),
|
|
386
|
+
IHP130Lambdalib_la_iotxdiff_1p2(),
|
|
387
|
+
IHP130Lambdalib_la_ioanalog_1p2(),
|
|
388
|
+
IHP130Lambdalib_la_ioinput_1p2(),
|
|
389
|
+
IHP130Lambdalib_la_iovss_1p2(),
|
|
390
|
+
IHP130Lambdalib_la_iovddio_1p2(),
|
|
391
|
+
IHP130Lambdalib_la_iovssio_1p2(),
|
|
392
|
+
IHP130Lambdalib_la_iovdda_1p2(),
|
|
393
|
+
IHP130Lambdalib_la_iovssa_1p2(),
|
|
394
|
+
IHP130Lambdalib_la_iorxdiff_1p2(),
|
|
395
|
+
IHP130Lambdalib_la_iobidir_1p2(),
|
|
396
|
+
IHP130Lambdalib_la_iovdd_1p5(),
|
|
397
|
+
IHP130Lambdalib_la_iocorner_1p5(),
|
|
398
|
+
IHP130Lambdalib_la_iotxdiff_1p5(),
|
|
399
|
+
IHP130Lambdalib_la_ioanalog_1p5(),
|
|
400
|
+
IHP130Lambdalib_la_ioinput_1p5(),
|
|
401
|
+
IHP130Lambdalib_la_iovss_1p5(),
|
|
402
|
+
IHP130Lambdalib_la_iovddio_1p5(),
|
|
403
|
+
IHP130Lambdalib_la_iovssio_1p5(),
|
|
404
|
+
IHP130Lambdalib_la_iovdda_1p5(),
|
|
405
|
+
IHP130Lambdalib_la_iovssa_1p5(),
|
|
406
|
+
IHP130Lambdalib_la_iorxdiff_1p5(),
|
|
407
|
+
IHP130Lambdalib_la_iobidir_1p5(),
|
|
408
|
+
GF180Lambdalib_la_iovdd_3LM(),
|
|
409
|
+
GF180Lambdalib_la_iocorner_3LM(),
|
|
410
|
+
GF180Lambdalib_la_iotxdiff_3LM(),
|
|
411
|
+
GF180Lambdalib_la_ioanalog_3LM(),
|
|
412
|
+
GF180Lambdalib_la_ioinput_3LM(),
|
|
413
|
+
GF180Lambdalib_la_iocut_3LM(),
|
|
414
|
+
GF180Lambdalib_la_iovss_3LM(),
|
|
415
|
+
GF180Lambdalib_la_iovddio_3LM(),
|
|
416
|
+
GF180Lambdalib_la_iovssio_3LM(),
|
|
417
|
+
GF180Lambdalib_la_iovdda_3LM(),
|
|
418
|
+
GF180Lambdalib_la_iovssa_3LM(),
|
|
419
|
+
GF180Lambdalib_la_iorxdiff_3LM(),
|
|
420
|
+
GF180Lambdalib_la_iobidir_3LM(),
|
|
421
|
+
GF180Lambdalib_la_iovdd_4LM(),
|
|
422
|
+
GF180Lambdalib_la_iocorner_4LM(),
|
|
423
|
+
GF180Lambdalib_la_iotxdiff_4LM(),
|
|
424
|
+
GF180Lambdalib_la_ioanalog_4LM(),
|
|
425
|
+
GF180Lambdalib_la_ioinput_4LM(),
|
|
426
|
+
GF180Lambdalib_la_iocut_4LM(),
|
|
427
|
+
GF180Lambdalib_la_iovss_4LM(),
|
|
428
|
+
GF180Lambdalib_la_iovddio_4LM(),
|
|
429
|
+
GF180Lambdalib_la_iovssio_4LM(),
|
|
430
|
+
GF180Lambdalib_la_iovdda_4LM(),
|
|
431
|
+
GF180Lambdalib_la_iovssa_4LM(),
|
|
432
|
+
GF180Lambdalib_la_iorxdiff_4LM(),
|
|
433
|
+
GF180Lambdalib_la_iobidir_4LM(),
|
|
434
|
+
GF180Lambdalib_la_iovdd_5LM(),
|
|
435
|
+
GF180Lambdalib_la_iocorner_5LM(),
|
|
436
|
+
GF180Lambdalib_la_iotxdiff_5LM(),
|
|
437
|
+
GF180Lambdalib_la_ioanalog_5LM(),
|
|
438
|
+
GF180Lambdalib_la_ioinput_5LM(),
|
|
439
|
+
GF180Lambdalib_la_iocut_5LM(),
|
|
440
|
+
GF180Lambdalib_la_iovss_5LM(),
|
|
441
|
+
GF180Lambdalib_la_iovddio_5LM(),
|
|
442
|
+
GF180Lambdalib_la_iovssio_5LM(),
|
|
443
|
+
GF180Lambdalib_la_iovdda_5LM(),
|
|
444
|
+
GF180Lambdalib_la_iovssa_5LM(),
|
|
445
|
+
GF180Lambdalib_la_iorxdiff_5LM(),
|
|
446
|
+
GF180Lambdalib_la_iobidir_5LM(),
|
|
447
|
+
FakeIO7Lambdalib_la_iovdd(),
|
|
448
|
+
FakeIO7Lambdalib_la_iopoc(),
|
|
449
|
+
FakeIO7Lambdalib_la_iocorner(),
|
|
450
|
+
FakeIO7Lambdalib_la_iotxdiff(),
|
|
451
|
+
FakeIO7Lambdalib_la_ioanalog(),
|
|
452
|
+
FakeIO7Lambdalib_la_ioinput(),
|
|
453
|
+
FakeIO7Lambdalib_la_iocut(),
|
|
454
|
+
FakeIO7Lambdalib_la_iovss(),
|
|
455
|
+
FakeIO7Lambdalib_la_iovddio(),
|
|
456
|
+
FakeIO7Lambdalib_la_iovssio(),
|
|
457
|
+
FakeIO7Lambdalib_la_iovdda(),
|
|
458
|
+
FakeIO7Lambdalib_la_iovssa(),
|
|
459
|
+
FakeIO7Lambdalib_la_ioclamp(),
|
|
460
|
+
FakeIO7Lambdalib_la_iorxdiff(),
|
|
461
|
+
FakeIO7Lambdalib_la_iobidir()
|
|
462
|
+
])
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
def get_lib_names():
|
|
466
|
+
'''
|
|
467
|
+
Returns a list of libraries names in lambdapdk
|
|
468
|
+
'''
|
|
469
|
+
|
|
470
|
+
return set([lib.name for lib in get_libs()])
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
def get_docs_codeurl(file=None):
|
|
474
|
+
base_url = f"https://github.com/siliconcompiler/lambdapdk/blob/v{__version__}"
|
|
475
|
+
|
|
476
|
+
if not file:
|
|
477
|
+
return base_url
|
|
478
|
+
|
|
479
|
+
root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
480
|
+
|
|
481
|
+
def relpath(file):
|
|
482
|
+
file = os.path.abspath(file)
|
|
483
|
+
if file.startswith(root):
|
|
484
|
+
return os.path.relpath(file, root)
|
|
485
|
+
return None
|
|
486
|
+
|
|
487
|
+
if os.path.isabs(file):
|
|
488
|
+
file = relpath(file)
|
|
489
|
+
if not file:
|
|
490
|
+
return None
|
|
491
|
+
|
|
492
|
+
return f"{base_url}/{file}"
|
|
@@ -0,0 +1,108 @@
|
|
|
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
|
+
|
|
40
|
+
def __init__(self):
|
|
41
|
+
super().__init__()
|
|
42
|
+
self.set_name("asap7")
|
|
43
|
+
|
|
44
|
+
pdk_path = Path("lambdapdk", "asap7", "base")
|
|
45
|
+
|
|
46
|
+
self.set_foundry("virtual")
|
|
47
|
+
self.package.set_version("r1p7")
|
|
48
|
+
self.set_node(7)
|
|
49
|
+
self.set_stackup("10M")
|
|
50
|
+
self.set_wafersize(300)
|
|
51
|
+
self.set_scribewidth(0.1, 0.1)
|
|
52
|
+
self.set_edgemargin(2)
|
|
53
|
+
self.set_defectdensity(1.25)
|
|
54
|
+
|
|
55
|
+
with self.active_dataroot("lambdapdk"):
|
|
56
|
+
# APR Setup
|
|
57
|
+
with self.active_fileset("views.lef"):
|
|
58
|
+
self.add_file(pdk_path / "apr" / "asap7_tech.lef")
|
|
59
|
+
for tool in ('openroad', 'klayout', 'magic'):
|
|
60
|
+
self.add_aprtechfileset(tool)
|
|
61
|
+
|
|
62
|
+
with self.active_fileset("layermap"):
|
|
63
|
+
self.add_file(pdk_path / "apr" / "asap7.layermap", filetype="layermap")
|
|
64
|
+
|
|
65
|
+
with self.active_fileset("models.spice"):
|
|
66
|
+
self.add_file(pdk_path / "spice" / "hspice" / "7nm.lib", filetype="library")
|
|
67
|
+
self.add_devmodelfileset("xyce", "spice")
|
|
68
|
+
|
|
69
|
+
# Klayout setup
|
|
70
|
+
with self.active_fileset("klayout.techmap"):
|
|
71
|
+
self.add_file(pdk_path / "setup" / "klayout" / "asap7.lyt", filetype="layermap")
|
|
72
|
+
self.add_file(pdk_path / "setup" / "klayout" / "asap7.lyp", filetype="display")
|
|
73
|
+
self.add_layermapfileset("klayout", "def", "klayout")
|
|
74
|
+
self.add_displayfileset("klayout")
|
|
75
|
+
self.add_layermapfileset("klayout", "def", "gds", fileset="layermap")
|
|
76
|
+
|
|
77
|
+
self.set_aprroutinglayers(min="M2", max="M7")
|
|
78
|
+
|
|
79
|
+
# OpenROAD setup
|
|
80
|
+
self.set_openroad_rclayers(signal="M3", clock="M3")
|
|
81
|
+
|
|
82
|
+
# Openroad global routing grid derating
|
|
83
|
+
for layer, derate in [
|
|
84
|
+
('M1', 0.25),
|
|
85
|
+
('M2', 0.25),
|
|
86
|
+
('M3', 0.25),
|
|
87
|
+
('M4', 0.25),
|
|
88
|
+
('M5', 0.25),
|
|
89
|
+
('M6', 0.25),
|
|
90
|
+
('M7', 0.25),
|
|
91
|
+
('M8', 0.25),
|
|
92
|
+
('M9', 0.25),
|
|
93
|
+
('Pad', 0.25)]:
|
|
94
|
+
self.set_openroad_globalroutingderating(layer, derate)
|
|
95
|
+
|
|
96
|
+
self.add_openroad_pinlayers(vertical="M5", horizontal="M4")
|
|
97
|
+
|
|
98
|
+
with self.active_fileset("openroad.routing"):
|
|
99
|
+
# Relaxed routing rules
|
|
100
|
+
self.add_file(pdk_path / "apr" / "openroad_relaxed_rules.tcl", filetype="tcl")
|
|
101
|
+
|
|
102
|
+
# PEX
|
|
103
|
+
with self.active_fileset("openroad.pex"):
|
|
104
|
+
self.add_file(pdk_path / "pex" / "openroad" / "typical.tcl", filetype="tcl")
|
|
105
|
+
self.add_file(pdk_path / "pex" / "openroad" / "typical.rules", filetype="openrcx")
|
|
106
|
+
|
|
107
|
+
self.add_pexmodelfileset("openroad", "typical")
|
|
108
|
+
self.add_pexmodelfileset("openroad-openrcx", "typical")
|