lambdapdk 0.1.31__tar.gz → 0.1.32__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 (33) hide show
  1. {lambdapdk-0.1.31/lambdapdk.egg-info → lambdapdk-0.1.32}/PKG-INFO +5 -4
  2. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/README.md +1 -0
  3. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/__init__.py +8 -6
  4. lambdapdk-0.1.32/lambdapdk/ihp130/__init__.py +133 -0
  5. lambdapdk-0.1.32/lambdapdk/ihp130/libs/sg13g2_sram.py +46 -0
  6. lambdapdk-0.1.32/lambdapdk/ihp130/libs/sg13g2_stdcell.py +135 -0
  7. {lambdapdk-0.1.31 → lambdapdk-0.1.32/lambdapdk.egg-info}/PKG-INFO +5 -4
  8. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk.egg-info/SOURCES.txt +3 -0
  9. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk.egg-info/requires.txt +3 -3
  10. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/pyproject.toml +5 -4
  11. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/tests/test_getters.py +7 -5
  12. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/tests/test_lambda.py +9 -3
  13. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/tests/test_paths.py +8 -5
  14. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/LICENSE +0 -0
  15. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/MANIFEST.in +0 -0
  16. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/asap7/__init__.py +0 -0
  17. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/asap7/libs/asap7sc7p5t.py +0 -0
  18. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/asap7/libs/fakeram7.py +0 -0
  19. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/freepdk45/__init__.py +0 -0
  20. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/freepdk45/libs/fakeram45.py +0 -0
  21. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/freepdk45/libs/nangate45.py +0 -0
  22. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/gf180/__init__.py +0 -0
  23. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/gf180/libs/gf180io.py +0 -0
  24. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/gf180/libs/gf180mcu.py +0 -0
  25. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/gf180/libs/gf180sram.py +0 -0
  26. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/sky130/__init__.py +0 -0
  27. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/sky130/libs/sky130io.py +0 -0
  28. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/sky130/libs/sky130sc.py +0 -0
  29. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk/sky130/libs/sky130sram.py +0 -0
  30. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk.egg-info/dependency_links.txt +0 -0
  31. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/lambdapdk.egg-info/top_level.txt +0 -0
  32. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/setup.cfg +0 -0
  33. {lambdapdk-0.1.31 → lambdapdk-0.1.32}/tests/test_local_detect.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lambdapdk
3
- Version: 0.1.31
3
+ Version: 0.1.32
4
4
  Summary: Library of open source Process Design Kits
5
5
  Author: Zero ASIC
6
6
  License: Apache License
@@ -201,10 +201,10 @@ License-File: LICENSE
201
201
  Requires-Dist: siliconcompiler>=0.27.0
202
202
  Provides-Extra: test
203
203
  Requires-Dist: flake8==7.1.1; extra == "test"
204
- Requires-Dist: pytest==8.3.2; extra == "test"
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.3.2; extra == "test"
207
- Requires-Dist: lambdalib==0.2.9; extra == "test"
206
+ Requires-Dist: tclint==0.4.0; extra == "test"
207
+ Requires-Dist: lambdalib==0.2.10; extra == "test"
208
208
  Requires-Dist: sc-leflib==0.4.0; extra == "test"
209
209
 
210
210
  # Lambdapdk Introduction
@@ -220,6 +220,7 @@ Supported PDKs:
220
220
  * [FreePDK45](lambdapdk/freepdk45/base/README.md)
221
221
  * [Skywater130](lambdapdk/sky130/base/README.md)
222
222
  * [Global Foundries 180](lambdapdk/gf180/README.md)
