lambdapdk 0.1.56__py3-none-any.whl → 0.2.0__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.
@@ -1,211 +1,179 @@
1
- import os
2
- import siliconcompiler
3
- from lambdapdk import register_data_source
1
+ from pathlib import Path
4
2
 
3
+ from lambdapdk import LambdaLibrary
4
+ from lambdapdk.sky130 import Sky130PDK
5
5
 
6
- def setup():
6
+
7
+ class _Sky130_SCLibrary(LambdaLibrary):
7
8
  '''
8
9
  Skywater130 standard cell library.
9
10
  '''
10
- process = 'skywater130'
11
- stackup = '5M1LI'
12
- version = 'v0_0_2'
13
-
14
- dontuse = {
15
- 'hd': [
16
- 'sky130_fd_sc_hd__lpflow_bleeder_1',
17
- 'sky130_fd_sc_hd__lpflow_clkbufkapwr_1',
18
- 'sky130_fd_sc_hd__lpflow_clkbufkapwr_16',
19
- 'sky130_fd_sc_hd__lpflow_clkbufkapwr_2',
20
- 'sky130_fd_sc_hd__lpflow_clkbufkapwr_4',
21
- 'sky130_fd_sc_hd__lpflow_clkbufkapwr_8',
22
- 'sky130_fd_sc_hd__lpflow_clkinvkapwr_1',
23
- 'sky130_fd_sc_hd__lpflow_clkinvkapwr_16',
24
- 'sky130_fd_sc_hd__lpflow_clkinvkapwr_2',
25
- 'sky130_fd_sc_hd__lpflow_clkinvkapwr_4',
26
- 'sky130_fd_sc_hd__lpflow_clkinvkapwr_8',
27
- 'sky130_fd_sc_hd__lpflow_decapkapwr_12',
28
- 'sky130_fd_sc_hd__lpflow_decapkapwr_3',
29
- 'sky130_fd_sc_hd__lpflow_decapkapwr_4',
30
- 'sky130_fd_sc_hd__lpflow_decapkapwr_6',
31
- 'sky130_fd_sc_hd__lpflow_decapkapwr_8',
32
- 'sky130_fd_sc_hd__lpflow_inputiso0n_1',
33
- 'sky130_fd_sc_hd__lpflow_inputiso0p_1',
34
- 'sky130_fd_sc_hd__lpflow_inputiso1n_1',
35
- 'sky130_fd_sc_hd__lpflow_inputiso1p_1',
36
- 'sky130_fd_sc_hd__lpflow_inputisolatch_1',
37
- 'sky130_fd_sc_hd__lpflow_isobufsrc_1',
38
- 'sky130_fd_sc_hd__lpflow_isobufsrc_16',
39
- 'sky130_fd_sc_hd__lpflow_isobufsrc_2',
40
- 'sky130_fd_sc_hd__lpflow_isobufsrc_4',
41
- 'sky130_fd_sc_hd__lpflow_isobufsrc_8',
42
- 'sky130_fd_sc_hd__lpflow_isobufsrckapwr_16',
43
- 'sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_1',
44
- 'sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_2',
45
- 'sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_4',
46
- 'sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_4',
47
- 'sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_1',
48
- 'sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_2',
49
- 'sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_4'
50
- ],
51
- 'hdll': [
52
- 'sky130_fd_sc_hdll__inputiso0p_1',
53
- 'sky130_fd_sc_hdll__inputiso0n_1',
54
- 'sky130_fd_sc_hdll__inputiso1p_1',
55
- 'sky130_fd_sc_hdll__inputiso1n_1',
56
- 'sky130_fd_sc_hdll__isobufsrc_1',
57
- 'sky130_fd_sc_hdll__isobufsrc_2',
58
- 'sky130_fd_sc_hdll__isobufsrc_4',
59
- 'sky130_fd_sc_hdll__isobufsrc_8',
60
- 'sky130_fd_sc_hdll__isobufsrc_16',
61
- ]
62
- }
63
-
64
- libs = []
65
- for libtype, sites, slow_v in (("hd", ["unithd", "unithddbl"], "1v40"),
66
- ("hdll", ["unithd", "unithddbl"], "1v44")):
67
-
68
- # This name can later be expanded to the full sky130_fd_sc_{libtype}
69
- libname = f"sky130{libtype}"
70
- libdir = os.path.join('lambdapdk', 'sky130', 'libs', libname)
71
-
72
- lib = siliconcompiler.Library(libname, package='lambdapdk')
73
- register_data_source(lib)
74
-
75
- # version
76
- lib.set('package', 'version', version)
77
-
78
- # pdk
79
- lib.set('option', 'pdk', process)
80
-
81
- # footprint/type/sites
82
- lib.set('asic', 'libarch', libtype)
83
- lib.set('asic', 'site', libtype, sites)
84
-
85
- # model files
86
- lib.add('output', 'slow', 'nldm',
87
- libdir + f'/nldm/sky130_fd_sc_{libtype}__ss_n40C_{slow_v}.lib.gz')
88
- lib.add('output', 'typical', 'nldm',
89
- libdir + f'/nldm/sky130_fd_sc_{libtype}__tt_025C_1v80.lib.gz')
90
- lib.add('output', 'fast', 'nldm',
91
- libdir + f'/nldm/sky130_fd_sc_{libtype}__ff_100C_1v95.lib.gz')
92
-
93
- lib.add('output', stackup, 'lef', libdir + f'/lef/sky130_fd_sc_{libtype}_merged.lef')
94
- lib.add('output', stackup, 'gds', libdir + f'/gds/sky130_fd_sc_{libtype}.gds')
95
- lib.add('output', stackup, 'cdl', libdir + f'/cdl/sky130_fd_sc_{libtype}.cdl')
96
-
97
- lib.add('output', 'rtl', 'verilog', libdir + f'/verilog/sky130_fd_sc_{libtype}.v')
98
- lib.add('output', 'rtl', 'verilog', libdir + '/verilog/primitives.v')
99
-
100
- # antenna cells
101
- lib.add('asic', 'cells', 'antenna', f'sky130_fd_sc_{libtype}__diode_2')
102
-
103
- # clock buffers
104
- lib.add('asic', 'cells', 'clkbuf', [f'sky130_fd_sc_{libtype}__clkbuf_1',
105
- f'sky130_fd_sc_{libtype}__clkbuf_2',
106
- f'sky130_fd_sc_{libtype}__clkbuf_4',
107
- f'sky130_fd_sc_{libtype}__clkbuf_8',
108
- f'sky130_fd_sc_{libtype}__clkbuf_16'])
109
- if libtype == "hdll":
110
- lib.add('asic', 'cells', 'clkbuf', [f'sky130_fd_sc_{libtype}__clkbuf_6',
111
- f'sky130_fd_sc_{libtype}__clkbuf_12'])
112
-
113
- # hold cells
114
- lib.add('asic', 'cells', 'hold', [f'sky130_fd_sc_{libtype}__dlygate4sd1_1',
115
- f'sky130_fd_sc_{libtype}__dlygate4sd2_1',
116
- f'sky130_fd_sc_{libtype}__dlygate4sd3_1'])
117
- if libtype == "hd":
118
- lib.add('asic', 'cells', 'hold', [f'sky130_fd_sc_{libtype}__dlymetal6s2s_1',
119
- f'sky130_fd_sc_{libtype}__dlymetal6s4s_1',
120
- f'sky130_fd_sc_{libtype}__dlymetal6s6s_1'])
121
-
122
- # filler
123
- lib.add('asic', 'cells', 'filler', [f'sky130_fd_sc_{libtype}__fill_1',
124
- f'sky130_fd_sc_{libtype}__fill_2',
125
- f'sky130_fd_sc_{libtype}__fill_4',
126
- f'sky130_fd_sc_{libtype}__fill_8'])
127
-
128
- # Tapcell
129
- lib.add('asic', 'cells', 'tap', f'sky130_fd_sc_{libtype}__tapvpwrvgnd_1')
130
-
131
- # Endcap
132
- lib.add('asic', 'cells', 'endcap', f'sky130_fd_sc_{libtype}__decap_4')
133
-
134
- lib.add('asic', 'cells', 'dontuse', [
135
- f'sky130_fd_sc_{libtype}__probe_p_8',
136
- f'sky130_fd_sc_{libtype}__probec_p_8'
137
- ])
138
- lib.add('asic', 'cells', 'dontuse', dontuse[libtype])
139
-
140
- # tie cells
141
- lib.add('asic', 'cells', 'tie', f'sky130_fd_sc_{libtype}__conb_1')
142
-
143
- # Defaults for OpenROAD tool variables
144
- lib.set('option', 'var', 'openroad_place_density', '0.60')
145
- lib.set('option', 'var', 'openroad_pad_global_place', '0')
146
- lib.set('option', 'var', 'openroad_pad_detail_place', '0')
147
- lib.set('option', 'var', 'openroad_macro_place_halo', ['40', '40'])
148
- lib.set('option', 'var', 'openroad_macro_place_channel', ['80', '80'])
149
-
150
- # Yosys techmap
151
- # TODO: separate this out properly for the different libraries
152
- lib.add('option', 'file', 'yosys_techmap', libdir + '/techmap/yosys/cells_latch.v')
153
- lib.add('option', 'file', 'yosys_tbufmap', libdir + '/techmap/yosys/cells_tristatebuf.v')
154
- if libtype == "hd":
155
- lib.add('option', 'file', 'yosys_addermap', libdir + '/techmap/yosys/cells_adders.v')
156
-
157
- # Openroad specific files
158
- lib.set('option', 'file', 'openroad_pdngen',
159
- libdir + '/apr/openroad/pdngen.tcl')
160
- lib.set('option', 'file', 'openroad_global_connect',
161
- libdir + '/apr/openroad/global_connect.tcl')
162
- lib.set('option', 'file', 'openroad_tapcells',
163
- libdir + '/apr/openroad/tapcell.tcl')
164
-
165
- lib.set('option', 'var', 'yosys_abc_clock_multiplier', "1000") # convert from ns -> ps
166
-
167
- cap_table = {
168
- 'hd': "0.011pF",
169
- 'hdll': "0.011pF"
170
- }
171
- lib.set('option', 'var', 'yosys_abc_constraint_load', cap_table[libtype])
172
-
173
- lib.set('option', 'var', 'yosys_driver_cell', f"sky130_fd_sc_{libtype}__buf_4")
174
- lib.set('option', 'var', 'yosys_buffer_cell', f"sky130_fd_sc_{libtype}__buf_4")
175
- lib.set('option', 'var', 'yosys_buffer_input', "A")
176
- lib.set('option', 'var', 'yosys_buffer_output', "X")
177
- for tool in ('yosys', 'openroad'):
178
- lib.set('option', 'var', f'{tool}_tiehigh_cell', f"sky130_fd_sc_{libtype}__conb_1")
179
- lib.set('option', 'var', f'{tool}_tiehigh_port', "HI")
180
- lib.set('option', 'var', f'{tool}_tielow_cell', f"sky130_fd_sc_{libtype}__conb_1")
181
- lib.set('option', 'var', f'{tool}_tielow_port', "LO")
182
-
183
- # Bambu setup
184
- lib.set('option', 'var', 'bambu_clock_multiplier', "1") # convert from ns -> ns
185
-
186
- libs.append(lib)
187
-
188
- std_lambda_lib = siliconcompiler.Library(f'lambdalib_stdlib_{libname}',
189
- package='lambdapdk')
190
- register_data_source(std_lambda_lib)
191
- std_lambda_lib.add('option', 'ydir', libdir + '/lambda/stdlib')
192
- std_lambda_lib.use(lib)
193
- std_lambda_lib.set('asic', 'logiclib', lib.design)
194
- libs.append(std_lambda_lib)
195
- aux_lambda_lib = siliconcompiler.Library(f'lambdalib_auxlib_{libname}',
196
- package='lambdapdk')
197
- register_data_source(aux_lambda_lib)
198
- aux_lambda_lib.add('option', 'ydir', libdir + '/lambda/auxlib')
199
- aux_lambda_lib.use(std_lambda_lib)
200
- aux_lambda_lib.use(lib)
201
- aux_lambda_lib.set('asic', 'logiclib', lib.design)
202
- aux_lambda_lib.set('option', 'library', std_lambda_lib.design)
203
- libs.append(aux_lambda_lib)
204
-
205
- return libs
206
-
207
-
208
- #########################
209
- if __name__ == "__main__":
210
- for lib in setup(siliconcompiler.Chip('<lib>')):
211
- lib.write_manifest(f'{lib.top()}.json')
11
+ def __init__(self, libtype, slow_v):
12
+ super().__init__()
13
+ self.set_name(f"sky130{libtype}")
14
+
15
+ self.package.set_version("v0_0_2")
16
+
17
+ self.add_asic_pdk(Sky130PDK())
18
+
19
+ self.add_asic_site(["unithd", "unithddbl"])
20
+
21
+ lib_path = Path("lambdapdk", "sky130", "libs", self.name)
22
+
23
+ with self.active_dataroot("lambdapdk"):
24
+ for corner_name, filename in [
25
+ ('slow', f'sky130_fd_sc_{libtype}__ss_n40C_{slow_v}.lib.gz'),
26
+ ('typical', f'sky130_fd_sc_{libtype}__tt_025C_1v80.lib.gz'),
27
+ ('fast', f'sky130_fd_sc_{libtype}__ff_100C_1v95.lib.gz')]:
28
+ with self.active_fileset(f"models.timing.{corner_name}.nldm"):
29
+ self.add_file(lib_path / "nldm" / filename)
30
+ self.add_asic_libcornerfileset(corner_name, "nldm")
31
+
32
+ with self.active_dataroot("lambdapdk"):
33
+ with self.active_fileset("models.physical"):
34
+ self.add_file(lib_path / "lef" / f"sky130_fd_sc_{libtype}_merged.lef")
35
+ self.add_file(lib_path / "gds" / f"sky130_fd_sc_{libtype}.gds")
36
+ self.add_asic_aprfileset()
37
+
38
+ with self.active_fileset("models.lvs"):
39
+ self.add_file(lib_path / "cdl" / f"sky130_fd_sc_{libtype}.cdl")
40
+ self.add_asic_aprfileset()
41
+
42
+ with self.active_fileset("rtl"):
43
+ self.add_file(lib_path / "verilog" / f"sky130_fd_sc_{libtype}.v")
44
+ self.add_file(lib_path / "verilog" / "primitives.v")
45
+
46
+ # antenna cells
47
+ self.add_asic_celllist('antenna', f'sky130_fd_sc_{libtype}__diode_2')
48
+
49
+ # clock buffers
50
+ self.add_asic_celllist('clkbuf', [f'sky130_fd_sc_{libtype}__clkbuf_1',
51
+ f'sky130_fd_sc_{libtype}__clkbuf_2',
52
+ f'sky130_fd_sc_{libtype}__clkbuf_4',
53
+ f'sky130_fd_sc_{libtype}__clkbuf_8',
54
+ f'sky130_fd_sc_{libtype}__clkbuf_16'])
55
+ if libtype == "hdll":
56
+ self.add_asic_celllist('clkbuf', [f'sky130_fd_sc_{libtype}__clkbuf_6',
57
+ f'sky130_fd_sc_{libtype}__clkbuf_12'])
58
+
59
+ # hold cells
60
+ self.add_asic_celllist('hold', [f'sky130_fd_sc_{libtype}__dlygate4sd1_1',
61
+ f'sky130_fd_sc_{libtype}__dlygate4sd2_1',
62
+ f'sky130_fd_sc_{libtype}__dlygate4sd3_1'])
63
+ if libtype == "hd":
64
+ self.add_asic_celllist('hold', [f'sky130_fd_sc_{libtype}__dlymetal6s2s_1',
65
+ f'sky130_fd_sc_{libtype}__dlymetal6s4s_1',
66
+ f'sky130_fd_sc_{libtype}__dlymetal6s6s_1'])
67
+
68
+ # filler
69
+ self.add_asic_celllist('filler', [f'sky130_fd_sc_{libtype}__fill_1',
70
+ f'sky130_fd_sc_{libtype}__fill_2',
71
+ f'sky130_fd_sc_{libtype}__fill_4',
72
+ f'sky130_fd_sc_{libtype}__fill_8'])
73
+
74
+ # Tapcell
75
+ self.add_asic_celllist('tap', f'sky130_fd_sc_{libtype}__tapvpwrvgnd_1')
76
+
77
+ # Endcap
78
+ self.add_asic_celllist('endcap', f'sky130_fd_sc_{libtype}__decap_4')
79
+
80
+ self.add_asic_celllist('dontuse', [
81
+ f'sky130_fd_sc_{libtype}__probe_p_8',
82
+ f'sky130_fd_sc_{libtype}__probec_p_8'
83
+ ])
84
+
85
+ if libtype == "hd":
86
+ self.add_asic_celllist('dontuse', [
87
+ 'sky130_fd_sc_hd__lpflow_bleeder_1',
88
+ 'sky130_fd_sc_hd__lpflow_clkbufkapwr_1',
89
+ 'sky130_fd_sc_hd__lpflow_clkbufkapwr_16',
90
+ 'sky130_fd_sc_hd__lpflow_clkbufkapwr_2',
91
+ 'sky130_fd_sc_hd__lpflow_clkbufkapwr_4',
92
+ 'sky130_fd_sc_hd__lpflow_clkbufkapwr_8',
93
+ 'sky130_fd_sc_hd__lpflow_clkinvkapwr_1',
94
+ 'sky130_fd_sc_hd__lpflow_clkinvkapwr_16',
95
+ 'sky130_fd_sc_hd__lpflow_clkinvkapwr_2',
96
+ 'sky130_fd_sc_hd__lpflow_clkinvkapwr_4',
97
+ 'sky130_fd_sc_hd__lpflow_clkinvkapwr_8',
98
+ 'sky130_fd_sc_hd__lpflow_decapkapwr_12',
99
+ 'sky130_fd_sc_hd__lpflow_decapkapwr_3',
100
+ 'sky130_fd_sc_hd__lpflow_decapkapwr_4',
101
+ 'sky130_fd_sc_hd__lpflow_decapkapwr_6',
102
+ 'sky130_fd_sc_hd__lpflow_decapkapwr_8',
103
+ 'sky130_fd_sc_hd__lpflow_inputiso0n_1',
104
+ 'sky130_fd_sc_hd__lpflow_inputiso0p_1',
105
+ 'sky130_fd_sc_hd__lpflow_inputiso1n_1',
106
+ 'sky130_fd_sc_hd__lpflow_inputiso1p_1',
107
+ 'sky130_fd_sc_hd__lpflow_inputisolatch_1',
108
+ 'sky130_fd_sc_hd__lpflow_isobufsrc_1',
109
+ 'sky130_fd_sc_hd__lpflow_isobufsrc_16',
110
+ 'sky130_fd_sc_hd__lpflow_isobufsrc_2',
111
+ 'sky130_fd_sc_hd__lpflow_isobufsrc_4',
112
+ 'sky130_fd_sc_hd__lpflow_isobufsrc_8',
113
+ 'sky130_fd_sc_hd__lpflow_isobufsrckapwr_16',
114
+ 'sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_1',
115
+ 'sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_2',
116
+ 'sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_4',
117
+ 'sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_4',
118
+ 'sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_1',
119
+ 'sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_2',
120
+ 'sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_4'])
121
+ elif libtype == "hdll":
122
+ self.add_asic_celllist('dontuse', [
123
+ 'sky130_fd_sc_hdll__inputiso0p_1',
124
+ 'sky130_fd_sc_hdll__inputiso0n_1',
125
+ 'sky130_fd_sc_hdll__inputiso1p_1',
126
+ 'sky130_fd_sc_hdll__inputiso1n_1',
127
+ 'sky130_fd_sc_hdll__isobufsrc_1',
128
+ 'sky130_fd_sc_hdll__isobufsrc_2',
129
+ 'sky130_fd_sc_hdll__isobufsrc_4',
130
+ 'sky130_fd_sc_hdll__isobufsrc_8',
131
+ 'sky130_fd_sc_hdll__isobufsrc_16'])
132
+
133
+ # tie cells
134
+ self.add_asic_celllist('tie', f'sky130_fd_sc_{libtype}__conb_1')
135
+
136
+ # Setup for yosys
137
+ with self.active_dataroot("lambdapdk"):
138
+ cap_table = {
139
+ 'hd': 11,
140
+ 'hdll': 11
141
+ }
142
+ self.set_yosys_driver_cell(f"sky130_fd_sc_{libtype}__buf_4")
143
+ self.set_yosys_buffer_cell(f"sky130_fd_sc_{libtype}__buf_4", "A", "X")
144
+ self.set_yosys_tielow_cell(f"sky130_fd_sc_{libtype}__conb_1", "LO")
145
+ self.set_yosys_tiehigh_cell(f"sky130_fd_sc_{libtype}__conb_1", "HI")
146
+ self.set_yosys_abc(1000, cap_table[libtype])
147
+ self.set_yosys_tristatebuffer_map(
148
+ lib_path / "techmap" / "yosys" / "cells_tristatebuf.v")
149
+ if libtype == "hd":
150
+ self.set_yosys_adder_map(lib_path / "techmap" / "yosys" / "cells_adders.v")
151
+ self.add_yosys_tech_map(lib_path / "techmap" / "yosys" / "cells_latch.v")
152
+
153
+ # Setup for OpenROAD
154
+ with self.active_dataroot("lambdapdk"):
155
+ with self.active_fileset("openroad.powergrid"):
156
+ self.add_file(lib_path / "apr" / "openroad" / "pdngen.tcl")
157
+ self.add_openroad_powergridfileset()
158
+ with self.active_fileset("openroad.globalconnect"):
159
+ self.add_file(lib_path / "apr" / "openroad" / "global_connect.tcl")
160
+ self.add_openroad_globalconnectfileset()
161
+
162
+ self.set_openroad_placement_density(0.60)
163
+ self.set_openroad_tielow_cell(f"sky130_fd_sc_{libtype}__conb_1", "LO")
164
+ self.set_openroad_tiehigh_cell(f"sky130_fd_sc_{libtype}__conb_1", "HI")
165
+ self.set_openroad_macro_placement_halo(40, 40)
166
+ self.set_openroad_tapcells_file(lib_path / "apr" / "openroad" / "tapcell.tcl")
167
+
168
+ # Setup for bambu
169
+ self.set_bambu_clock_multiplier(1)
170
+
171
+
172
+ class Sky130_SCHDLibrary(_Sky130_SCLibrary):
173
+ def __init__(self):
174
+ super().__init__("hd", "1v40")
175
+
176
+
177
+ class Sky130_SCHDLLLibrary(_Sky130_SCLibrary):
178
+ def __init__(self):
179
+ super().__init__("hdll", "1v44")
@@ -1,45 +1,58 @@
1
- from siliconcompiler import Chip, Library
2
- from lambdapdk import register_data_source
1
+ from pathlib import Path
3
2
 
