lambdapdk 0.1.56__py3-none-any.whl → 0.2.0rc1__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 +262 -113
- lambdapdk/asap7/__init__.py +73 -96
- lambdapdk/asap7/libs/asap7sc7p5t.py +120 -159
- lambdapdk/asap7/libs/fakeio7.py +17 -26
- lambdapdk/asap7/libs/fakekit7.py +14 -19
- lambdapdk/asap7/libs/fakeram7.py +230 -33
- lambdapdk/freepdk45/__init__.py +59 -89
- lambdapdk/freepdk45/libs/fakeram45.py +72 -27
- lambdapdk/freepdk45/libs/nangate45.py +86 -125
- lambdapdk/gf180/__init__.py +217 -131
- lambdapdk/gf180/libs/gf180io.py +103 -68
- lambdapdk/gf180/libs/gf180mcu.py +184 -138
- lambdapdk/gf180/libs/gf180sram.py +121 -63
- lambdapdk/ihp130/__init__.py +84 -119
- lambdapdk/ihp130/libs/sg13g2_io.py +54 -41
- lambdapdk/ihp130/libs/sg13g2_sram.py +94 -52
- lambdapdk/ihp130/libs/sg13g2_stdcell.py +113 -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 +45 -48
- lambdapdk/sky130/libs/sky130sc.py +170 -206
- lambdapdk/sky130/libs/sky130sram.py +45 -34
- {lambdapdk-0.1.56.dist-info → lambdapdk-0.2.0rc1.dist-info}/METADATA +3 -3
- lambdapdk-0.2.0rc1.dist-info/RECORD +30 -0
- lambdapdk-0.2.0rc1.dist-info/entry_points.txt +2 -0
- lambdapdk-0.1.56.dist-info/RECORD +0 -30
- lambdapdk-0.1.56.dist-info/entry_points.txt +0 -4
- {lambdapdk-0.1.56.dist-info → lambdapdk-0.2.0rc1.dist-info}/WHEEL +0 -0
- {lambdapdk-0.1.56.dist-info → lambdapdk-0.2.0rc1.dist-info}/licenses/LICENSE +0 -0
- {lambdapdk-0.1.56.dist-info → lambdapdk-0.2.0rc1.dist-info}/top_level.txt +0 -0
lambdapdk/freepdk45/__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 FreePDK45PDK(LambdaPDK):
|
|
11
7
|
'''
|
|
12
8
|
The freepdk45 PDK is a virtual PDK derived from the work done at
|
|
13
9
|
NCSU (NCSU_TechLib_FreePDK45.) It supplies techfiles, display
|
|
@@ -24,85 +20,59 @@ def setup():
|
|
|
24
20
|
|
|
25
21
|
* https://eda.ncsu.edu/freepdk/freepdk45/
|
|
26
22
|
'''
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
'metal9': 0.25,
|
|
84
|
-
'metal10': 0.25
|
|
85
|
-
}
|
|
86
|
-
for layer, adj in openroad_layer_adjustments.items():
|
|
87
|
-
pdk.set('pdk', process, 'var', 'openroad', f'{layer}_adjustment', stackup, str(adj))
|
|
88
|
-
|
|
89
|
-
pdk.set('pdk', process, 'var', 'openroad', 'rclayer_signal', stackup, 'metal3')
|
|
90
|
-
pdk.set('pdk', process, 'var', 'openroad', 'rclayer_clock', stackup, 'metal5')
|
|
91
|
-
|
|
92
|
-
pdk.set('pdk', process, 'var', 'openroad', 'pin_layer_vertical', stackup, 'metal6')
|
|
93
|
-
pdk.set('pdk', process, 'var', 'openroad', 'pin_layer_horizontal', stackup, 'metal5')
|
|
94
|
-
|
|
95
|
-
# PEX
|
|
96
|
-
pdk.set('pdk', process, 'pexmodel', 'openroad', stackup, 'typical',
|
|
97
|
-
pdkdir + '/pex/openroad/typical.tcl')
|
|
98
|
-
pdk.set('pdk', process, 'pexmodel', 'openroad-openrcx', stackup, 'typical',
|
|
99
|
-
pdkdir + '/pex/openroad/typical.rules')
|
|
100
|
-
|
|
101
|
-
return pdk
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
#########################
|
|
105
|
-
if __name__ == "__main__":
|
|
106
|
-
pdk = setup()
|
|
107
|
-
register_data_source(pdk)
|
|
108
|
-
pdk.check_filepaths()
|
|
23
|
+
def __init__(self):
|
|
24
|
+
super().__init__()
|
|
25
|
+
self.set_name("freepdk45")
|
|
26
|
+
|
|
27
|
+
pdk_path = Path("lambdapdk", "freepdk45", "base")
|
|
28
|
+
|
|
29
|
+
self.set_foundry("virtual")
|
|
30
|
+
self.set_version("r1p0")
|
|
31
|
+
self.set_node(45)
|
|
32
|
+
self.set_stackup("10M")
|
|
33
|
+
self.set_wafersize(300)
|
|
34
|
+
self.set_scribewidth(0.1, 0.1)
|
|
35
|
+
self.set_edgemargin(2)
|
|
36
|
+
self.set_defectdensity(1.25)
|
|
37
|
+
|
|
38
|
+
with self.active_dataroot("lambdapdk"):
|
|
39
|
+
# APR Setup
|
|
40
|
+
with self.active_fileset("views.lef"):
|
|
41
|
+
self.add_file(pdk_path / "apr" / "freepdk45.tech.lef")
|
|
42
|
+
for tool in ('openroad', 'klayout', 'magic'):
|
|
43
|
+
self.add_aprtechfileset(tool)
|
|
44
|
+
|
|
45
|
+
self.set_aprroutinglayers(min="metal2", max="metal7")
|
|
46
|
+
|
|
47
|
+
# Klayout setup file
|
|
48
|
+
with self.active_fileset("klayout.techmap"):
|
|
49
|
+
self.add_file(pdk_path / "setup" / "klayout" / "freepdk45.lyt", filetype="layermap")
|
|
50
|
+
self.add_file(pdk_path / "setup" / "klayout" / "freepdk45.lyp", filetype="display")
|
|
51
|
+
self.add_layermapfileset("klayout", "def", "klayout")
|
|
52
|
+
self.add_displayfileset("klayout")
|
|
53
|
+
|
|
54
|
+
self.set_openroad_rclayers(signal="metal3", clock="metal5")
|
|
55
|
+
|
|
56
|
+
# Openroad global routing grid derating
|
|
57
|
+
for layer, derate in [
|
|
58
|
+
('metal1', 1.0),
|
|
59
|
+
('metal2', 0.5),
|
|
60
|
+
('metal3', 0.5),
|
|
61
|
+
('metal4', 0.25),
|
|
62
|
+
('metal5', 0.25),
|
|
63
|
+
('metal6', 0.25),
|
|
64
|
+
('metal7', 0.25),
|
|
65
|
+
('metal8', 0.25),
|
|
66
|
+
('metal9', 0.25),
|
|
67
|
+
('metal10', 0.25)]:
|
|
68
|
+
self.set_openroad_globalroutingderating(layer, derate)
|
|
69
|
+
|
|
70
|
+
self.add_openroad_pinlayers(vertical="metal6", horizontal="metal5")
|
|
71
|
+
|
|
72
|
+
# PEX
|
|
73
|
+
with self.active_fileset("openroad.pex"):
|
|
74
|
+
self.add_file(pdk_path / "pex" / "openroad" / "typical.tcl", filetype="tcl")
|
|
75
|
+
self.add_file(pdk_path / "pex" / "openroad" / "typical.rules", filetype="openrcx")
|
|
76
|
+
|
|
77
|
+
self.add_pexmodelfileset("openroad", "typical")
|
|
78
|
+
self.add_pexmodelfileset("openroad-openrcx", "typical")
|
|
@@ -1,36 +1,81 @@
|
|
|
1
|
-
from
|
|
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.freepdk45 import FreePDK45PDK
|
|
4
6
|
|
|
5
|
-
def setup():
|
|
6
|
-
libs = []
|
|
7
|
-
stackup = '10M'
|
|
8
|
-
corner = 'typical'
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
path_base = 'lambdapdk/freepdk45/libs/fakeram45'
|
|
15
|
-
lib.add('output', stackup, 'lef', f'{path_base}/lef/{mem_name}.lef')
|
|
16
|
-
lib.add('output', corner, 'nldm', f'{path_base}/nldm/{mem_name}.lib')
|
|
8
|
+
class _FakeRAM45Library(LambdaLibrary):
|
|
9
|
+
def __init__(self, config):
|
|
10
|
+
super().__init__()
|
|
11
|
+
self.set_name(f"fakeram45_{config}")
|
|
17
12
|
|
|
18
|
-
|
|
19
|
-
f'{path_base}/apr/openroad/pdngen.tcl')
|
|
20
|
-
lib.set('option', 'file', 'openroad_global_connect',
|
|
21
|
-
f'{path_base}/apr/openroad/global_connect.tcl')
|
|
13
|
+
self.add_asic_pdk(FreePDK45PDK())
|
|
22
14
|
|
|
23
|
-
|
|
15
|
+
path_base = Path("lambdapdk", "freepdk45", "libs", "fakeram45")
|
|
24
16
|
|
|
25
|
-
|
|
17
|
+
with self.active_dataroot("lambdapdk"):
|
|
18
|
+
with self.active_fileset("models.physical"):
|
|
19
|
+
self.add_file(path_base / "lef" / f"{self.name}.lef")
|
|
20
|
+
self.add_asic_aprfileset()
|
|
26
21
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
for lib in libs:
|
|
31
|
-
lambda_lib.use(lib)
|
|
32
|
-
lambda_lib.add('asic', 'macrolib', lib.design)
|
|
22
|
+
with self.active_fileset("models.timing.nldm"):
|
|
23
|
+
self.add_file(path_base / "nldm" / f"{self.name}.lib")
|
|
24
|
+
self.add_asic_libcornerfileset("typical", "nldm")
|
|
33
25
|
|
|
34
|
-
|
|
26
|
+
self.add_openroad_power_grid_file(path_base / "apr" / "openroad" / "pdngen.tcl")
|
|
27
|
+
self.add_openroad_global_connect_file(
|
|
28
|
+
path_base / "apr" / "openroad" / "global_connect.tcl")
|
|
35
29
|
|
|
36
|
-
|
|
30
|
+
self.add_klayout_allowmissingcell(self.name)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class FakeRAM45_64x32(_FakeRAM45Library):
|
|
34
|
+
def __init__(self):
|
|
35
|
+
super().__init__("64x32")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class FakeRAM45_128x32(_FakeRAM45Library):
|
|
39
|
+
def __init__(self):
|
|
40
|
+
super().__init__("128x32")
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class FakeRAM45_256x32(_FakeRAM45Library):
|
|
44
|
+
def __init__(self):
|
|
45
|
+
super().__init__("256x32")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class FakeRAM45_256x64(_FakeRAM45Library):
|
|
49
|
+
def __init__(self):
|
|
50
|
+
super().__init__("256x64")
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class FakeRAM45_512x32(_FakeRAM45Library):
|
|
54
|
+
def __init__(self):
|
|
55
|
+
super().__init__("512x32")
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class FakeRAM45_512x64(_FakeRAM45Library):
|
|
59
|
+
def __init__(self):
|
|
60
|
+
super().__init__("512x64")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class FakeRAM45Lambdalib_SinglePort(LambalibTechLibrary, _LambdaPath):
|
|
64
|
+
def __init__(self):
|
|
65
|
+
super().__init__("la_spram", [
|
|
66
|
+
FakeRAM45_64x32,
|
|
67
|
+
FakeRAM45_128x32,
|
|
68
|
+
FakeRAM45_256x32,
|
|
69
|
+
FakeRAM45_256x64,
|
|
70
|
+
FakeRAM45_512x32,
|
|
71
|
+
FakeRAM45_512x64])
|
|
72
|
+
self.set_name("fakeram45_la_spram")
|
|
73
|
+
|
|
74
|
+
# version
|
|
75
|
+
self.set_version("v1")
|
|
76
|
+
|
|
77
|
+
lib_path = Path("lambdapdk", "freepdk45", "libs", "fakeram45")
|
|
78
|
+
|
|
79
|
+
with self.active_dataroot("lambdapdk"):
|
|
80
|
+
with self.active_fileset("rtl"):
|
|
81
|
+
self.add_file(lib_path / "lambda" / "la_spram.v")
|
|
@@ -1,130 +1,91 @@
|
|
|
1
|
-
import
|
|
2
|
-
import siliconcompiler
|
|
3
|
-
from lambdapdk import register_data_source
|
|
1
|
+
from pathlib import Path
|
|
4
2
|
|
|
3
|
+
from lambdapdk import LambdaLibrary
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
from lambdapdk.freepdk45 import FreePDK45PDK
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Nangate45(LambdaLibrary):
|
|
7
9
|
'''
|
|
8
10
|
Nangate open standard cell library for FreePDK45.
|
|
9
11
|
'''
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
lib.set('option', 'var', 'yosys_abc_clock_multiplier', "1000") # convert from ns -> ps
|
|
91
|
-
lib.set('option', 'var', 'yosys_abc_constraint_load', "3.899fF") # BUF_X1 = 0.974659 x 4
|
|
92
|
-
lib.set('option', 'var', 'yosys_driver_cell', "BUF_X4")
|
|
93
|
-
lib.set('option', 'var', 'yosys_buffer_cell', "BUF_X1")
|
|
94
|
-
lib.set('option', 'var', 'yosys_buffer_input', "A")
|
|
95
|
-
lib.set('option', 'var', 'yosys_buffer_output', "Z")
|
|
96
|
-
for tool in ('yosys', 'openroad'):
|
|
97
|
-
lib.set('option', 'var', f'{tool}_tiehigh_cell', "LOGIC1_X1")
|
|
98
|
-
lib.set('option', 'var', f'{tool}_tiehigh_port', "Z")
|
|
99
|
-
lib.set('option', 'var', f'{tool}_tielow_cell', "LOGIC0_X1")
|
|
100
|
-
lib.set('option', 'var', f'{tool}_tielow_port', "Z")
|
|
101
|
-
|
|
102
|
-
# Bambu setup
|
|
103
|
-
lib.set('option', 'var', 'bambu_device', 'nangate45')
|
|
104
|
-
lib.set('option', 'var', 'bambu_clock_multiplier', 1) # convert from ns -> ns
|
|
105
|
-
|
|
106
|
-
libs = [lib]
|
|
107
|
-
std_lambda_lib = siliconcompiler.Library(f'lambdalib_stdlib_{libname}',
|
|
108
|
-
package='lambdapdk')
|
|
109
|
-
register_data_source(std_lambda_lib)
|
|
110
|
-
std_lambda_lib.add('option', 'ydir', libdir + '/lambda/stdlib')
|
|
111
|
-
std_lambda_lib.use(lib)
|
|
112
|
-
std_lambda_lib.set('asic', 'logiclib', lib.design)
|
|
113
|
-
libs.append(std_lambda_lib)
|
|
114
|
-
aux_lambda_lib = siliconcompiler.Library(f'lambdalib_auxlib_{libname}',
|
|
115
|
-
package='lambdapdk')
|
|
116
|
-
register_data_source(aux_lambda_lib)
|
|
117
|
-
aux_lambda_lib.add('option', 'ydir', libdir + '/lambda/auxlib')
|
|
118
|
-
aux_lambda_lib.use(std_lambda_lib)
|
|
119
|
-
aux_lambda_lib.use(lib)
|
|
120
|
-
aux_lambda_lib.set('asic', 'logiclib', lib.design)
|
|
121
|
-
aux_lambda_lib.set('option', 'library', std_lambda_lib.design)
|
|
122
|
-
libs.append(aux_lambda_lib)
|
|
123
|
-
|
|
124
|
-
return libs
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
#########################
|
|
128
|
-
if __name__ == "__main__":
|
|
129
|
-
lib = setup()
|
|
130
|
-
lib.write_manifest(f'{lib.top()}.json')
|
|
12
|
+
def __init__(self):
|
|
13
|
+
super().__init__()
|
|
14
|
+
self.set_name("nangate45")
|
|
15
|
+
|
|
16
|
+
# version
|
|
17
|
+
self.set_version("r1p0")
|
|
18
|
+
|
|
19
|
+
self.add_asic_pdk(FreePDK45PDK())
|
|
20
|
+
|
|
21
|
+
self.add_asic_site("FreePDK45_38x28_10R_NP_162NW_34O")
|
|
22
|
+
|
|
23
|
+
# clock buffers
|
|
24
|
+
self.add_asic_celllist("clkbuf", ["CLKBUF_X1",
|
|
25
|
+
"CLKBUF_X2",
|
|
26
|
+
"CLKBUF_X3"])
|
|
27
|
+
|
|
28
|
+
# tie cells
|
|
29
|
+
self.add_asic_celllist("tie", ["LOGIC0_X1",
|
|
30
|
+
"LOGIC1_X1"])
|
|
31
|
+
|
|
32
|
+
# filler
|
|
33
|
+
self.add_asic_celllist("filler", ["FILLCELL_X1",
|
|
34
|
+
"FILLCELL_X2",
|
|
35
|
+
"FILLCELL_X4",
|
|
36
|
+
"FILLCELL_X8",
|
|
37
|
+
"FILLCELL_X16",
|
|
38
|
+
"FILLCELL_X32"])
|
|
39
|
+
|
|
40
|
+
# Dont use for synthesis
|
|
41
|
+
self.add_asic_celllist("dontuse", "OAI211_X1")
|
|
42
|
+
|
|
43
|
+
# Tapcell
|
|
44
|
+
self.add_asic_celllist("tap", "TAPCELL_X1")
|
|
45
|
+
|
|
46
|
+
# Endcap
|
|
47
|
+
self.add_asic_celllist("endcap", "TAPCELL_X1")
|
|
48
|
+
|
|
49
|
+
lib_path = Path("lambdapdk", "freepdk45", "libs", "nangate45")
|
|
50
|
+
|
|
51
|
+
# General filelists
|
|
52
|
+
with self.active_dataroot("lambdapdk"):
|
|
53
|
+
with self.active_fileset("models.timing.nldm"):
|
|
54
|
+
self.add_file(lib_path / "nldm" / "NangateOpenCellLibrary_typical.lib")
|
|
55
|
+
self.add_asic_libcornerfileset("typical", "nldm")
|
|
56
|
+
|
|
57
|
+
with self.active_fileset("models.physical"):
|
|
58
|
+
self.add_file(lib_path / "lef" / "NangateOpenCellLibrary.macro.mod.lef")
|
|
59
|
+
self.add_file(lib_path / "gds" / "NangateOpenCellLibrary.gds")
|
|
60
|
+
self.add_asic_aprfileset()
|
|
61
|
+
|
|
62
|
+
with self.active_fileset("models.lvs"):
|
|
63
|
+
self.add_file(lib_path / "cdl" / "NangateOpenCellLibrary.cdl")
|
|
64
|
+
self.add_asic_aprfileset()
|
|
65
|
+
|
|
66
|
+
# Setup for yosys
|
|
67
|
+
with self.active_dataroot("lambdapdk"):
|
|
68
|
+
self.set_yosys_driver_cell("BUF_X4")
|
|
69
|
+
self.set_yosys_buffer_cell("BUF_X1", "A", "Z")
|
|
70
|
+
self.set_yosys_tielow_cell("LOGIC0_X1", "Z")
|
|
71
|
+
self.set_yosys_tiehigh_cell("LOGIC1_X1", "Z")
|
|
72
|
+
self.set_yosys_abc(1000, 3.899)
|
|
73
|
+
self.set_yosys_tristatebuffer_map(
|
|
74
|
+
lib_path / "techmap" / "yosys" / "cells_tristatebuf.v")
|
|
75
|
+
self.set_yosys_adder_map(lib_path / "techmap" / "yosys" / "cells_adders.v")
|
|
76
|
+
self.add_yosys_tech_map(lib_path / "techmap" / "yosys" / "cells_latch.v")
|
|
77
|
+
|
|
78
|
+
# Setup for openroad
|
|
79
|
+
with self.active_dataroot("lambdapdk"):
|
|
80
|
+
self.set_openroad_placement_density(0.50)
|
|
81
|
+
self.set_openroad_tielow_cell("LOGIC0_X1", "Z")
|
|
82
|
+
self.set_openroad_tiehigh_cell("LOGIC1_X1", "Z")
|
|
83
|
+
self.set_openroad_macro_placement_halo(22.4, 15.12)
|
|
84
|
+
self.set_openroad_tapcells_file(lib_path / "apr" / "openroad" / "tapcell.tcl")
|
|
85
|
+
self.add_openroad_global_connect_file(
|
|
86
|
+
lib_path / "apr" / "openroad" / "global_connect.tcl")
|
|
87
|
+
self.add_openroad_power_grid_file(lib_path / "apr" / "openroad" / "pdngen.tcl")
|
|
88
|
+
|
|
89
|
+
# Setup for bambu
|
|
90
|
+
self.set_bambu_device_name("nangate45")
|
|
91
|
+
self.set_bambu_clock_multiplier(1)
|