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.
Files changed (34) hide show
  1. {lambdapdk-0.1.35/lambdapdk.egg-info → lambdapdk-0.1.37}/PKG-INFO +3 -3
  2. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/__init__.py +1 -1
  3. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/asap7/__init__.py +1 -1
  4. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/asap7/libs/asap7sc7p5t.py +2 -2
  5. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/freepdk45/__init__.py +1 -1
  6. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/freepdk45/libs/nangate45.py +1 -1
  7. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/gf180/__init__.py +43 -8
  8. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/gf180/libs/gf180mcu.py +1 -1
  9. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/ihp130/__init__.py +16 -2
  10. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/ihp130/libs/sg13g2_stdcell.py +5 -2
  11. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/sky130/__init__.py +1 -1
  12. {lambdapdk-0.1.35 → lambdapdk-0.1.37/lambdapdk.egg-info}/PKG-INFO +3 -3
  13. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk.egg-info/requires.txt +2 -2
  14. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/pyproject.toml +2 -2
  15. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/tests/test_lambda.py +13 -8
  16. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/LICENSE +0 -0
  17. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/MANIFEST.in +0 -0
  18. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/README.md +0 -0
  19. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/asap7/libs/fakeio7.py +0 -0
  20. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/asap7/libs/fakeram7.py +0 -0
  21. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/freepdk45/libs/fakeram45.py +0 -0
  22. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/gf180/libs/gf180io.py +0 -0
  23. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/gf180/libs/gf180sram.py +0 -0
  24. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/ihp130/libs/sg13g2_sram.py +0 -0
  25. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/sky130/libs/sky130io.py +0 -0
  26. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/sky130/libs/sky130sc.py +0 -0
  27. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk/sky130/libs/sky130sram.py +0 -0
  28. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk.egg-info/SOURCES.txt +0 -0
  29. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk.egg-info/dependency_links.txt +0 -0
  30. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/lambdapdk.egg-info/top_level.txt +0 -0
  31. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/setup.cfg +0 -0
  32. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/tests/test_getters.py +0 -0
  33. {lambdapdk-0.1.35 → lambdapdk-0.1.37}/tests/test_local_detect.py +0 -0
  34. {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.35
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.1; extra == "test"
207
- Requires-Dist: lambdalib==0.2.10; extra == "test"
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,7 +1,7 @@
1
1
  import siliconcompiler.package as sc_package
2
2
 
3
3
 
4
- __version__ = "0.1.35"
4
+ __version__ = "0.1.37"
5
5
 
6
6
 
7
7
  def register_data_source(chip):
@@ -125,6 +125,6 @@ def setup():
125
125
 
126
126
  #########################
127
127
  if __name__ == "__main__":
128
- pdk = setup(siliconcompiler.Chip('<pdk>'))
128
+ pdk = setup()
129
129
  register_data_source(pdk)
130
130
  pdk.check_filepaths()
@@ -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"DECAPx1_ASAP7_75t_{suffix}",
66
- f"DECAPx3_ASAP7_75t_{suffix}",
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
 
@@ -103,6 +103,6 @@ def setup():
103
103
 
104
104
  #########################
105
105
  if __name__ == "__main__":
106
- pdk = setup(siliconcompiler.Chip('<pdk>'))
106
+ pdk = setup()
107
107
  register_data_source(pdk)
108
108
  pdk.check_filepaths()
@@ -122,5 +122,5 @@ def setup():
122
122
 
123
123
  #########################
124
124
  if __name__ == "__main__":
125
- lib = setup(siliconcompiler.Chip('<lib>'))
125
+ lib = setup()
126
126
  lib.write_manifest(f'{lib.top()}.json')
@@ -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 == 2:
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(siliconcompiler.Chip('<pdk>'))
184
+ pdk = setup()
150
185
  pdk.write_manifest(f'{pdk.top()}.json')
151
186
  pdk.check_filepaths()
@@ -155,7 +155,7 @@ def setup():
155
155
 
156
156
  #########################
157
157
  if __name__ == "__main__":
158
- libs = setup(siliconcompiler.Chip('<lib>'))
158
+ libs = setup()
159
159
  for lib in libs:
160
160
  lib.write_manifest(f'{lib.top()}.json')
161
161
  lib.check_filepaths()
@@ -4,7 +4,7 @@ import siliconcompiler
4
4
  from lambdapdk import register_data_source
5
5
 
6
6
 
7
- pdk_rev = '89c8038db331ccfdf6be488dfc4670cb62ba3c42'
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(siliconcompiler.Chip('<pdk>'))
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(siliconcompiler.Chip('<lib>'))
137
+ lib = setup()
135
138
  lib.write_manifest(f'{lib.top()}.json')
@@ -119,5 +119,5 @@ def setup():
119
119
 
120
120
  #########################
121
121
  if __name__ == "__main__":
122
- pdk = setup(siliconcompiler.Chip('<pdk>'))
122
+ pdk = setup()
123
123
  pdk.write_manifest(f'{pdk.top()}.json')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lambdapdk
3
- Version: 0.1.35
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.1; extra == "test"
207
- Requires-Dist: lambdalib==0.2.10; extra == "test"
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
@@ -4,6 +4,6 @@ siliconcompiler>=0.27.0
4
4
  flake8==7.1.1
5
5
  pytest==8.3.3
6
6
  pytest-timeout==2.3.1
7
- tclint==0.4.1
8
- lambdalib==0.2.10
7
+ tclint==0.4.2
8
+ lambdalib==0.3.0
9
9
  sc-leflib==0.4.0
@@ -30,8 +30,8 @@ test = [
30
30
  "flake8 == 7.1.1",
31
31
  "pytest == 8.3.3",
32
32
  "pytest-timeout == 2.3.1",
33
- "tclint == 0.4.1",
34
- "lambdalib == 0.2.10",
33
+ "tclint == 0.4.2",
34
+ "lambdalib == 0.3.0",
35
35
  "sc-leflib == 0.4.0"
36
36
  ]
37
37
 
@@ -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(path.format(lib_name=lib_name), 'auxlib')
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(path.format(lib_name=lib_name), 'stdlib')
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(path, 'ramlib')
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(path, 'iolib')
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