3
+ from lambdalib import LambalibTechLibrary
4
+ from lambdapdk import LambdaLibrary, _LambdaPath
5
+ from lambdapdk.sky130 import Sky130PDK
4
6
 
5
- def setup():
6
- libs = []
7
- stackup = '5M1LI'
8
7
 
9
- for config in ('64x256',):
10
- mem_name = f'sky130_sram_1rw1r_{config}_8'
11
- lib = Library(mem_name, package='lambdapdk')
12
- register_data_source(lib)
13
- path_base = 'lambdapdk/sky130/libs/sky130sram'
14
- lib.add('output', stackup, 'lef', f'{path_base}/{mem_name}/lef/{mem_name}.lef.gz')
15
- lib.add('output', stackup, 'gds', f'{path_base}/{mem_name}/gds/{mem_name}.gds')
16
- lib.add('output', stackup, 'cdl', f'{path_base}/{mem_name}/spice/{mem_name}.lvs.sp')
8
+ class Sky130_SRAM_64x256(LambdaLibrary):
9
+ def __init__(self):
10
+ super().__init__()
11
+ self.set_name('sky130_sram_1rw1r_64x256_8')
17
12
 
18
- for corner in ('slow', 'fast', 'typical'):
19
- lib.add('output', corner, 'nldm',
20
- f'{path_base}/{mem_name}/nldm/{mem_name}_TT_1p8V_25C.lib')
21
- lib.add('output', corner, 'spice', f'{path_base}/{mem_name}/spice/{mem_name}.sp')
13
+ self.add_asic_pdk(Sky130PDK())
22
14
 