223
+ * [IHP 180](https://github.com/IHP-GmbH/IHP-Open-PDK)
223
224
 
224
225
  # License
225
226
 
@@ -11,6 +11,7 @@ Supported PDKs:
11
11
  * [FreePDK45](lambdapdk/freepdk45/base/README.md)
12
12
  * [Skywater130](lambdapdk/sky130/base/README.md)
13
13
  * [Global Foundries 180](lambdapdk/gf180/README.md)
14
+ * [IHP 180](https://github.com/IHP-GmbH/IHP-Open-PDK)
14
15
 
15
16
  # License
16
17
 
@@ -1,7 +1,7 @@
1
1
  import siliconcompiler.package as sc_package
2
2
 
3
3
 
4
- __version__ = "0.1.31"
4
+ __version__ = "0.1.32"
5
5
 
6
6
 
7
7
  def register_data_source(chip):
@@ -20,10 +20,10 @@ def get_pdks():
20
20
  Returns a list of pdk names in lambdapdk
21
21
  '''
22
22
 
23
- from lambdapdk import asap7, freepdk45, sky130, gf180
23
+ from lambdapdk import asap7, freepdk45, sky130, gf180, ihp130
24
24
 
25
25
  all_pdks = []
26
- for pdk_mod in [asap7, freepdk45, sky130, gf180]:
26
+ for pdk_mod in [asap7, freepdk45, sky130, gf180, ihp130]:
27
27
  pdks = pdk_mod.setup()
28
28
  if not isinstance(pdks, (list, tuple)):
29
29
  pdks = [pdks]
@@ -38,17 +38,19 @@ def get_libs():
38
38
  Returns a list of libraries names in lambdapdk
39
39
  '''
40
40
 
41
- from lambdapdk.asap7.libs import asap7sc7p5t, fakeram7
41
+ from lambdapdk.asap7.libs import asap7sc7p5t, fakeram7, fakeio7
42
42
  from lambdapdk.freepdk45.libs import nangate45, fakeram45
43
43
  from lambdapdk.sky130.libs import sky130sc, sky130io, sky130sram
44
44
  from lambdapdk.gf180.libs import gf180mcu, gf180io, gf180sram
45
+ from lambdapdk.ihp130.libs import sg13g2_stdcell, sg13g2_sram
45
46
 
46
47
  all_libs = []
47
48
  for lib_mod in [
48
- asap7sc7p5t, fakeram7,
49
+ asap7sc7p5t, fakeram7, fakeio7,
49
50
  nangate45, fakeram45,
50
51
  sky130sc, sky130io, sky130sram,
51
- gf180mcu, gf180io, gf180sram]:
52
+ gf180mcu, gf180io, gf180sram,
53
+ sg13g2_stdcell, sg13g2_sram]:
52
54
  libs = lib_mod.setup()
53
55
  if not isinstance(libs, (list, tuple)):
54
56
  libs = [libs]
@@ -0,0 +1,133 @@
1
+
2
+ import os
3
+ import siliconcompiler
4
+ from lambdapdk import register_data_source
5
+
6
+
7
+ pdk_rev = '89c8038db331ccfdf6be488dfc4670cb62ba3c42'
8
+
9
+
10
+ def register_ihp130_data_source(chip):
11
+ chip.register_source(
12
+ 'ihp130',
13
+ path='git+https://github.com/IHP-GmbH/IHP-Open-PDK',
14
+ ref=pdk_rev)
15
+
16
+
17
+ ####################################################
18
+ # PDK Setup
19
+ ####################################################
20
+ def setup():
21
+ '''
22
+ 130nm BiCMOS Open Source PDK, dedicated for Analog/Digital, Mixed Signal and RF Design
23
+
24
+ IHP Open Source PDK project goal is to provide a fully open source Process Design Kit and
25
+ related data, which can be used to create manufacturable designs at IHP's facility.
26
+
27
+ SG13G2 is a high performance BiCMOS technology with a 0.13 μm CMOS process.
28
+ It contains bipolar devices based on SiGe:C npn-HBT's with up to 350 GHz transition frequency
29
+ (fT) and 450 GHz oscillation frequency (fmax).
30
+ This process provides 2 gate oxides:
31
+ A thin gate oxide for the 1.2 V digital logic and a thick oxide for a 3.3 V supply voltage.
32
+ For both modules NMOS, PMOS and isolated NMOS transistors are offered.
33
+ Further passive components like poly silicon resistors and MIM capacitors are available.
34
+ The backend option offers 5 thin metal layers, two thick metal layers (2 and 3 μm thick) and
35
+ a MIM layer.
36
+
37
+ Sources:
38
+
39
+ * https://github.com/IHP-GmbH/IHP-Open-PDK
40
+ '''
41
+
42
+ foundry = 'Leibniz-Institut für innovative Mikroelektronik'
43
+ process = 'ihp130'
44
+ stackup = '5M2TL'
45
+
46
+ node = 130
47
+ # TODO: dummy numbers, only matter for cost estimation
48
+ wafersize = 300
49
+ hscribe = 0.1
50
+ vscribe = 0.1
51
+ edgemargin = 2
52
+
53
+ lpdkdir = os.path.join('lambdapdk', 'ihp130', 'base')
54
+
55
+ pdk = siliconcompiler.PDK(process, package='ihp130')
56
+ register_ihp130_data_source(pdk)
57
+ register_data_source(pdk)
58
+
59
+ # process name
60
+ pdk.set('pdk', process, 'foundry', foundry)
61
+ pdk.set('pdk', process, 'node', node)
62
+ pdk.set('pdk', process, 'version', pdk_rev)
63
+ pdk.set('pdk', process, 'stackup', stackup)
64
+ pdk.set('pdk', process, 'wafersize', wafersize)
65
+ pdk.set('pdk', process, 'edgemargin', edgemargin)
66
+ pdk.set('pdk', process, 'scribe', (hscribe, vscribe))
67
+
68
+ # APR Setup
69
+ # TODO: remove libtype
70
+ for tool in ('openroad', 'klayout', 'magic'):
71
+ # Add unithd for backwards compatibility
72
+ pdk.set('pdk', process, 'aprtech', tool, stackup, '9t', 'lef',
73
+ 'ihp-sg13g2/libs.ref/sg13g2_stdcell/lef/sg13g2_tech.lef')
74
+
75
+ pdk.set('pdk', process, 'minlayer', stackup, 'Metal2')
76
+ pdk.set('pdk', process, 'maxlayer', stackup, 'Metal5')
77
+
78
+ # DRC Runsets
79
+ # pdk.set('pdk', process, 'drc', 'runset', 'magic', stackup, 'basic',
80
+ # pdkdir + '/setup/magic/sky130A.tech')
81
+
82
+ # LVS Runsets
83
+ # pdk.set('pdk', process, 'lvs', 'runset', 'netgen', stackup, 'basic',
84
+ # pdkdir + '/setup/netgen/lvs_setup.tcl')
85
+
86
+ # Layer map and display file
87
+ pdk.set('pdk', process, 'layermap', 'klayout', 'def', 'klayout', stackup,
88
+ 'ihp-sg13g2/libs.tech/klayout/tech/sg13g2.lyt')
89
+ pdk.set('pdk', process, 'display', 'klayout', stackup,
90
+ 'ihp-sg13g2/libs.tech/klayout/tech/sg13g2.lyp')
91
+
92
+ pdk.set('pdk', process, 'layermap', 'klayout', 'def', 'gds', stackup,
93
+ 'ihp-sg13g2/libs.tech/klayout/tech/sg13g2.map')
94
+
95
+ # Openroad global routing grid derating
96
+ openroad_layer_adjustments = {
97
+ 'Metal1': 0.05,
98
+ 'Metal2': 0.05,
99
+ 'Metal3': 0.05,
100
+ 'Metal4': 0.05,
101
+ 'Metal5': 0.05,
102
+ 'TopMetal1': 0.00,
103
+ 'TopMetal2': 0.00,
104
+ }
105
+ for layer, adj in openroad_layer_adjustments.items():
106
+ pdk.set('pdk', process, 'var', 'openroad', f'{layer}_adjustment', stackup, str(adj))
107
+
108
+ pdk.set('pdk', process, 'var', 'openroad', 'rclayer_signal', stackup, 'Metal2')
109
+ pdk.set('pdk', process, 'var', 'openroad', 'rclayer_clock', stackup, 'Metal5')
110
+
111
+ pdk.set('pdk', process, 'var', 'openroad', 'pin_layer_vertical', stackup, 'Metal3')
112
+ pdk.set('pdk', process, 'var', 'openroad', 'pin_layer_horizontal', stackup, 'Metal2')
113
+
114
+ # PEX
115
+ for corner in ["typical"]:
116
+ pdk.set('pdk', process, 'pexmodel', 'openroad', stackup, corner,
117
+ lpdkdir + '/pex/openroad/' + corner + '.tcl', package='lambdapdk')
118
+ pdk.set('pdk', process, 'pexmodel', 'openroad-openrcx', stackup, corner,
119
+ lpdkdir + '/pex/openroad/' + corner + '.rules', package='lambdapdk')
120
+
121
+ # Documentation
122
+ pdk.set('pdk', process, 'doc', 'overview',
123
+ 'ihp-sg13g2/libs.doc/doc/SG13G2_os_process_spec.pdf')
124
+ pdk.set('pdk', process, 'doc', 'drc_rules',
125
+ 'ihp-sg13g2/libs.doc/doc/SG13G2_os_layout_rules.pdf')
126
+
127
+ return pdk
128
+
129
+
130
+ #########################
131
+ if __name__ == "__main__":
132
+ pdk = setup(siliconcompiler.Chip('<pdk>'))
133
+ pdk.write_manifest(f'{pdk.top()}.json')
@@ -0,0 +1,46 @@
1
+ from siliconcompiler import Chip, Library
2
+ from lambdapdk import register_data_source
3
+ from lambdapdk.ihp130 import register_ihp130_data_source
4
+
5
+
6
+ def setup():
7
+ libs = []
8
+ stackup = '5M2TL'
9
+
10
+ for config in ('1024x64', '2048x64', '256x48', '256x64', '512x64', '64x64'):
11
+ mem_name = f'RM_IHPSG13_1P_{config}_c2_bm_bist'
12
+ lib = Library(mem_name, package='ihp130')
13
+ register_ihp130_data_source(lib)
14
+ register_data_source(lib)
15
+ path_base = 'ihp-sg13g2/libs.ref/sg13g2_sram'
16
+ lib.add('output', stackup, 'lef', f'{path_base}/lef/{mem_name}.lef')
17
+ lib.add('output', stackup, 'gds', f'{path_base}/gds/{mem_name}.gds')
18
+ lib.add('output', stackup, 'cdl', f'{path_base}/spice/{mem_name}.cdl')
19
+
20
+ lib.add('output', 'typ', 'nldm', f'{path_base}/lib/{mem_name}_typ_1p20V_25C.lib')
21
+ lib.add('output', 'slow', 'nldm', f'{path_base}/lib/{mem_name}_slow_1p08V_125C.lib')
22
+ lib.add('output', 'fast', 'nldm', f'{path_base}/lib/{mem_name}_fast_1p32V_m55C.lib')
23
+
24
+ lib.add('output', 'rtl', 'verilog', f'{path_base}/verilog/{mem_name}.v')
25
+ lib.add('output', 'rtl', 'verilog',
26
+ f'{path_base}/verilog/RM_IHPSG13_1P_core_behavioral_bm_bist.v')
27
+
28
+ lib.set('option', 'file', 'openroad_pdngen',
29
+ 'lambdapdk/ihp130/libs/sg13g2_sram/pdngen.tcl',
30
+ package='lambdapdk')
31
+
32
+ libs.append(lib)
33
+
34
+ lambda_lib = Library('lambdalib_sg13g2_sram', package='lambdapdk')
35
+ register_data_source(lambda_lib)
36
+ lambda_lib.add('option', 'ydir', 'lambdapdk/ihp130/libs/sg13g2_sram/lambda')
37
+
38
+ libs.append(lambda_lib)
39
+
40
+ return libs
41
+
42
+
43
+ #########################
44
+ if __name__ == "__main__":
45
+ for lib in setup(Chip('<lib>')):
46
+ lib.write_manifest(f'{lib.top()}.json')
@@ -0,0 +1,135 @@
1
+ import os
2
+ import siliconcompiler
3
+ from lambdapdk import register_data_source
4
+ from lambdapdk.ihp130 import register_ihp130_data_source
5
+
6
+
7
+ def setup():
8
+ '''
9
+ Nangate open standard cell library for FreePDK45.
10
+ '''
11
+ libname = 'sg13g2_stdcell'
12
+ process = 'ihp130'
13
+ stackup = '5M2TL'
14
+ libtype = '9t'
15
+ version = 'r1p0'
16
+
17
+ lib = siliconcompiler.Library(libname, package='ihp130')
18
+ register_ihp130_data_source(lib)
19
+ register_data_source(lib)
20
+
21
+ libdir = os.path.join('lambdapdk', process, 'libs', libname)
22
+
23
+ # version
24
+ lib.set('package', 'version', version)
25
+
26
+ # list of stackups supported
27
+ lib.set('option', 'stackup', stackup)
28
+
29
+ # list of pdks supported
30
+ lib.set('option', 'pdk', process)
31
+
32
+ # footprint/type/sites
33
+ lib.set('asic', 'libarch', libtype)
34
+ lib.set('asic', 'site', libtype, 'CoreSite')
35
+
36
+ # timing
37
+ lib.add('output', 'typ', 'nldm',
38
+ 'ihp-sg13g2/libs.ref/sg13g2_stdcell/lib/sg13g2_stdcell_typ_1p20V_25C.lib')
39
+ lib.add('output', 'fast', 'nldm',
40
+ 'ihp-sg13g2/libs.ref/sg13g2_stdcell/lib/sg13g2_stdcell_fast_1p32V_m40C.lib')
41
+ lib.add('output', 'slow', 'nldm',
42
+ 'ihp-sg13g2/libs.ref/sg13g2_stdcell/lib/sg13g2_stdcell_slow_1p08V_125C.lib')
43
+
44
+ # lef
45
+ lib.add('output', stackup, 'lef',
46
+ 'ihp-sg13g2/libs.ref/sg13g2_stdcell/lef/sg13g2_stdcell.lef')
47
+
48
+ # gds
49
+ lib.add('output', stackup, 'gds',
50
+ 'ihp-sg13g2/libs.ref/sg13g2_stdcell/gds/sg13g2_stdcell.gds')
51
+
52
+ # cdl
53
+ lib.add('output', stackup, 'cdl',
54
+ 'ihp-sg13g2/libs.ref/sg13g2_stdcell/cdl/sg13g2_stdcell.cdl')
55
+
56
+ lib.add('output', 'rtl', 'verilog',
57
+ 'ihp-sg13g2/libs.ref/sg13g2_stdcell/verilog/sg13g2_stdcell.v')
58
+
59
+ # clock buffers
60
+ lib.add('asic', 'cells', 'clkbuf', ["sg13g2_buf_2",
61
+ "sg13g2_buf_4"])
62
+
63
+ # tie cells
64
+ lib.add('asic', 'cells', 'tie', ["LOGIC1_X1",
65
+ "LOGIC0_X1"])
66
+
67
+ # hold cells
68
+ lib.add('asic', 'cells', 'hold', ["sg13g2_buf_1",
69
+ "sg13g2_buf_4"])
70
+
71
+ # filler
72
+ lib.add('asic', 'cells', 'filler', ["sg13g2_fill_1",
73
+ "sg13g2_fill_2"])
74
+
75
+ # decap
76
+ lib.add('asic', 'cells', 'decap', ["sg13g2_decap_4",
77
+ "sg13g2_decap_8"])
78
+
79
+ # antenna
80
+ lib.add('asic', 'cells', 'antenna', ["sg13g2_antennanp"])
81
+
82
+ # Stupid small cells
83
+ lib.add('asic', 'cells', 'dontuse', ["sg13g2_antennanp",
84
+ "sg13g2_lgcp_1",
85
+ "sg13g2_sighold",
86
+ "sg13g2_slgcp_1",
87
+ "sg13g2_dfrbp_2"])
88
+
89
+ # Techmap
90
+ lib.add('option', 'file', 'yosys_techmap',
91
+ libdir + '/techmap/yosys/cells_latch.v',
92
+ package='lambdapdk')
93
+
94
+ # Defaults for OpenROAD tool variables
95
+ lib.set('option', 'var', 'openroad_place_density', '0.65')
96
+ lib.set('option', 'var', 'openroad_pad_global_place', '0')
97
+ lib.set('option', 'var', 'openroad_pad_detail_place', '0')
98
+ lib.set('option', 'var', 'openroad_macro_place_halo', ['40', '40'])
99
+ lib.set('option', 'var', 'openroad_macro_place_channel', ['80', '80'])
100
+
101
+ lib.set('option', 'file', 'openroad_tapcells', libdir + '/apr/openroad/tapcell.tcl',
102
+ package='lambdapdk')
103
+ lib.set('option', 'file', 'openroad_pdngen', libdir + '/apr/openroad/pdngen.tcl',
104
+ package='lambdapdk')
105
+ lib.set('option', 'file', 'openroad_global_connect',
106
+ libdir + '/apr/openroad/global_connect.tcl',
107
+ package='lambdapdk')
108
+
109
+ lib.set('option', 'var', 'yosys_abc_clock_multiplier', "1000") # convert from ns -> ps
110
+ lib.set('option', 'var', 'yosys_abc_constraint_load', "6.0fF") # BUF_X1 = 0.974659 x 4
111
+ lib.set('option', 'var', 'yosys_driver_cell', "sg13g2_buf_4")
112
+ lib.set('option', 'var', 'yosys_buffer_cell', "sg13g2_buf_4")
113
+ lib.set('option', 'var', 'yosys_buffer_input', "A")
114
+ lib.set('option', 'var', 'yosys_buffer_output', "X")
115
+ for tool in ('yosys', 'openroad'):
116
+ lib.set('option', 'var', f'{tool}_tiehigh_cell', "sg13g2_tiehi")
117
+ lib.set('option', 'var', f'{tool}_tiehigh_port', "L_HI")
118
+ lib.set('option', 'var', f'{tool}_tielow_cell', "sg13g2_tielo")
119
+ lib.set('option', 'var', f'{tool}_tielow_port', "L_LO")
120
+
121
+ libs = [lib]
122
+ for libtype in ('stdlib', 'auxlib'):
123
+ lambda_lib = siliconcompiler.Library(f'lambdalib_{libtype}_{libname}',
124
+ package='lambdapdk')
125
+ register_data_source(lambda_lib)
126
+ lambda_lib.add('option', 'ydir', libdir + f'/lambda/{libtype}')
127
+ libs.append(lambda_lib)
128
+
129
+ return libs
130
+
131
+
132
+ #########################
133
+ if __name__ == "__main__":
134
+ lib = setup(siliconcompiler.Chip('<lib>'))
135
+ 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.31
3
+ Version: 0.1.32
4
4
  Summary: Library of open source Process Design Kits
5
5
  Author: Zero ASIC
6
6
  License: Apache License
@@ -201,10 +201,10 @@ License-File: LICENSE
201
201
  Requires-Dist: siliconcompiler>=0.27.0
202
202
  Provides-Extra: test
203
203
  Requires-Dist: flake8==7.1.1; extra == "test"
204
- Requires-Dist: pytest==8.3.2; extra == "test"
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.3.2; extra == "test"
207
- Requires-Dist: lambdalib==0.2.9; extra == "test"
206
+ Requires-Dist: tclint==0.4.0; extra == "test"
207
+ Requires-Dist: lambdalib==0.2.10; extra == "test"
208
208
  Requires-Dist: sc-leflib==0.4.0; extra == "test"
209
209
 
210
210
  # Lambdapdk Introduction
@@ -220,6 +220,7 @@ Supported PDKs:
220
220
  * [FreePDK45](lambdapdk/freepdk45/base/README.md)
221
221
  * [Skywater130](lambdapdk/sky130/base/README.md)
222
222
  * [Global Foundries 180](lambdapdk/gf180/README.md)
223
+ * [IHP 180](https://github.com/IHP-GmbH/IHP-Open-PDK)
223
224
 
224
225
  # License
225
226
 
@@ -18,6 +18,9 @@ lambdapdk/gf180/__init__.py
18
18
  lambdapdk/gf180/libs/gf180io.py
19
19
  lambdapdk/gf180/libs/gf180mcu.py
20
20
  lambdapdk/gf180/libs/gf180sram.py
21
+ lambdapdk/ihp130/__init__.py
22
+ lambdapdk/ihp130/libs/sg13g2_sram.py
23
+ lambdapdk/ihp130/libs/sg13g2_stdcell.py
21
24
  lambdapdk/sky130/__init__.py
22
25
  lambdapdk/sky130/libs/sky130io.py
23
26
  lambdapdk/sky130/libs/sky130sc.py
@@ -2,8 +2,8 @@ siliconcompiler>=0.27.0
2
2
 
3
3
  [test]
4
4
  flake8==7.1.1
5
- pytest==8.3.2
5
+ pytest==8.3.3
6
6
  pytest-timeout==2.3.1
7
- tclint==0.3.2
8
- lambdalib==0.2.9
7
+ tclint==0.4.0
8
+ lambdalib==0.2.10
9
9
  sc-leflib==0.4.0
@@ -22,16 +22,16 @@ version = {attr = "lambdapdk.__version__"}
22
22
 
23
23
  [tool.pytest.ini_options]
24
24
  testpaths = "tests"
25
- timeout = "60"
25
+ timeout = "180"
26
26
 
27
27
  [project.optional-dependencies]
28
28
  # Test dependencies.
29
29
  test = [
30
30
  "flake8 == 7.1.1",
31
- "pytest == 8.3.2",
31
+ "pytest == 8.3.3",
32
32
  "pytest-timeout == 2.3.1",
33
- "tclint == 0.3.2",
34
- "lambdalib == 0.2.9",
33
+ "tclint == 0.4.0",
34
+ "lambdalib == 0.2.10",
35
35
  "sc-leflib == 0.4.0"
36
36
  ]
37
37
 
@@ -40,6 +40,7 @@ exclude = [
40
40
  'build',
41
41
  'scripts/build',
42
42
  'dist',
43
+ '.venv/',
43
44
  # scripts from other repos
44
45
  'lambdapdk/asap7/base/apr/example_innovus.tcl',
45
46
  'lambdapdk/sky130/base/setup/netgen/lvs_setup.tcl',
@@ -2,14 +2,15 @@ import pytest
2
2
  from siliconcompiler import Chip
3
3
  import lambdapdk
4
4
 
5
- from lambdapdk import asap7, freepdk45, sky130, gf180
6
- from lambdapdk.asap7.libs import asap7sc7p5t, fakeram7
5
+ from lambdapdk import asap7, freepdk45, sky130, gf180, ihp130
6
+ from lambdapdk.asap7.libs import asap7sc7p5t, fakeram7, fakeio7
7
7
  from lambdapdk.freepdk45.libs import nangate45, fakeram45
8
8
  from lambdapdk.sky130.libs import sky130sc, sky130io, sky130sram
9
9
  from lambdapdk.gf180.libs import gf180mcu, gf180io, gf180sram
10
+ from lambdapdk.ihp130.libs import sg13g2_stdcell, sg13g2_sram
10
11
 
11
12
 
12
- @pytest.mark.parametrize('pdk', [asap7, freepdk45, sky130, gf180])
13
+ @pytest.mark.parametrize('pdk', [asap7, freepdk45, sky130, gf180, ihp130])
13
14
  def test_pdk(pdk):
14
15
  chip = Chip('<pdk>')
15
16
  chip.use(pdk)
@@ -19,10 +20,11 @@ def test_pdk(pdk):
19
20
 
20
21
 
21
22
  @pytest.mark.parametrize('lib', [
22
- asap7sc7p5t, fakeram7, # asap7
23
+ asap7sc7p5t, fakeram7, fakeio7, # asap7
23
24
  nangate45, fakeram45, # freepdk45
24
25
  sky130sc, sky130io, sky130sram, # sky130
25
- gf180mcu, gf180io, gf180sram # gf180
26
+ gf180mcu, gf180io, gf180sram, # gf180
27
+ sg13g2_stdcell, sg13g2_sram # ihp130
26
28
  ])
27
29
  def test_lib(lib):
28
30
  chip = Chip('<lib>')
@@ -6,13 +6,15 @@ from lambdapdk.asap7.libs import asap7sc7p5t, fakeram7
6
6
  from lambdapdk.freepdk45.libs import nangate45, fakeram45
7
7
  from lambdapdk.gf180.libs import gf180mcu, gf180io, gf180sram
8
8
  from lambdapdk.sky130.libs import sky130sc, sky130io, sky130sram
9
+ from lambdapdk.ihp130.libs import sg13g2_stdcell, sg13g2_sram
9
10
 
10
11
 
11
12
  @pytest.mark.parametrize('module,path', [
12
13
  (asap7sc7p5t, 'lambdapdk/asap7/libs/{lib_name}/lambda/auxlib'),
13
14
  (nangate45, 'lambdapdk/freepdk45/libs/{lib_name}/lambda/auxlib'),
14
15
  (sky130sc, 'lambdapdk/sky130/libs/{lib_name}/lambda/auxlib'),
15
- (gf180mcu, 'lambdapdk/gf180/libs/{lib_name}/lambda/auxlib')
16
+ (gf180mcu, 'lambdapdk/gf180/libs/{lib_name}/lambda/auxlib'),
17
+ (sg13g2_stdcell, 'lambdapdk/ihp130/libs/{lib_name}/lambda/auxlib')
16
18
  ])
17
19
  def test_la_auxlib(module, path):
18
20
  libs = module.setup()
@@ -29,7 +31,8 @@ def test_la_auxlib(module, path):
29
31
  (asap7sc7p5t, 'lambdapdk/asap7/libs/{lib_name}/lambda/stdlib'),
30
32
  (nangate45, 'lambdapdk/freepdk45/libs/{lib_name}/lambda/stdlib'),
31
33
  (sky130sc, 'lambdapdk/sky130/libs/{lib_name}/lambda/stdlib'),
32
- (gf180mcu, 'lambdapdk/gf180/libs/{lib_name}/lambda/stdlib')
34
+ (gf180mcu, 'lambdapdk/gf180/libs/{lib_name}/lambda/stdlib'),
35
+ (sg13g2_stdcell, 'lambdapdk/ihp130/libs/{lib_name}/lambda/stdlib')
33
36
  ])
34
37
  def test_la_stdlib(module, path):
35
38
  libs = module.setup()
@@ -47,6 +50,7 @@ def test_la_stdlib(module, path):
47
50
  'lambdapdk/freepdk45/libs/fakeram45/lambda',
48
51
  'lambdapdk/sky130/libs/sky130sram/lambda',
49
52
  'lambdapdk/gf180/libs/gf180mcu_fd_ip_sram/lambda',
53
+ 'lambdapdk/ihp130/libs/sg13g2_sram/lambda',
50
54
  ])
