lambdapdk 0.1.55__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.
- lambdapdk/__init__.py +444 -113
- lambdapdk/asap7/__init__.py +73 -99
- lambdapdk/asap7/libs/asap7sc7p5t.py +124 -159
- lambdapdk/asap7/libs/fakeio7.py +260 -22
- lambdapdk/asap7/libs/fakekit7.py +14 -19
- lambdapdk/asap7/libs/fakeram7.py +233 -33
- lambdapdk/freepdk45/__init__.py +59 -89
- lambdapdk/freepdk45/libs/fakeram45.py +75 -27
- lambdapdk/freepdk45/libs/nangate45.py +90 -125
- lambdapdk/gf180/__init__.py +216 -131
- lambdapdk/gf180/libs/gf180io.py +744 -68
- lambdapdk/gf180/libs/gf180mcu.py +188 -138
- lambdapdk/gf180/libs/gf180sram.py +123 -63
- lambdapdk/ihp130/__init__.py +85 -120
- lambdapdk/ihp130/libs/sg13g2_io.py +450 -41
- lambdapdk/ihp130/libs/sg13g2_sram.py +97 -52
- lambdapdk/ihp130/libs/sg13g2_stdcell.py +117 -135
- lambdapdk/interposer/__init__.py +110 -74
- lambdapdk/interposer/libs/bumps.py +41 -26
- lambdapdk/sky130/__init__.py +70 -92
- lambdapdk/sky130/libs/sky130io.py +248 -37
- lambdapdk/sky130/libs/sky130sc.py +174 -206
- lambdapdk/sky130/libs/sky130sram.py +47 -34
- {lambdapdk-0.1.55.dist-info → lambdapdk-0.2.0.dist-info}/METADATA +6 -6
- lambdapdk-0.2.0.dist-info/RECORD +30 -0
- lambdapdk-0.2.0.dist-info/entry_points.txt +2 -0
- lambdapdk-0.1.55.dist-info/RECORD +0 -30
- lambdapdk-0.1.55.dist-info/entry_points.txt +0 -4
- {lambdapdk-0.1.55.dist-info → lambdapdk-0.2.0.dist-info}/WHEEL +0 -0
- {lambdapdk-0.1.55.dist-info → lambdapdk-0.2.0.dist-info}/licenses/LICENSE +0 -0
- {lambdapdk-0.1.55.dist-info → lambdapdk-0.2.0.dist-info}/top_level.txt +0 -0
lambdapdk/sky130/__init__.py
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
|
+
from pathlib import Path
|
|
1
2
|
|
|
2
|
-
import
|
|
3
|
-
import siliconcompiler
|
|
4
|
-
from lambdapdk import register_data_source
|
|
3
|
+
from lambdapdk import LambdaPDK
|
|
5
4
|
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
# PDK Setup
|
|
9
|
-
####################################################
|
|
10
|
-
def setup():
|
|
6
|
+
class Sky130PDK(LambdaPDK):
|
|
11
7
|
'''
|
|
12
8
|
The 'skywater130' Open Source PDK is a collaboration between Google and
|
|
13
9
|
SkyWater Technology Foundry to provide a fully open source Process
|
|
@@ -36,88 +32,70 @@ def setup():
|
|
|
36
32
|
|
|
37
33
|
* https://github.com/google/skywater-pdk
|
|
38
34
|
'''
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
# Hide the 81/4 'areaid.standardc' layer by default; it puts opaque purple over most core areas.
|
|
108
|
-
pdk.set('pdk', process, 'var', 'klayout', 'hide_layers', stackup, ['areaid.standardc'])
|
|
109
|
-
|
|
110
|
-
# PEX
|
|
111
|
-
for corner in ["minimum", "typical", "maximum"]:
|
|
112
|
-
pdk.set('pdk', process, 'pexmodel', 'openroad', stackup, corner,
|
|
113
|
-
pdkdir + '/pex/openroad/' + corner + '.tcl')
|
|
114
|
-
pdk.set('pdk', process, 'pexmodel', 'openroad-openrcx', stackup, corner,
|
|
115
|
-
pdkdir + '/pex/openroad/' + corner + '.rules')
|
|
116
|
-
|
|
117
|
-
return pdk
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
#########################
|
|
121
|
-
if __name__ == "__main__":
|
|
122
|
-
pdk = setup()
|
|
123
|
-
pdk.write_manifest(f'{pdk.top()}.json')
|
|
35
|
+
def __init__(self):
|
|
36
|
+
super().__init__()
|
|
37
|
+
self.set_name("skywater130")
|
|
38
|
+
|
|
39
|
+
self.set_foundry("skywater")
|
|
40
|
+
self.package.set_version("v0_0_2")
|
|
41
|
+
self.set_stackup("5M1LI")
|
|
42
|
+
self.set_node(130)
|
|
43
|
+
|
|
44
|
+
pdk_path = Path("lambdapdk", "sky130", "base")
|
|
45
|
+
|
|
46
|
+
with self.active_dataroot("lambdapdk"):
|
|
47
|
+
# APR Setup
|
|
48
|
+
with self.active_fileset("views.lef"):
|
|
49
|
+
self.add_file(pdk_path / "apr" / "sky130_fd_sc.tlef", filetype="lef")
|
|
50
|
+
for tool in ('openroad', 'klayout', 'magic'):
|
|
51
|
+
self.add_aprtechfileset(tool)
|
|
52
|
+
|
|
53
|
+
# DRC Runset
|
|
54
|
+
with self.active_fileset("magic.drc"):
|
|
55
|
+
self.add_file(pdk_path / "setup" / "magic" / "sky130A.tech", filetype="tech")
|
|
56
|
+
self.add_runsetfileset("drc", "magic", "basic")
|
|
57
|
+
|
|
58
|
+
# LVS Runset
|
|
59
|
+
with self.active_fileset("netgen.lvs"):
|
|
60
|
+
self.add_file(pdk_path / "setup" / "netgen" / "lvs_setup.tcl", filetype="tcl")
|
|
61
|
+
self.add_runsetfileset("lvs", "netgen", "basic")
|
|
62
|
+
|
|
63
|
+
self.set_aprroutinglayers(min="met1", max="met5")
|
|
64
|
+
|
|
65
|
+
# Klayout setup
|
|
66
|
+
with self.active_dataroot("lambdapdk"):
|
|
67
|
+
with self.active_fileset("klayout.techmap"):
|
|
68
|
+
self.add_file(pdk_path / "setup" / "klayout" / "skywater130.lyt",
|
|
69
|
+
filetype="layermap")
|
|
70
|
+
self.add_file(pdk_path / "setup" / "klayout" / "sky130A.lyp", filetype="display")
|
|
71
|
+
self.add_layermapfileset("klayout", "def", "klayout")
|
|
72
|
+
self.add_displayfileset("klayout")
|
|
73
|
+
# Hide the 81/4 'areaid.standardc' layer by default; it puts opaque purple over most
|
|
74
|
+
# core areas.
|
|
75
|
+
self.add_klayout_hidelayers('areaid.standardc')
|
|
76
|
+
|
|
77
|
+
# OpenROAD setup
|
|
78
|
+
self.set_openroad_rclayers(signal="met3", clock="met5")
|
|
79
|
+
|
|
80
|
+
# OpenROAD global routing grid derating
|
|
81
|
+
for layer, derate in [
|
|
82
|
+
('li1', 1.0),
|
|
83
|
+
('met1', 0.40),
|
|
84
|
+
('met2', 0.40),
|
|
85
|
+
('met3', 0.30),
|
|
86
|
+
('met4', 0.30),
|
|
87
|
+
('met5', 0.30)]:
|
|
88
|
+
self.set_openroad_globalroutingderating(layer, derate)
|
|
89
|
+
|
|
90
|
+
self.add_openroad_pinlayers(vertical="met2", horizontal="met3")
|
|
91
|
+
|
|
92
|
+
# OpenROAD PEX
|
|
93
|
+
with self.active_dataroot("lambdapdk"):
|
|
94
|
+
for corner in ["minimum", "typical", "maximum"]:
|
|
95
|
+
with self.active_fileset(f"openroad.pex.{corner}"):
|
|
96
|
+
self.add_file(pdk_path / "pex" / "openroad" / f"{corner}.tcl", filetype="tcl")
|
|
97
|
+
self.add_file(pdk_path / "pex" / "openroad" / f"{corner}.rules",
|
|
98
|
+
filetype="openrcx")
|
|
99
|
+
|
|
100
|
+
self.add_pexmodelfileset("openroad", corner)
|
|
101
|
+
self.add_pexmodelfileset("openroad-openrcx", corner)
|
|
@@ -1,53 +1,264 @@
|
|
|
1
|
-
import
|
|
2
|
-
import siliconcompiler
|
|
3
|
-
from lambdapdk import register_data_source
|
|
1
|
+
from pathlib import Path
|
|
4
2
|
|
|
3
|
+
from siliconcompiler import ASIC
|
|
4
|
+
from lambdalib import LambalibTechLibrary
|
|
5
|
+
from lambdapdk import LambdaLibrary, _LambdaPath
|
|
6
|
+
from lambdapdk.sky130 import Sky130PDK
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
|
|
9
|
+
class Sky130_IOLibrary(LambdaLibrary):
|
|
7
10
|
'''
|
|
8
11
|
Skywater130 I/O library.
|
|
9
12
|
'''
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
def __init__(self):
|
|
14
|
+
super().__init__()
|
|
15
|
+
self.set_name("sky130io")
|
|
16
|
+
|
|
17
|
+
self.add_asic_pdk(Sky130PDK())
|
|
18
|
+
|
|
19
|
+
path_base = Path('lambdapdk', 'sky130', 'libs', "sky130io")
|
|
20
|
+
|
|
21
|
+
with self.active_dataroot("lambdapdk"):
|
|
22
|
+
with self.active_fileset("models.timing.nldm"):
|
|
23
|
+
self.add_file(path_base / "nldm" / "sky130_dummy_io.lib")
|
|
24
|
+
self.add_asic_libcornerfileset("generic", "nldm")
|
|
25
|
+
|
|
26
|
+
with self.active_dataroot("lambdapdk"):
|
|
27
|
+
with self.active_fileset("models.physical"):
|
|
28
|
+
self.add_file(path_base / "lef" / "sky130_ef_io.lef")
|
|
29
|
+
self.add_file(path_base / "gds" / "sky130_ef_io.gds")
|
|
30
|
+
self.add_file(path_base / "gds" / "sky130_fd_io.gds")
|
|
31
|
+
self.add_file(path_base / "gds" / "sky130_ef_io__gpiov2_pad_wrapped.gds")
|
|
32
|
+
self.add_asic_aprfileset()
|
|
33
|
+
|
|
34
|
+
with self.active_fileset("rtl"):
|
|
35
|
+
self.add_file(path_base / "verilog" / "sky130_ef_io.v")
|
|
36
|
+
self.add_file(path_base / "verilog" / "sky130_fd_io.v")
|
|
37
|
+
self.add_file(path_base / "verilog" / "sky130_ef_io__gpiov2_pad_wrapped.v")
|
|
38
|
+
self.add_file(path_base / "verilog" / "sky130_ef_io__analog_pad.v")
|
|
39
|
+
|
|
40
|
+
# TODO defines?
|
|
41
|
+
|
|
42
|
+
self.add_asic_celllist('filler', ['sky130_ef_io__com_bus_slice_1um',
|
|
43
|
+
'sky130_ef_io__com_bus_slice_5um',
|
|
44
|
+
'sky130_ef_io__com_bus_slice_10um',
|
|
45
|
+
'sky130_ef_io__com_bus_slice_20um'])
|
|
46
|
+
|
|
47
|
+
with self.active_dataroot("lambdapdk"):
|
|
48
|
+
with self.active_fileset("models.blackbox"):
|
|
49
|
+
self.add_file(path_base / "blackbox" / "sky130_ef_io.v")
|
|
50
|
+
self.add_file(path_base / "blackbox" / "sky130_fd_io.v")
|
|
51
|
+
self.add_yosys_blackbox_fileset("models.blackbox")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class Sky130Lambdalib_la_ioanalog(LambalibTechLibrary, _LambdaPath):
|
|
55
|
+
def __init__(self):
|
|
56
|
+
super().__init__("la_ioanalog", [Sky130_IOLibrary])
|
|
57
|
+
self.set_name("sky130_la_ioanalog")
|
|
58
|
+
|
|
59
|
+
# version
|
|
60
|
+
self.package.set_version("v1")
|
|
61
|
+
|
|
62
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
63
|
+
|
|
64
|
+
with self.active_dataroot("lambdapdk"):
|
|
65
|
+
with self.active_fileset("rtl"):
|
|
66
|
+
self.add_file(lib_path / "lambda" / "la_ioanalog.v")
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class Sky130Lambdalib_la_iobidir(LambalibTechLibrary, _LambdaPath):
|
|
70
|
+
def __init__(self):
|
|
71
|
+
super().__init__("la_iobidir", [Sky130_IOLibrary])
|
|
72
|
+
self.set_name("sky130_la_iobidir")
|
|
73
|
+
|
|
74
|
+
# version
|
|
75
|
+
self.package.set_version("v1")
|
|
76
|
+
|
|
77
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
78
|
+
|
|
79
|
+
with self.active_dataroot("lambdapdk"):
|
|
80
|
+
with self.active_fileset("rtl"):
|
|
81
|
+
self.add_file(lib_path / "lambda" / "la_iobidir.v")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class Sky130Lambdalib_la_ioclamp(LambalibTechLibrary, _LambdaPath):
|
|
85
|
+
def __init__(self):
|
|
86
|
+
super().__init__("la_ioclamp", [Sky130_IOLibrary])
|
|
87
|
+
self.set_name("sky130_la_ioclamp")
|
|
88
|
+
|
|
89
|
+
# version
|
|
90
|
+
self.package.set_version("v1")
|
|
91
|
+
|
|
92
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
93
|
+
|
|
94
|
+
with self.active_dataroot("lambdapdk"):
|
|
95
|
+
with self.active_fileset("rtl"):
|
|
96
|
+
self.add_file(lib_path / "lambda" / "la_ioclamp.v")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class Sky130Lambdalib_la_iocorner(LambalibTechLibrary, _LambdaPath):
|
|
100
|
+
def __init__(self):
|
|
101
|
+
super().__init__("la_iocorner", [Sky130_IOLibrary])
|
|
102
|
+
self.set_name("sky130_la_iocorner")
|
|
103
|
+
|
|
104
|
+
# version
|
|
105
|
+
self.package.set_version("v1")
|
|
106
|
+
|
|
107
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
108
|
+
|
|
109
|
+
with self.active_dataroot("lambdapdk"):
|
|
110
|
+
with self.active_fileset("rtl"):
|
|
111
|
+
self.add_file(lib_path / "lambda" / "la_iocorner.v")
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class Sky130Lambdalib_la_ioinput(LambalibTechLibrary, _LambdaPath):
|
|
115
|
+
def __init__(self):
|
|
116
|
+
super().__init__("la_ioinput", [Sky130_IOLibrary])
|
|
117
|
+
self.set_name("sky130_la_ioinput")
|
|
118
|
+
|
|
119
|
+
# version
|
|
120
|
+
self.package.set_version("v1")
|
|
121
|
+
|
|
122
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
123
|
+
|
|
124
|
+
with self.active_dataroot("lambdapdk"):
|
|
125
|
+
with self.active_fileset("rtl"):
|
|
126
|
+
self.add_file(lib_path / "lambda" / "la_ioinput.v")
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
class Sky130Lambdalib_la_iorxdiff(LambalibTechLibrary, _LambdaPath):
|
|
130
|
+
def __init__(self):
|
|
131
|
+
super().__init__("la_iorxdiff", [Sky130_IOLibrary])
|
|
132
|
+
self.set_name("sky130_la_iorxdiff")
|
|
133
|
+
|
|
134
|
+
# version
|
|
135
|
+
self.package.set_version("v1")
|
|
136
|
+
|
|
137
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
138
|
+
|
|
139
|
+
with self.active_dataroot("lambdapdk"):
|
|
140
|
+
with self.active_fileset("rtl"):
|
|
141
|
+
self.add_file(lib_path / "lambda" / "la_iorxdiff.v")
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class Sky130Lambdalib_la_iotxdiff(LambalibTechLibrary, _LambdaPath):
|
|
145
|
+
def __init__(self):
|
|
146
|
+
super().__init__("la_iotxdiff", [Sky130_IOLibrary])
|
|
147
|
+
self.set_name("sky130_la_iotxdiff")
|
|
148
|
+
|
|
149
|
+
# version
|
|
150
|
+
self.package.set_version("v1")
|
|
151
|
+
|
|
152
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
153
|
+
|
|
154
|
+
with self.active_dataroot("lambdapdk"):
|
|
155
|
+
with self.active_fileset("rtl"):
|
|
156
|
+
self.add_file(lib_path / "lambda" / "la_iotxdiff.v")
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class Sky130Lambdalib_la_iovdd(LambalibTechLibrary, _LambdaPath):
|
|
160
|
+
def __init__(self):
|
|
161
|
+
super().__init__("la_iovdd", [Sky130_IOLibrary])
|
|
162
|
+
self.set_name("sky130_la_iovdd")
|
|
163
|
+
|
|
164
|
+
# version
|
|
165
|
+
self.package.set_version("v1")
|
|
166
|
+
|
|
167
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
168
|
+
|
|
169
|
+
with self.active_dataroot("lambdapdk"):
|
|
170
|
+
with self.active_fileset("rtl"):
|
|
171
|
+
self.add_file(lib_path / "lambda" / "la_iovdd.v")
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
class Sky130Lambdalib_la_iovdda(LambalibTechLibrary, _LambdaPath):
|
|
175
|
+
def __init__(self):
|
|
176
|
+
super().__init__("la_iovdda", [Sky130_IOLibrary])
|
|
177
|
+
self.set_name("sky130_la_iovdda")
|
|
178
|
+
|
|
179
|
+
# version
|
|
180
|
+
self.package.set_version("v1")
|
|
181
|
+
|
|
182
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
183
|
+
|
|
184
|
+
with self.active_dataroot("lambdapdk"):
|
|
185
|
+
with self.active_fileset("rtl"):
|
|
186
|
+
self.add_file(lib_path / "lambda" / "la_iovdda.v")
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
class Sky130Lambdalib_la_iovddio(LambalibTechLibrary, _LambdaPath):
|
|
190
|
+
def __init__(self):
|
|
191
|
+
super().__init__("la_iovddio", [Sky130_IOLibrary])
|
|
192
|
+
self.set_name("sky130_la_iovddio")
|
|
193
|
+
|
|
194
|
+
# version
|
|
195
|
+
self.package.set_version("v1")
|
|
196
|
+
|
|
197
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
198
|
+
|
|
199
|
+
with self.active_dataroot("lambdapdk"):
|
|
200
|
+
with self.active_fileset("rtl"):
|
|
201
|
+
self.add_file(lib_path / "lambda" / "la_iovddio.v")
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
class Sky130Lambdalib_la_iovss(LambalibTechLibrary, _LambdaPath):
|
|
205
|
+
def __init__(self):
|
|
206
|
+
super().__init__("la_iovss", [Sky130_IOLibrary])
|
|
207
|
+
self.set_name("sky130_la_iovss")
|
|
208
|
+
|
|
209
|
+
# version
|
|
210
|
+
self.package.set_version("v1")
|
|
211
|
+
|
|
212
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
213
|
+
|
|
214
|
+
with self.active_dataroot("lambdapdk"):
|
|
215
|
+
with self.active_fileset("rtl"):
|
|
216
|
+
self.add_file(lib_path / "lambda" / "la_iovss.v")
|
|
217
|
+
|
|
13
218
|
|
|
14
|
-
|
|
15
|
-
|
|
219
|
+
class Sky130Lambdalib_la_iovssa(LambalibTechLibrary, _LambdaPath):
|
|
220
|
+
def __init__(self):
|
|
221
|
+
super().__init__("la_iovssa", [Sky130_IOLibrary])
|
|
222
|
+
self.set_name("sky130_la_iovssa")
|
|
16
223
|
|
|
17
|
-
|
|
224
|
+
# version
|
|
225
|
+
self.package.set_version("v1")
|
|
18
226
|
|
|
19
|
-
|
|
20
|
-
lib.set('option', 'pdk', process)
|
|
227
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
21
228
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
lib.set('output', stackup, 'lef', os.path.join(libdir, 'lef', 'sky130_ef_io.lef'))
|
|
229
|
+
with self.active_dataroot("lambdapdk"):
|
|
230
|
+
with self.active_fileset("rtl"):
|
|
231
|
+
self.add_file(lib_path / "lambda" / "la_iovssa.v")
|
|
26
232
|
|
|
27
|
-
# Need both GDS files: ef relies on fd one
|
|
28
|
-
lib.add('output', stackup, 'gds', os.path.join(libdir, 'gds', 'sky130_ef_io.gds'))
|
|
29
|
-
lib.add('output', stackup, 'gds', os.path.join(libdir, 'gds', 'sky130_fd_io.gds'))
|
|
30
|
-
lib.add('output', stackup, 'gds', os.path.join(libdir, 'gds',
|
|
31
|
-
'sky130_ef_io__gpiov2_pad_wrapped.gds'))
|
|
32
233
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
234
|
+
class Sky130Lambdalib_la_iovssio(LambalibTechLibrary, _LambdaPath):
|
|
235
|
+
def __init__(self):
|
|
236
|
+
super().__init__("la_iovssio", [Sky130_IOLibrary])
|
|
237
|
+
self.set_name("sky130_la_iovssio")
|
|
37
238
|
|
|
38
|
-
|
|
39
|
-
|
|
239
|
+
# version
|
|
240
|
+
self.package.set_version("v1")
|
|
40
241
|
|
|
41
|
-
|
|
42
|
-
register_data_source(lambda_lib)
|
|
43
|
-
lambda_lib.add('option', 'ydir', 'lambdapdk/sky130/libs/sky130io/lambda')
|
|
44
|
-
lambda_lib.use(lib)
|
|
45
|
-
lambda_lib.set('asic', 'macrolib', lib.design)
|
|
242
|
+
lib_path = Path("lambdapdk", "sky130", "libs", "sky130io")
|
|
46
243
|
|
|
47
|
-
|
|
244
|
+
with self.active_dataroot("lambdapdk"):
|
|
245
|
+
with self.active_fileset("rtl"):
|
|
246
|
+
self.add_file(lib_path / "lambda" / "la_iovssio.v")
|
|
48
247
|
|
|
49
248
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
249
|
+
class Sky130LambdaLib_IO(LambalibTechLibrary):
|
|
250
|
+
@classmethod
|
|
251
|
+
def alias(cls, project: ASIC):
|
|
252
|
+
Sky130Lambdalib_la_ioanalog.alias(project)
|
|
253
|
+
Sky130Lambdalib_la_iobidir.alias(project)
|
|
254
|
+
Sky130Lambdalib_la_ioclamp.alias(project)
|
|
255
|
+
Sky130Lambdalib_la_iocorner.alias(project)
|
|
256
|
+
Sky130Lambdalib_la_ioinput.alias(project)
|
|
257
|
+
Sky130Lambdalib_la_iorxdiff.alias(project)
|
|
258
|
+
Sky130Lambdalib_la_iotxdiff.alias(project)
|
|
259
|
+
Sky130Lambdalib_la_iovdd.alias(project)
|
|
260
|
+
Sky130Lambdalib_la_iovdda.alias(project)
|
|
261
|
+
Sky130Lambdalib_la_iovddio.alias(project)
|
|
262
|
+
Sky130Lambdalib_la_iovss.alias(project)
|
|
263
|
+
Sky130Lambdalib_la_iovssa.alias(project)
|
|
264
|
+
Sky130Lambdalib_la_iovssio.alias(project)
|