23
- lib.set('option', 'file', 'openroad_pdngen',
24
- f'{path_base}/apr/openroad/pdngen.tcl')
25
- lib.set('option', 'file', 'openroad_global_connect',
26
- f'{path_base}/apr/openroad/global_connect.tcl')
15
+ path_base = Path('lambdapdk', 'sky130', 'libs', "sky130sram")
27
16
 
28
- libs.append(lib)
17
+ with self.active_dataroot("lambdapdk"):
18
+ with self.active_fileset("models.timing.nldm"):
19
+ self.add_file(path_base / self.name / "nldm" / f"{self.name}_TT_1p8V_25C.lib")
20
+ self.add_asic_libcornerfileset("generic", "nldm")
29
21
 
30
- lambda_lib = Library('lambdalib_sky130sram', package='lambdapdk')
31
- register_data_source(lambda_lib)
32
- lambda_lib.add('option', 'ydir', 'lambdapdk/sky130/libs/sky130sram/lambda')
33
- for lib in libs:
34
- lambda_lib.use(lib)
35
- lambda_lib.add('asic', 'macrolib', lib.design)
22
+ with self.active_dataroot("lambdapdk"):
23
+ with self.active_fileset("models.physical"):
24
+ self.add_file(path_base / self.name / "lef" / f"{self.name}.lef.gz")
25
+ self.add_file(path_base / self.name / "gds" / f"{self.name}.gds")
26
+ self.add_asic_aprfileset()
36
27
 