51
55
  def test_la_ramlib(path):
52
56
  assert lambdalib.check(path, 'ramlib')
@@ -55,6 +59,7 @@ def test_la_ramlib(path):
55
59
  @pytest.mark.parametrize('path', [
56
60
  'lambdapdk/sky130/libs/sky130io/lambda',
57
61
  'lambdapdk/gf180/libs/gf180mcu_fd_io/lambda',
62
+ 'lambdapdk/asap7/libs/fakeio7/lambda',
58
63
  ])
59
64
  def test_la_iolib(path):
60
65
  assert lambdalib.check(path, 'iolib')
@@ -64,7 +69,8 @@ def test_la_iolib(path):
64
69
  asap7sc7p5t, fakeram7,
65
70
  nangate45, fakeram45,
66
71
  gf180mcu, gf180io, gf180sram,
67
- sky130sc, sky130io, sky130sram
72
+ sky130sc, sky130io, sky130sram,
73
+ sg13g2_stdcell, sg13g2_sram
68
74
  ])
69
75
  def test_lambdalib_is_present(module):
70
76
  chip = Chip('<lib>')
@@ -2,14 +2,16 @@ import pytest
2
2
  from siliconcompiler import Chip
3
3
  import os
4
4
 
5
- from lambdapdk import asap7, freepdk45, sky130, gf180
6
- from lambdapdk.asap7.libs import asap7sc7p5t, fakeram7
5
+ from lambdapdk import asap7, freepdk45, sky130, gf180, ihp130
6
+ from lambdapdk.asap7.libs import asap7sc7p5t, fakeram7, fakeio7
7
7
  from lambdapdk.freepdk45.libs import nangate45, fakeram45
