lambdapdk 0.1.35__py3-none-any.whl → 0.1.36__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.
lambdapdk/__init__.py CHANGED
@@ -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.36"
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.36
4
4
  Summary: Library of open source Process Design Kits
5
5
  Author: Zero ASIC
6
6
  License: Apache License
@@ -203,7 +203,7 @@ 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'
206
+ Requires-Dist: tclint ==0.4.2 ; extra == 'test'
207
207
  Requires-Dist: lambdalib ==0.2.10 ; extra == 'test'
208
208
  Requires-Dist: sc-leflib ==0.4.0 ; extra == 'test'
209
209
 
@@ -0,0 +1,24 @@
1
+ lambdapdk/__init__.py,sha256=YzM7xvtEuCHwtRdhQroeJO2mWZNgUZPvwDeRf1D5nf0,1649
2
+ lambdapdk/asap7/__init__.py,sha256=Tb3du7LEisL_YoXVzVZgy9NqC835F79a9zqlV0MwBO0,4571
3
+ lambdapdk/asap7/libs/asap7sc7p5t.py,sha256=mKymeYPmNTHgxfwyIShxUN5hO1iAzgx2MWoBbfPkChU,6159
4
+ lambdapdk/asap7/libs/fakeio7.py,sha256=t4OQ7uljg4jh14bf3o4wsnI5gNkLEVpMs1drispc7LE,978
5
+ lambdapdk/asap7/libs/fakeram7.py,sha256=thOHy0XyV2-pakoxrttGL3qU9C2OeL1-MVtlrSiTMu8,1112
6
+ lambdapdk/freepdk45/__init__.py,sha256=5lbmMi3tGM1mJoM1wOGG0GhjKaFc2Qi3x-tRO8kKSDs,3673
7
+ lambdapdk/freepdk45/libs/fakeram45.py,sha256=CqX9YTFLQFlmGn4IZDjEI1OXv43mg3aWdbVfMrBKNSU,1091
8
+ lambdapdk/freepdk45/libs/nangate45.py,sha256=z319EBburWngwe_WYMHfksiFvfgJ0h4zLCEeWkcHTVs,4592
9
+ lambdapdk/gf180/__init__.py,sha256=fbJ4z0kXBftIHAsgyqJmbpZfpWf9PWuxXgoQoG3IhQ0,7963
10
+ lambdapdk/gf180/libs/gf180io.py,sha256=6WgsALOaKWYG6RfNFz6sg36zmfZZFl2HnsDWOWYy1UM,2751
11
+ lambdapdk/gf180/libs/gf180mcu.py,sha256=NPwcviynLMXRlkvAdwNrp8sJxHzT78PE0Iwy-DNpgzA,6727
12
+ lambdapdk/gf180/libs/gf180sram.py,sha256=uNtf4JOaT6wlD7D6hN5XwCoIOPmAXkVxSJXQuqNdY6k,2140
13
+ lambdapdk/ihp130/__init__.py,sha256=dSXwH5rYOrJc9C3FTe9bxCJw9VZaK0fnRBMWaWT9NY8,5500
14
+ lambdapdk/ihp130/libs/sg13g2_sram.py,sha256=3D5MKweUeOpWTHmtESbt8AyddjAvcpw9SeSbz4cfFG4,1887
15
+ lambdapdk/ihp130/libs/sg13g2_stdcell.py,sha256=i92vJvo2bur2lL9YKtyrZ2kDP8QiqmbTqWnSQeSiKhE,5085
16
+ lambdapdk/sky130/__init__.py,sha256=PXJEa-siz7HStlvDTCI794evU8qbHl472gHckSrZFWc,4124
17
+ lambdapdk/sky130/libs/sky130io.py,sha256=wFmN9RC98f6OFM5E5acCUgPe35tVTKciJzIcUBlmumo,2029
18
+ lambdapdk/sky130/libs/sky130sc.py,sha256=wW6sAaPpuqqCDqUD2cdJZJXqQz6KRLz9xztQ-hLNaC8,9446
19
+ lambdapdk/sky130/libs/sky130sram.py,sha256=ILjAjbgDdvfiWqmjmj8mmHvU7YiYGZVHGO7jmyajnaY,1489
20
+ lambdapdk-0.1.36.dist-info/LICENSE,sha256=2TIhku7H905BsYloYoCwat2JsdkGYc_qsnvU-p7P-IQ,10766
21
+ lambdapdk-0.1.36.dist-info/METADATA,sha256=QReOv697L6LXL0Vq6xgYh2D8XygEBFPqphqQOfcqrHY,13835
22
+ lambdapdk-0.1.36.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
23
+ lambdapdk-0.1.36.dist-info/top_level.txt,sha256=5wk8psZwCcQgSjOlWTihBeDkSIViGn8I3j5yALbs59s,10
24
+ lambdapdk-0.1.36.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,24 +0,0 @@
1
- lambdapdk/__init__.py,sha256=wJPVzGZC7F4SjmYRMoVUVxXHEygYSMlmJCPOLeie7ag,1649
2
- lambdapdk/asap7/__init__.py,sha256=hDK_dy0NeMbYWQqHGfR_g3su0eOL5rSZ2wDi7S-p-W0,4600
3
- lambdapdk/asap7/libs/asap7sc7p5t.py,sha256=8i7g9yxahD_Xj9cQQxFCzH3QtQ9qvgLsOQiUbgCJ-8U,6159
4
- lambdapdk/asap7/libs/fakeio7.py,sha256=t4OQ7uljg4jh14bf3o4wsnI5gNkLEVpMs1drispc7LE,978
5
- lambdapdk/asap7/libs/fakeram7.py,sha256=thOHy0XyV2-pakoxrttGL3qU9C2OeL1-MVtlrSiTMu8,1112
6
- lambdapdk/freepdk45/__init__.py,sha256=nZMJX76uo9Kp-UvXDSu8GbqPZNKn13Bglu0ze6LvoVk,3702
7
- lambdapdk/freepdk45/libs/fakeram45.py,sha256=CqX9YTFLQFlmGn4IZDjEI1OXv43mg3aWdbVfMrBKNSU,1091
8
- lambdapdk/freepdk45/libs/nangate45.py,sha256=vUb8FH0iMdN97B7oAOZ3CGmVjJQNm2LlA_QwJXMx8Ls,4621
9
- lambdapdk/gf180/__init__.py,sha256=ZNAGEehybrz3Z-2A93iHWRDT6cBlzF2mjsTd-QDq5Yg,6296
10
- lambdapdk/gf180/libs/gf180io.py,sha256=6WgsALOaKWYG6RfNFz6sg36zmfZZFl2HnsDWOWYy1UM,2751
11
- lambdapdk/gf180/libs/gf180mcu.py,sha256=lISVNBGLYuRbfNSIs0Vx-U3qp8ylA3WUULD9RrS8EfE,6756
12
- lambdapdk/gf180/libs/gf180sram.py,sha256=uNtf4JOaT6wlD7D6hN5XwCoIOPmAXkVxSJXQuqNdY6k,2140
13
- lambdapdk/ihp130/__init__.py,sha256=w63tKJ-Uivit0W8XfrEEYsrIrC0lUWBQvbVU-KP6oE4,4906
14
- lambdapdk/ihp130/libs/sg13g2_sram.py,sha256=3D5MKweUeOpWTHmtESbt8AyddjAvcpw9SeSbz4cfFG4,1887
15
- lambdapdk/ihp130/libs/sg13g2_stdcell.py,sha256=4joYjceHE3xeEFlme4oHTkUJOxB4obPsUu2vj1BwZZM,4930
16
- lambdapdk/sky130/__init__.py,sha256=Ah-3HXS54WyNTTUz9-SRrxoOAIf83QDPA-mlzgOIPVo,4153
17
- lambdapdk/sky130/libs/sky130io.py,sha256=wFmN9RC98f6OFM5E5acCUgPe35tVTKciJzIcUBlmumo,2029
18
- lambdapdk/sky130/libs/sky130sc.py,sha256=wW6sAaPpuqqCDqUD2cdJZJXqQz6KRLz9xztQ-hLNaC8,9446
19
- lambdapdk/sky130/libs/sky130sram.py,sha256=ILjAjbgDdvfiWqmjmj8mmHvU7YiYGZVHGO7jmyajnaY,1489
20
- lambdapdk-0.1.35.dist-info/LICENSE,sha256=2TIhku7H905BsYloYoCwat2JsdkGYc_qsnvU-p7P-IQ,10766
21
- lambdapdk-0.1.35.dist-info/METADATA,sha256=hCHepvuXPYlf2Dm6-TDZyvyO0cme816x9dpWXocfI38,13835
22
- lambdapdk-0.1.35.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
23
- lambdapdk-0.1.35.dist-info/top_level.txt,sha256=5wk8psZwCcQgSjOlWTihBeDkSIViGn8I3j5yALbs59s,10
24
- lambdapdk-0.1.35.dist-info/RECORD,,