37
- libs.append(lambda_lib)
28
+ with self.active_fileset("models.lvs"):
29
+ self.add_file(path_base / self.name / "spice" / f"{self.name}.lvs.sp",
30
+ filetype="cdl")
31
+ self.add_asic_aprfileset()
38
32
 
39
- return libs
33
+ with self.active_fileset("models.spice"):
34
+ self.add_file(path_base / self.name / "spice" / f"{self.name}.sp")
40
35
 
36
+ with self.active_dataroot("lambdapdk"):
37
+ with self.active_fileset("openroad.powergrid"):
38
+ self.add_file(path_base / "apr" / "openroad" / "pdngen.tcl")
39
+ self.add_openroad_powergridfileset()
40
+ with self.active_fileset("openroad.globalconnect"):
41
+ self.add_file(path_base / "apr" / "openroad" / "global_connect.tcl")
42
+ self.add_openroad_globalconnectfileset()
41
43
 
42
- #########################
43
- if __name__ == "__main__":
44
- for lib in setup(Chip('<lib>')):
45
- lib.write_manifest(f'{lib.top()}.json')
44
+
45
+ class Sky130Lambdalib_SinglePort(LambalibTechLibrary, _LambdaPath):
46
+ def __init__(self):
47
+ super().__init__("la_spram", [
48
+ Sky130_SRAM_64x256])
49
+ self.set_name("sky130_la_spram")
50
+
51
+ # version
52
+ self.package.set_version("v1")
53
+
54
+ lib_path = Path("lambdapdk", "sky130", "libs", "sky130sram")
55
+
56
+ with self.active_dataroot("lambdapdk"):
57
+ with self.active_fileset("rtl"):
58
+ self.add_file(lib_path / "lambda" / "la_spram.v")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lambdapdk
3
- Version: 0.1.56
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.27.0
201
+ Requires-Dist: siliconcompiler>=0.35.0
202
+ Requires-Dist: lambdalib>=0.4.0
202
203
  Provides-Extra: test