8
8
  from lambdapdk.sky130.libs import sky130sc, sky130io, sky130sram
9
9
  from lambdapdk.gf180.libs import gf180mcu, gf180io, gf180sram
10
+ from lambdapdk.ihp130.libs import sg13g2_stdcell
10
11
 
11
12
 
12
- @pytest.mark.parametrize('pdk', [asap7, freepdk45, sky130, gf180])
13
+ @pytest.mark.parametrize('pdk', [
14
+ asap7, freepdk45, sky130, gf180, ihp130])
13
15
  def test_pdk_paths(pdk):
14
16
  chip = Chip('<pdk>')
15
17
  chip.use(pdk)
@@ -17,10 +19,11 @@ def test_pdk_paths(pdk):
17
19
 
18
20
 
19
21
  @pytest.mark.parametrize('lib', [
20
- asap7sc7p5t, fakeram7, # asap7
22
+ asap7sc7p5t, fakeram7, fakeio7, # asap7
21
23
  nangate45, fakeram45, # freepdk45
22
24
  sky130sc, sky130io, sky130sram, # sky130
23
- gf180mcu, gf180io, gf180sram # gf180
25
+ gf180mcu, gf180io, gf180sram, # gf180
26
+ sg13g2_stdcell # ihp130
24
27
  ])
25
28
  def test_lib_paths(lib):
26
29
  chip = Chip('<lib>')
File without changes
File without changes
File without changes