lambdapdk 0.1.35__tar.gz → 0.1.37__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.35/lambdapdk.egg-info → lambdapdk-0.1.37}/PKG-INFO +3 -3
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/__init__.py +1 -1
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/asap7/__init__.py +1 -1
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/asap7/libs/asap7sc7p5t.py +2 -2
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/freepdk45/__init__.py +1 -1
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/freepdk45/libs/nangate45.py +1 -1
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/gf180/__init__.py +43 -8
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/gf180/libs/gf180mcu.py +1 -1
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/ihp130/__init__.py +16 -2
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/ihp130/libs/sg13g2_stdcell.py +5 -2
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/sky130/__init__.py +1 -1
- {lambdapdk-0.1.35 → lambdapdk-0.1.37/lambdapdk.egg-info}/PKG-INFO +3 -3
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk.egg-info/requires.txt +2 -2
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/pyproject.toml +2 -2
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/tests/test_lambda.py +13 -8
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/LICENSE +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/MANIFEST.in +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/README.md +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/asap7/libs/fakeio7.py +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/asap7/libs/fakeram7.py +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/freepdk45/libs/fakeram45.py +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/gf180/libs/gf180io.py +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/gf180/libs/gf180sram.py +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/ihp130/libs/sg13g2_sram.py +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/sky130/libs/sky130io.py +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/sky130/libs/sky130sc.py +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/sky130/libs/sky130sram.py +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk.egg-info/SOURCES.txt +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk.egg-info/dependency_links.txt +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk.egg-info/top_level.txt +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/setup.cfg +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/tests/test_getters.py +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/tests/test_local_detect.py +0 -0
- {lambdapdk-0.1.35 → lambdapdk-0.1.37}/tests/test_paths.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: lambdapdk
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.37
|
|
4
4
|
Summary: Library of open source Process Design Kits
|
|
5
5
|
Author: Zero ASIC
|
|
6
6
|
License: Apache License
|
|
@@ -203,8 +203,8 @@ Provides-Extra: test
|
|
|
203
203
|
Requires-Dist: flake8==7.1.1; extra == "test"
|
|
204
204
|
Requires-Dist: pytest==8.3.3; extra == "test"
|
|
205
205
|
Requires-Dist: pytest-timeout==2.3.1; extra == "test"
|
|
206
|
-
Requires-Dist: tclint==0.4.
|
|
207
|
-
Requires-Dist: lambdalib==0.
|
|
206
|
+
Requires-Dist: tclint==0.4.2; extra == "test"
|
|
207
|
+
Requires-Dist: lambdalib==0.3.0; extra == "test"
|
|
208
208
|
Requires-Dist: sc-leflib==0.4.0; extra == "test"
|
|
209
209
|
|
|
210
210
|
# Lambdapdk Introduction
|
|
@@ -62,8 +62,8 @@ def _setup_lib(libname, suffix):
|
|
|
62
62
|
|
|
63
63
|
# decap
|
|
64
64
|
lib.add('asic', 'cells', 'decap', [f"DECAPx1_ASAP7_75t_{suffix}",
|
|
65
|
-
f"
|
|
66
|
-
f"
|
|
65
|
+
f"DECAPx2_ASAP7_75t_{suffix}",
|
|
66
|
+
f"DECAPx4_ASAP7_75t_{suffix}",
|
|
67
67
|
f"DECAPx6_ASAP7_75t_{suffix}",
|
|
68
68
|
f"DECAPx10_ASAP7_75t_{suffix}"])
|
|
69
69
|
|
|
@@ -102,13 +102,7 @@ def setup():
|
|
|
102
102
|
if layer == pdk.get('pdk', process, 'maxlayer', stackup):
|
|
103
103
|
break
|
|
104
104
|
|
|
105
|
-
if max_layer ==
|
|
106
|
-
pdk.set('pdk', process, 'var', 'openroad', 'rclayer_signal', stackup, 'Metal2')
|
|
107
|
-
pdk.set('pdk', process, 'var', 'openroad', 'rclayer_clock', stackup, 'Metal2')
|
|
108
|
-
|
|
109
|
-
pdk.set('pdk', process, 'var', 'openroad', 'pin_layer_vertical', stackup, 'Metal2')
|
|
110
|
-
pdk.set('pdk', process, 'var', 'openroad', 'pin_layer_horizontal', stackup, 'Metal1')
|
|
111
|
-
elif max_layer == 3:
|
|
105
|
+
if max_layer == 3:
|
|
112
106
|
pdk.set('pdk', process, 'var', 'openroad', 'rclayer_signal', stackup, 'Metal2')
|
|
113
107
|
pdk.set('pdk', process, 'var', 'openroad', 'rclayer_clock', stackup, 'Metal2')
|
|
114
108
|
|
|
@@ -137,6 +131,47 @@ def setup():
|
|
|
137
131
|
pdk.set('pdk', process, 'pexmodel', 'openroad-openrcx', stackup, corner,
|
|
138
132
|
pdkdir + '/pex/openroad/' + base_name + '.rules')
|
|
139
133
|
|
|
134
|
+
# DRC
|
|
135
|
+
metal_level, _, metal_top = stackup.split('_')
|
|
136
|
+
drcs = {
|
|
137
|
+
"drc": pdkdir + '/setup/klayout/drc/gf180mcu.drc',
|
|
138
|
+
"drc_feol": pdkdir + '/setup/klayout/drc/gf180mcu.drc',
|
|
139
|
+
"drc_beol": pdkdir + '/setup/klayout/drc/gf180mcu.drc',
|
|
140
|
+
"antenna": pdkdir + '/setup/klayout/drc/gf180mcu_antenna.drc',
|
|
141
|
+
"density": pdkdir + '/setup/klayout/drc/gf180mcu_density.drc'
|
|
142
|
+
}
|
|
143
|
+
for drc, runset in drcs.items():
|
|
144
|
+
pdk.set('pdk', process, 'drc', 'runset', 'klayout', stackup, drc, runset)
|
|
145
|
+
|
|
146
|
+
key = f'drc_params:{drc}'
|
|
147
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'input=<input>')
|
|
148
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'topcell=<topcell>')
|
|
149
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'report=<report>')
|
|
150
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'thr=<threads>')
|
|
151
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'run_mode=flat')
|
|
152
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'offgrid=true')
|
|
153
|
+
|
|
154
|
+
if drc in ('drc', 'drc_feol', 'drc_beol'):
|
|
155
|
+
feol = 'true'
|
|
156
|
+
beol = 'true'
|
|
157
|
+
if drc == 'drc_feol':
|
|
158
|
+
beol = 'false'
|
|
159
|
+
if drc == 'drc_beol':
|
|
160
|
+
feol = 'false'
|
|
161
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key,
|
|
162
|
+
f'feol={feol}')
|
|
163
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key,
|
|
164
|
+
f'beol={beol}')
|
|
165
|
+
|
|
166
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key,
|
|
167
|
+
f'metal_top={metal_top}')
|
|
168
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key,
|
|
169
|
+
f'metal_level={metal_level}')
|
|
170
|
+
if max_layer == 3:
|
|
171
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'mim_option=A')
|
|
172
|
+
elif max_layer == 4 or max_layer == 5:
|
|
173
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'mim_option=B')
|
|
174
|
+
|
|
140
175
|
pdk.add('pdk', process, 'var', 'klayout', 'hide_layers', stackup, 'Dualgate')
|
|
141
176
|
pdk.add('pdk', process, 'var', 'klayout', 'hide_layers', stackup, 'V5_XTOR')
|
|
142
177
|
pdk.add('pdk', process, 'var', 'klayout', 'hide_layers', stackup, 'PR_bndry')
|
|
@@ -146,6 +181,6 @@ def setup():
|
|
|
146
181
|
|
|
147
182
|
#########################
|
|
148
183
|
if __name__ == "__main__":
|
|
149
|
-
pdk = setup(
|
|
184
|
+
pdk = setup()
|
|
150
185
|
pdk.write_manifest(f'{pdk.top()}.json')
|
|
151
186
|
pdk.check_filepaths()
|
|
@@ -4,7 +4,7 @@ import siliconcompiler
|
|
|
4
4
|
from lambdapdk import register_data_source
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
pdk_rev = '
|
|
7
|
+
pdk_rev = '035037f6312851414e4bb5daa5a9d18975c768b3'
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def register_ihp130_data_source(chip):
|
|
@@ -118,6 +118,19 @@ def setup():
|
|
|
118
118
|
pdk.set('pdk', process, 'pexmodel', 'openroad-openrcx', stackup, corner,
|
|
119
119
|
lpdkdir + '/pex/openroad/' + corner + '.rules', package='lambdapdk')
|
|
120
120
|
|
|
121
|
+
# DRC
|
|
122
|
+
drcs = {
|
|
123
|
+
"maximal": 'ihp-sg13g2/libs.tech/klayout/tech/drc/sg13g2_maximal.lydrc',
|
|
124
|
+
"minimal": 'ihp-sg13g2/libs.tech/klayout/tech/drc/sg13g2_minimal.lydrc'
|
|
125
|
+
}
|
|
126
|
+
for drc, runset in drcs.items():
|
|
127
|
+
pdk.set('pdk', process, 'drc', 'runset', 'klayout', stackup, drc, runset)
|
|
128
|
+
|
|
129
|
+
key = f'drc_params:{drc}'
|
|
130
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'in_gds=<input>')
|
|
131
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'cell=<topcell>')
|
|
132
|
+
pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'report_file=<report>')
|
|
133
|
+
|
|
121
134
|
# Documentation
|
|
122
135
|
pdk.set('pdk', process, 'doc', 'overview',
|
|
123
136
|
'ihp-sg13g2/libs.doc/doc/SG13G2_os_process_spec.pdf')
|
|
@@ -129,5 +142,6 @@ def setup():
|
|
|
129
142
|
|
|
130
143
|
#########################
|
|
131
144
|
if __name__ == "__main__":
|
|
132
|
-
pdk = setup(
|
|
145
|
+
pdk = setup()
|
|
133
146
|
pdk.write_manifest(f'{pdk.top()}.json')
|
|
147
|
+
pdk.check_filepaths()
|
|
@@ -70,7 +70,9 @@ def setup():
|
|
|
70
70
|
|
|
71
71
|
# filler
|
|
72
72
|
lib.add('asic', 'cells', 'filler', ["sg13g2_fill_1",
|
|
73
|
-
"sg13g2_fill_2"
|
|
73
|
+
"sg13g2_fill_2",
|
|
74
|
+
"sg13g2_fill_4",
|
|
75
|
+
"sg13g2_fill_8"])
|
|
74
76
|
|
|
75
77
|
# decap
|
|
76
78
|
lib.add('asic', 'cells', 'decap', ["sg13g2_decap_4",
|
|
@@ -97,6 +99,7 @@ def setup():
|
|
|
97
99
|
lib.set('option', 'var', 'openroad_pad_detail_place', '0')
|
|
98
100
|
lib.set('option', 'var', 'openroad_macro_place_halo', ['40', '40'])
|
|
99
101
|
lib.set('option', 'var', 'openroad_macro_place_channel', ['80', '80'])
|
|
102
|
+
lib.set('option', 'var', 'openroad_dpl_use_decap_fillers', False)
|
|
100
103
|
|
|
101
104
|
lib.set('option', 'file', 'openroad_tapcells', libdir + '/apr/openroad/tapcell.tcl',
|
|
102
105
|
package='lambdapdk')
|
|
@@ -131,5 +134,5 @@ def setup():
|
|
|
131
134
|
|
|
132
135
|
#########################
|
|
133
136
|
if __name__ == "__main__":
|
|
134
|
-
lib = setup(
|
|
137
|
+
lib = setup()
|
|
135
138
|
lib.write_manifest(f'{lib.top()}.json')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: lambdapdk
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.37
|
|
4
4
|
Summary: Library of open source Process Design Kits
|
|
5
5
|
Author: Zero ASIC
|
|
6
6
|
License: Apache License
|
|
@@ -203,8 +203,8 @@ Provides-Extra: test
|
|
|
203
203
|
Requires-Dist: flake8==7.1.1; extra == "test"
|
|
204
204
|
Requires-Dist: pytest==8.3.3; extra == "test"
|
|
205
205
|
Requires-Dist: pytest-timeout==2.3.1; extra == "test"
|
|
206
|
-
Requires-Dist: tclint==0.4.
|
|
207
|
-
Requires-Dist: lambdalib==0.
|
|
206
|
+
Requires-Dist: tclint==0.4.2; extra == "test"
|
|
207
|
+
Requires-Dist: lambdalib==0.3.0; extra == "test"
|
|
208
208
|
Requires-Dist: sc-leflib==0.4.0; extra == "test"
|
|
209
209
|
|
|
210
210
|
# Lambdapdk Introduction
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import pytest
|
|
2
|
+
import os
|
|
2
3
|
from siliconcompiler import Chip
|
|
3
4
|
import lambdalib
|
|
4
5
|
|
|
@@ -16,7 +17,7 @@ from lambdapdk.ihp130.libs import sg13g2_stdcell, sg13g2_sram
|
|
|
16
17
|
(gf180mcu, 'lambdapdk/gf180/libs/{lib_name}/lambda/auxlib'),
|
|
17
18
|
(sg13g2_stdcell, 'lambdapdk/ihp130/libs/{lib_name}/lambda/auxlib')
|
|
18
19
|
])
|
|
19
|
-
def test_la_auxlib(module, path):
|
|
20
|
+
def test_la_auxlib(module, path, rootdir):
|
|
20
21
|
libs = module.setup()
|
|
21
22
|
if not isinstance(libs, list):
|
|
22
23
|
libs = [libs]
|
|
@@ -24,7 +25,8 @@ def test_la_auxlib(module, path):
|
|
|
24
25
|
lib_name = lib.design
|
|
25
26
|
if "lambdalib" in lib_name:
|
|
26
27
|
continue
|
|
27
|
-
assert lambdalib.check(
|
|
28
|
+
assert lambdalib.check(
|
|
29
|
+
os.path.join(rootdir, path.format(lib_name=lib_name)), 'auxlib')
|
|
28
30
|
|
|
29
31
|
|
|
30
32
|
@pytest.mark.parametrize('module,path', [
|
|
@@ -34,7 +36,7 @@ def test_la_auxlib(module, path):
|
|
|
34
36
|
(gf180mcu, 'lambdapdk/gf180/libs/{lib_name}/lambda/stdlib'),
|
|
35
37
|
(sg13g2_stdcell, 'lambdapdk/ihp130/libs/{lib_name}/lambda/stdlib')
|
|
36
38
|
])
|
|
37
|
-
def test_la_stdlib(module, path):
|
|
39
|
+
def test_la_stdlib(module, path, rootdir):
|
|
38
40
|
libs = module.setup()
|
|
39
41
|
if not isinstance(libs, list):
|
|
40
42
|
libs = [libs]
|
|
@@ -42,7 +44,8 @@ def test_la_stdlib(module, path):
|
|
|
42
44
|
lib_name = lib.design
|
|
43
45
|
if "lambdalib" in lib_name:
|
|
44
46
|
continue
|
|
45
|
-
assert lambdalib.check(
|
|
47
|
+
assert lambdalib.check(
|
|
48
|
+
os.path.join(rootdir, path.format(lib_name=lib_name)), 'stdlib')
|
|
46
49
|
|
|
47
50
|
|
|
48
51
|
@pytest.mark.parametrize('path', [
|
|
@@ -52,8 +55,9 @@ def test_la_stdlib(module, path):
|
|
|
52
55
|
'lambdapdk/gf180/libs/gf180mcu_fd_ip_sram/lambda',
|
|
53
56
|
'lambdapdk/ihp130/libs/sg13g2_sram/lambda',
|
|
54
57
|
])
|
|
55
|
-
def test_la_ramlib(path):
|
|
56
|
-
assert lambdalib.check(
|
|
58
|
+
def test_la_ramlib(path, rootdir):
|
|
59
|
+
assert lambdalib.check(
|
|
60
|
+
os.path.join(rootdir, path), 'ramlib')
|
|
57
61
|
|
|
58
62
|
|
|
59
63
|
@pytest.mark.parametrize('path', [
|
|
@@ -61,8 +65,9 @@ def test_la_ramlib(path):
|
|
|
61
65
|
'lambdapdk/gf180/libs/gf180mcu_fd_io/lambda',
|
|
62
66
|
'lambdapdk/asap7/libs/fakeio7/lambda',
|
|
63
67
|
])
|
|
64
|
-
def test_la_iolib(path):
|
|
65
|
-
assert lambdalib.check(
|
|
68
|
+
def test_la_iolib(path, rootdir):
|
|
69
|
+
assert lambdalib.check(
|
|
70
|
+
os.path.join(rootdir, path), 'iolib')
|
|
66
71
|
|
|
67
72
|
|
|
68
73
|
@pytest.mark.parametrize('module', [
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|