203
204
  Requires-Dist: flake8==7.3.0; extra == "test"
204
- Requires-Dist: pytest==8.4.1; 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.6.0; extra == "test"
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,30 @@
1
+ lambdapdk/__init__.py,sha256=695yN4blHOv8GcCF-5gABlhaHezfVzzQ2oaOHCEfBQQ,17165
2
+ lambdapdk/asap7/__init__.py,sha256=d3ZcudfvA_Btn8nHnYSodSHVSUEPm5UPF1aOnoS_gf4,4250
3
+ lambdapdk/asap7/libs/asap7sc7p5t.py,sha256=4q1qzeI3pujNwQcsp6JkjUcdIm8hX2f4TDe0SpKLRJQ,5015
4
+ lambdapdk/asap7/libs/fakeio7.py,sha256=zr2E0RS53Bhd-Du_BXounJZzTYqD5-04E4C3BWHV9z0,8928
5
+ lambdapdk/asap7/libs/fakekit7.py,sha256=3AG-xHYw9PyCwdMKeo529DiXreejYUxd16uS2t1Bt1M,597
6
+ lambdapdk/asap7/libs/fakeram7.py,sha256=tjPAbOyFSF8j0gqM6RT2MmLslbdcBrJtdy0Jvo-xUoE,6465
7
+ lambdapdk/freepdk45/__init__.py,sha256=CyijzU7PbU3xeZvoKtjKYJOw6ASQZ95YExIl2lR5tSA,3167
8
+ lambdapdk/freepdk45/libs/fakeram45.py,sha256=-9gnYev7pa5s_pNr5L7mfhlqYEUt6Z8yqkUbEZJzbvg,2580
9
+ lambdapdk/freepdk45/libs/nangate45.py,sha256=xk4yQOuqshAXMR1_QEutyyL5_xmk98gbLcjmpRE8AK4,3741
10
+ lambdapdk/gf180/__init__.py,sha256=uuF94SUCl0U1ibBFLfIVHjcXlAJLNtwogn9ZZBuh0j0,9154
11
+ lambdapdk/gf180/libs/gf180io.py,sha256=YsmOERAGq70vYaWNZomwS1hhBcseb-46_3B4ITKHw48,25868
12
+ lambdapdk/gf180/libs/gf180mcu.py,sha256=OTAFZvu5VdK7wg2UCZzdbcWdsvBEdVXeW5q6jK5tiuk,8601
13
+ lambdapdk/gf180/libs/gf180sram.py,sha256=zGihn40VJryD6PNlUcL6C0z4lVq76Wo8v6QLOtSBzEo,4796
14
+ lambdapdk/ihp130/__init__.py,sha256=AClzl8VmSSgR02RqtIMICga6lc0c34kybsgro-HgNpU,4721
15
+ lambdapdk/ihp130/libs/sg13g2_io.py,sha256=DreZ2vndxhdytIDiic7fJyglOlK8qD9lj_py0rz2Rmg,16329
16
+ lambdapdk/ihp130/libs/sg13g2_sram.py,sha256=QFgPzPoORKj1I9A-IAHKo7i2V9DdKVnE9fIeJDcfYQw,3462
17
+ lambdapdk/ihp130/libs/sg13g2_stdcell.py,sha256=j_rnf0_n_V00XGdXnYDSabQZL78Yekkmq3gfkOQhyzQ,5192
18
+ lambdapdk/interposer/__init__.py,sha256=zZTMSR4TKNifJYN0rGE-7xvoanfAO3RAdUtjZ4pzgLw,4747
19
+ lambdapdk/interposer/_generator.py,sha256=Uf9i7gfjgntUpLmxsRmOfzfgh26iQ3nfZmrdIx59UtA,15016
20
+ lambdapdk/interposer/libs/bumps.py,sha256=gLz05sR72NFVZkbEXB1LRUQVkIegrE8JeH5gyBOVRWE,1730
21
+ lambdapdk/sky130/__init__.py,sha256=uHZd90bb_bXyoUgTUM8L78XwCJRvoTBlHRCL6CE3t7s,3798
22
+ lambdapdk/sky130/libs/sky130io.py,sha256=gcYlzwY2JpEsi6ZrMJ2s8ZM61kVI-vg9S18jXv_lqoU,9226
23
+ lambdapdk/sky130/libs/sky130sc.py,sha256=--FJklz6iJwXuFJNZJ-MKE3dVFNNFs9JkOd004z4U7A,8743
24
+ lambdapdk/sky130/libs/sky130sram.py,sha256=q24DlTjI7I9JaCbslAhQG0yLMPRJfM2P8zN8SHNXgOw,2306
25
+ lambdapdk-0.2.0.dist-info/licenses/LICENSE,sha256=2TIhku7H905BsYloYoCwat2JsdkGYc_qsnvU-p7P-IQ,10766
26
+ lambdapdk-0.2.0.dist-info/METADATA,sha256=JaHddidXnEWlMYH7eeNz3Zjx4iDxxw4YLiEjoY8TFfs,13946
27
+ lambdapdk-0.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
+ lambdapdk-0.2.0.dist-info/entry_points.txt,sha256=M3DJNwBP0Yv7_3UQ4scoJihxcHncDMkD2cEAbaK2XOw,61
29
+ lambdapdk-0.2.0.dist-info/top_level.txt,sha256=5wk8psZwCcQgSjOlWTihBeDkSIViGn8I3j5yALbs59s,10
30
+ lambdapdk-0.2.0.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ [siliconcompiler.docs]
2
+ linkcode = lambdapdk:get_docs_codeurl
@@ -1,30 +0,0 @@
1
- lambdapdk/__init__.py,sha256=dl2LeS3DgDIZgLSBya7T7q778FD4opRq2ALBx3q1vK0,4195
2
- lambdapdk/asap7/__init__.py,sha256=kC5GWACMeA4MKKpKcJBDHoeZLvZKwdRLi3HQCajl1H8,4745
3
- lambdapdk/asap7/libs/asap7sc7p5t.py,sha256=kIli2Uuyc3ubG9P58rpu4SJxod8A306-ORZmP95X9vg,6052
4
- lambdapdk/asap7/libs/fakeio7.py,sha256=t4OQ7uljg4jh14bf3o4wsnI5gNkLEVpMs1drispc7LE,978
5
- lambdapdk/asap7/libs/fakekit7.py,sha256=IpyAHOCXBPsHfAxW-vS0Vyanws9WnEUDnMbUAzxY2U4,604
6
- lambdapdk/asap7/libs/fakeram7.py,sha256=oAn6nLYPGaWG7hOvCzPCoa_lrLMH30LwipFXQ1qSNZg,1559
7
- lambdapdk/freepdk45/__init__.py,sha256=6Iv6zJ0It0KfH4e_3bjn_Yyv5uaLCh4N_tTZm_MoBEQ,3672
8
- lambdapdk/freepdk45/libs/fakeram45.py,sha256=vX0bqC2xKP1sfihJKEHzHTighNqLOB2egavzIiQdAr4,1245
9
- lambdapdk/freepdk45/libs/nangate45.py,sha256=XaIhQvwzpp2bsAShG2J3hMbL4ISAbqxOnO692KBG0m0,4892
10
- lambdapdk/gf180/__init__.py,sha256=fbJ4z0kXBftIHAsgyqJmbpZfpWf9PWuxXgoQoG3IhQ0,7963
11
- lambdapdk/gf180/libs/gf180io.py,sha256=6WgsALOaKWYG6RfNFz6sg36zmfZZFl2HnsDWOWYy1UM,2751
12
- lambdapdk/gf180/libs/gf180mcu.py,sha256=N2ny2_OJu_0xJAEqyZ1aA0mO3vvy5u5NmXALFhlqpJs,6811
13
- lambdapdk/gf180/libs/gf180sram.py,sha256=gE64wFo8wjDwmhL7_0UTl1gyfUZ8IeaILHNjwu7vfrg,2294
14
- lambdapdk/ihp130/__init__.py,sha256=7UQLjQDjr3O8H-d3ds8tF9qZINUXcS46H-ZKVcyCZ2g,5500
15
- lambdapdk/ihp130/libs/sg13g2_io.py,sha256=60Xxh2DC2n_nHsCKKjgQpNYqxf4ZuxxgfM3aaIfJBTQ,2158
16
- lambdapdk/ihp130/libs/sg13g2_sram.py,sha256=CgzCB7TfOtFmBAy7Ogqlm4_f0ZCqcVDydCLdYkfDc1A,2081
17
- lambdapdk/ihp130/libs/sg13g2_stdcell.py,sha256=rm1g2u8Bm-OpJzaEe2COiX-yfI18Cy96fRv3ikNwYoM,5097
18
- lambdapdk/interposer/__init__.py,sha256=UEAxcCLo-0OheGNCOTLpwnF05HFAz3agStFBTdcgS58,4039
19
- lambdapdk/interposer/_generator.py,sha256=Uf9i7gfjgntUpLmxsRmOfzfgh26iQ3nfZmrdIx59UtA,15016
20
- lambdapdk/interposer/libs/bumps.py,sha256=-b3cNOUBKhzzxoWI1Y047g9Ev3a_mXBMLKO3BaHo1sI,771
21
- lambdapdk/sky130/__init__.py,sha256=3-UxGN0A1Kr8tlq8hVkxqDjENuzkkK1MOqHteoih9m8,4113
22
- lambdapdk/sky130/libs/sky130io.py,sha256=wFmN9RC98f6OFM5E5acCUgPe35tVTKciJzIcUBlmumo,2029
23
- lambdapdk/sky130/libs/sky130sc.py,sha256=vDqt7mpEmwBwuK1kkEr6g2lxBs7dMpEs3HkbS8EC85Y,9606
24
- lambdapdk/sky130/libs/sky130sram.py,sha256=CFn8Ve0WkHBdzlkZ1LPZJ3hknwE2IZGkV5Cr2qdiOZ8,1643
25
- lambdapdk-0.1.56.dist-info/licenses/LICENSE,sha256=2TIhku7H905BsYloYoCwat2JsdkGYc_qsnvU-p7P-IQ,10766
26
- lambdapdk-0.1.56.dist-info/METADATA,sha256=ZBVQYX1mZDlUT8Y7uwguP9ZKSDH_uFJIPUKct-YQRgA,13964
27
- lambdapdk-0.1.56.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
- lambdapdk-0.1.56.dist-info/entry_points.txt,sha256=pAsLLqQtg5qJC63h5tDVuyxPYJAkaTUgAxscBiohPD4,128
29
- lambdapdk-0.1.56.dist-info/top_level.txt,sha256=5wk8psZwCcQgSjOlWTihBeDkSIViGn8I3j5yALbs59s,10
30
- lambdapdk-0.1.56.dist-info/RECORD,,
@@ -1,4 +0,0 @@
1
- [siliconcompiler.docs]
2
- libs = lambdapdk:get_docs_libraries
3
- linkcode = lambdapdk:get_docs_codeurl
4
- pdks = lambdapdk:get_docs_pdks