siliconcompiler 0.36.0__py3-none-any.whl → 0.36.2__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.
- siliconcompiler/_metadata.py +1 -1
- siliconcompiler/asic.py +4 -4
- siliconcompiler/design.py +6 -1
- siliconcompiler/package/__init__.py +3 -2
- siliconcompiler/project.py +30 -14
- siliconcompiler/schema_support/filesetschema.py +9 -1
- siliconcompiler/schema_support/pathschema.py +16 -10
- siliconcompiler/tool.py +3 -1
- siliconcompiler/tools/chisel/convert.py +44 -0
- siliconcompiler/tools/ghdl/convert.py +37 -2
- siliconcompiler/tools/icarus/compile.py +14 -0
- siliconcompiler/tools/keplerformal/lec.py +2 -2
- siliconcompiler/tools/klayout/drc.py +14 -0
- siliconcompiler/tools/klayout/export.py +41 -1
- siliconcompiler/tools/klayout/operations.py +40 -0
- siliconcompiler/tools/openroad/__init__.py +11 -0
- siliconcompiler/tools/openroad/_apr.py +823 -12
- siliconcompiler/tools/openroad/antenna_repair.py +26 -0
- siliconcompiler/tools/openroad/fillmetal_insertion.py +14 -0
- siliconcompiler/tools/openroad/global_placement.py +67 -0
- siliconcompiler/tools/openroad/global_route.py +15 -0
- siliconcompiler/tools/openroad/init_floorplan.py +14 -0
- siliconcompiler/tools/openroad/macro_placement.py +252 -0
- siliconcompiler/tools/openroad/power_grid.py +44 -1
- siliconcompiler/tools/openroad/rcx_bench.py +28 -0
- siliconcompiler/tools/openroad/rcx_extract.py +14 -0
- siliconcompiler/tools/openroad/rdlroute.py +14 -0
- siliconcompiler/tools/openroad/repair_design.py +41 -0
- siliconcompiler/tools/openroad/repair_timing.py +54 -0
- siliconcompiler/tools/openroad/screenshot.py +31 -1
- siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +8 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +5 -1
- siliconcompiler/tools/openroad/scripts/common/read_timing_constraints.tcl +17 -15
- siliconcompiler/tools/openroad/scripts/common/write_data_timing.tcl +3 -1
- siliconcompiler/tools/openroad/write_data.py +76 -0
- siliconcompiler/tools/opensta/timing.py +37 -2
- siliconcompiler/tools/slang/elaborate.py +16 -1
- siliconcompiler/tools/surelog/parse.py +54 -0
- siliconcompiler/tools/verilator/compile.py +120 -0
- siliconcompiler/tools/vivado/syn_fpga.py +27 -0
- siliconcompiler/tools/vpr/__init__.py +9 -9
- siliconcompiler/tools/vpr/place.py +1 -2
- siliconcompiler/tools/vpr/route.py +40 -0
- siliconcompiler/tools/xdm/convert.py +14 -0
- siliconcompiler/tools/xyce/simulate.py +26 -0
- siliconcompiler/tools/yosys/lec_asic.py +13 -0
- siliconcompiler/tools/yosys/syn_asic.py +336 -7
- siliconcompiler/tools/yosys/syn_fpga.py +39 -8
- siliconcompiler/toolscripts/_tools.json +5 -5
- siliconcompiler/utils/logging.py +6 -0
- {siliconcompiler-0.36.0.dist-info → siliconcompiler-0.36.2.dist-info}/METADATA +3 -3
- {siliconcompiler-0.36.0.dist-info → siliconcompiler-0.36.2.dist-info}/RECORD +56 -56
- {siliconcompiler-0.36.0.dist-info → siliconcompiler-0.36.2.dist-info}/WHEEL +0 -0
- {siliconcompiler-0.36.0.dist-info → siliconcompiler-0.36.2.dist-info}/entry_points.txt +0 -0
- {siliconcompiler-0.36.0.dist-info → siliconcompiler-0.36.2.dist-info}/licenses/LICENSE +0 -0
- {siliconcompiler-0.36.0.dist-info → siliconcompiler-0.36.2.dist-info}/top_level.txt +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Optional, Union
|
|
2
|
+
|
|
1
3
|
from siliconcompiler import TaskSkip
|
|
2
4
|
from siliconcompiler.tools.openroad._apr import APRTask
|
|
3
5
|
from siliconcompiler.tools.openroad._apr import OpenROADSTAParameter, OpenROADGRTParameter, \
|
|
@@ -19,6 +21,30 @@ class AntennaRepairTask(APRTask, OpenROADSTAParameter, OpenROADGRTParameter, Ope
|
|
|
19
21
|
"true/false, flag to indicate whether to repair antenna violations",
|
|
20
22
|
defvalue=True)
|
|
21
23
|
|
|
24
|
+
def set_openroad_antcheck(self, enable: bool,
|
|
25
|
+
step: Optional[str] = None, index: Optional[Union[int, str]] = None):
|
|
26
|
+
"""
|
|
27
|
+
Enables or disables checking for antenna violations.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
enable (bool): True to check, False to skip.
|
|
31
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
32
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
33
|
+
"""
|
|
34
|
+
self.set("var", "ant_check", enable, step=step, index=index)
|
|
35
|
+
|
|
36
|
+
def set_openroad_antrepair(self, enable: bool,
|
|
37
|
+
step: Optional[str] = None, index: Optional[Union[int, str]] = None):
|
|
38
|
+
"""
|
|
39
|
+
Enables or disables repairing antenna violations.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
enable (bool): True to repair, False to skip.
|
|
43
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
44
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
45
|
+
"""
|
|
46
|
+
self.set("var", "ant_repair", enable, step=step, index=index)
|
|
47
|
+
|
|
22
48
|
def task(self):
|
|
23
49
|
return "antenna_repair"
|
|
24
50
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Optional, Union
|
|
2
|
+
|
|
1
3
|
from siliconcompiler.tools.openroad._apr import APRTask
|
|
2
4
|
from siliconcompiler.tools.openroad._apr import OpenROADSTAParameter
|
|
3
5
|
|
|
@@ -15,6 +17,18 @@ class FillMetalTask(APRTask, OpenROADSTAParameter):
|
|
|
15
17
|
"true/false, when true enables adding fill, "
|
|
16
18
|
"if enabled by the PDK, to the design", defvalue=True)
|
|
17
19
|
|
|
20
|
+
def set_openroad_addfill(self, enable: bool,
|
|
21
|
+
step: Optional[str] = None, index: Optional[Union[int, str]] = None):
|
|
22
|
+
"""
|
|
23
|
+
Enables or disables adding fill to the design.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
enable (bool): True to enable fill, False to disable.
|
|
27
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
28
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
29
|
+
"""
|
|
30
|
+
self.set("var", "fin_add_fill", enable, step=step, index=index)
|
|
31
|
+
|
|
18
32
|
def task(self):
|
|
19
33
|
return "fillmetal_insertion"
|
|
20
34
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Optional, Union
|
|
2
|
+
|
|
1
3
|
from siliconcompiler.tools.openroad._apr import APRTask
|
|
2
4
|
from siliconcompiler.tools.openroad._apr import OpenROADSTAParameter, OpenROADGPLParameter, \
|
|
3
5
|
OpenROADGRTGeneralParameter, OpenROADPPLParameter
|
|
@@ -24,6 +26,71 @@ class GlobalPlacementTask(APRTask, OpenROADSTAParameter, OpenROADGPLParameter,
|
|
|
24
26
|
"true/false, when true multibit clustering will be performed.",
|
|
25
27
|
defvalue=False)
|
|
26
28
|
|
|
29
|
+
def set_openroad_enablescanchains(self, enable: bool,
|
|
30
|
+
step: Optional[str] = None,
|
|
31
|
+
index: Optional[Union[int, str]] = None):
|
|
32
|
+
"""
|
|
33
|
+
Enables or disables scan chain insertion.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
enable (bool): True to enable, False to disable.
|
|
37
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
38
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
39
|
+
"""
|
|
40
|
+
self.set("var", "enable_scan_chains", enable, step=step, index=index)
|
|
41
|
+
|
|
42
|
+
def set_openroad_scanenableportpattern(self, pattern: str,
|
|
43
|
+
step: Optional[str] = None,
|
|
44
|
+
index: Optional[Union[int, str]] = None):
|
|
45
|
+
"""
|
|
46
|
+
Sets the pattern for the scan chain enable port.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
pattern (str): The port pattern.
|
|
50
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
51
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
52
|
+
"""
|
|
53
|
+
self.set("var", "scan_enable_port_pattern", pattern, step=step, index=index)
|
|
54
|
+
|
|
55
|
+
def set_openroad_scaninportpattern(self, pattern: str,
|
|
56
|
+
step: Optional[str] = None,
|
|
57
|
+
index: Optional[Union[int, str]] = None):
|
|
58
|
+
"""
|
|
59
|
+
Sets the pattern for the scan chain input port.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
pattern (str): The port pattern.
|
|
63
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
64
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
65
|
+
"""
|
|
66
|
+
self.set("var", "scan_in_port_pattern", pattern, step=step, index=index)
|
|
67
|
+
|
|
68
|
+
def set_openroad_scanoutportpattern(self, pattern: str,
|
|
69
|
+
step: Optional[str] = None,
|
|
70
|
+
index: Optional[Union[int, str]] = None):
|
|
71
|
+
"""
|
|
72
|
+
Sets the pattern for the scan chain output port.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
pattern (str): The port pattern.
|
|
76
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
77
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
78
|
+
"""
|
|
79
|
+
self.set("var", "scan_out_port_pattern", pattern, step=step, index=index)
|
|
80
|
+
|
|
81
|
+
def set_openroad_enablemultibitclustering(self, enable: bool,
|
|
82
|
+
step: Optional[str] = None,
|
|
83
|
+
index: Optional[Union[int, str]] = None):
|
|
84
|
+
"""
|
|
85
|
+
Enables or disables multibit clustering.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
enable (bool): True to enable, False to disable.
|
|
89
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
90
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
91
|
+
"""
|
|
92
|
+
self.set("var", "enable_multibit_clustering", enable, step=step, index=index)
|
|
93
|
+
|
|
27
94
|
def task(self):
|
|
28
95
|
return "global_placement"
|
|
29
96
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Optional, Union
|
|
2
|
+
|
|
1
3
|
from siliconcompiler.tools.openroad._apr import APRTask
|
|
2
4
|
from siliconcompiler.tools.openroad._apr import OpenROADSTAParameter, OpenROADGRTParameter, \
|
|
3
5
|
OpenROADDRTPinAccessParameter
|
|
@@ -15,6 +17,19 @@ class GlobalRouteTask(APRTask, OpenROADSTAParameter, OpenROADGRTParameter,
|
|
|
15
17
|
"true/false, when true perform pin access before global routing",
|
|
16
18
|
defvalue=False)
|
|
17
19
|
|
|
20
|
+
def set_openroad_usepinaccess(self, enable: bool,
|
|
21
|
+
step: Optional[str] = None,
|
|
22
|
+
index: Optional[Union[int, str]] = None):
|
|
23
|
+
"""
|
|
24
|
+
Enables or disables performing pin access before global routing.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
enable (bool): True to enable, False to disable.
|
|
28
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
29
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
30
|
+
"""
|
|
31
|
+
self.set("var", "grt_use_pin_access", enable, step=step, index=index)
|
|
32
|
+
|
|
18
33
|
def task(self):
|
|
19
34
|
return "global_route"
|
|
20
35
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import os.path
|
|
2
|
+
|
|
1
3
|
from typing import Union, List, Optional
|
|
2
4
|
|
|
3
5
|
from siliconcompiler.tools.openroad._apr import APRTask
|
|
@@ -27,6 +29,15 @@ class InitFloorplanTask(APRTask,
|
|
|
27
29
|
self.add_parameter("padringfileset", "[str]", "filesets to generate a padring")
|
|
28
30
|
self.add_parameter("bumpmapfileset", "[str]", "filesets to generate a bumpmap")
|
|
29
31
|
|
|
32
|
+
tools_root = os.path.dirname(os.path.dirname(__file__))
|
|
33
|
+
self.set_dataroot("sc-common", os.path.join(tools_root, "_common"))
|
|
34
|
+
self.add_parameter(
|
|
35
|
+
"sc_pin_constraints_tcl",
|
|
36
|
+
"file",
|
|
37
|
+
"TCL file defining pin constraints for use with OpenROAD.",
|
|
38
|
+
"tcl/sc_pin_constraints.tcl",
|
|
39
|
+
dataroot="sc-common")
|
|
40
|
+
|
|
30
41
|
def set_openroad_snapstrategy(self, snap: str,
|
|
31
42
|
step: Optional[str] = None, index: Optional[str] = None):
|
|
32
43
|
"""
|
|
@@ -157,6 +168,9 @@ class InitFloorplanTask(APRTask,
|
|
|
157
168
|
if component.get_partname(step=self.step, index=self.index):
|
|
158
169
|
self.add_required_key(component, "partname")
|
|
159
170
|
|
|
171
|
+
if self.project.constraint.pin.get_pinconstraint():
|
|
172
|
+
self.add_required_key("var", "sc_pin_constraints_tcl")
|
|
173
|
+
|
|
160
174
|
for pin in self.project.constraint.pin.get_pinconstraint().values():
|
|
161
175
|
if pin.get_placement(step=self.step, index=self.index) is not None:
|
|
162
176
|
self.add_required_key(pin, "placement")
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Union, List, Optional
|
|
2
|
+
|
|
1
3
|
from siliconcompiler.tools.openroad._apr import APRTask
|
|
2
4
|
from siliconcompiler.tools.openroad._apr import OpenROADSTAParameter, OpenROADGPLParameter
|
|
3
5
|
|
|
@@ -67,6 +69,256 @@ class MacroPlacementTask(APRTask, OpenROADSTAParameter, OpenROADGPLParameter):
|
|
|
67
69
|
self.add_parameter("mpl_macro_blockage_weight", "float",
|
|
68
70
|
"Weight for macro blockage, or the overlapping instances of the macro")
|
|
69
71
|
|
|
72
|
+
def add_openroad_mplconstraints(self, constraints: Union[str, List[str]],
|
|
73
|
+
step: Optional[str] = None, index: Optional[str] = None,
|
|
74
|
+
clobber: bool = False):
|
|
75
|
+
"""
|
|
76
|
+
Adds constraints scripts for macro placement.
|
|
77
|
+
|
|
78
|
+
Args:
|
|
79
|
+
constraints (Union[str, List[str]]): The constraint file(s) to add.
|
|
80
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
81
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
82
|
+
clobber (bool, optional): If True, overwrites the existing list. Defaults to False.
|
|
83
|
+
"""
|
|
84
|
+
if clobber:
|
|
85
|
+
self.set("var", "mpl_constraints", constraints, step=step, index=index)
|
|
86
|
+
else:
|
|
87
|
+
self.add("var", "mpl_constraints", constraints, step=step, index=index)
|
|
88
|
+
|
|
89
|
+
def set_openroad_macroplacehalo(self, x: float, y: float,
|
|
90
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
91
|
+
"""
|
|
92
|
+
Sets the macro halo to use when performing automated macro placement.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
x (float): Halo in X direction (microns).
|
|
96
|
+
y (float): Halo in Y direction (microns).
|
|
97
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
98
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
99
|
+
"""
|
|
100
|
+
self.set("var", "macro_place_halo", (x, y), step=step, index=index)
|
|
101
|
+
|
|
102
|
+
def set_openroad_mplmininstances(self, count: int,
|
|
103
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
104
|
+
"""
|
|
105
|
+
Sets the minimum number of instances to use while clustering for macro placement.
|
|
106
|
+
|
|
107
|
+
Args:
|
|
108
|
+
count (int): The minimum instance count.
|
|
109
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
110
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
111
|
+
"""
|
|
112
|
+
self.set("var", "mpl_min_instances", count, step=step, index=index)
|
|
113
|
+
|
|
114
|
+
def set_openroad_mplmaxinstances(self, count: int,
|
|
115
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
116
|
+
"""
|
|
117
|
+
Sets the maximum number of instances to use while clustering for macro placement.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
count (int): The maximum instance count.
|
|
121
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
122
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
123
|
+
"""
|
|
124
|
+
self.set("var", "mpl_max_instances", count, step=step, index=index)
|
|
125
|
+
|
|
126
|
+
def set_openroad_mplminmacros(self, count: int,
|
|
127
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
128
|
+
"""
|
|
129
|
+
Sets the minimum number of macros to use while clustering for macro placement.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
count (int): The minimum macro count.
|
|
133
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
134
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
135
|
+
"""
|
|
136
|
+
self.set("var", "mpl_min_macros", count, step=step, index=index)
|
|
137
|
+
|
|
138
|
+
def set_openroad_mplmaxmacros(self, count: int,
|
|
139
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
140
|
+
"""
|
|
141
|
+
Sets the maximum number of macros to use while clustering for macro placement.
|
|
142
|
+
|
|
143
|
+
Args:
|
|
144
|
+
count (int): The maximum macro count.
|
|
145
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
146
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
147
|
+
"""
|
|
148
|
+
self.set("var", "mpl_max_macros", count, step=step, index=index)
|
|
149
|
+
|
|
150
|
+
def set_openroad_mplmaxlevels(self, levels: int,
|
|
151
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
152
|
+
"""
|
|
153
|
+
Sets the maximum depth of the physical hierarchical tree.
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
levels (int): The maximum levels.
|
|
157
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
158
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
159
|
+
"""
|
|
160
|
+
self.set("var", "mpl_max_levels", levels, step=step, index=index)
|
|
161
|
+
|
|
162
|
+
def set_openroad_mplminaspectratio(self, ratio: float,
|
|
163
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
164
|
+
"""
|
|
165
|
+
Sets the minimum aspect ratio of width to height of a standard cell cluster.
|
|
166
|
+
|
|
167
|
+
Args:
|
|
168
|
+
ratio (float): The minimum aspect ratio.
|
|
169
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
170
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
171
|
+
"""
|
|
172
|
+
self.set("var", "mpl_min_aspect_ratio", ratio, step=step, index=index)
|
|
173
|
+
|
|
174
|
+
def set_openroad_mplfence(self, llx: float, lly: float, urx: float, ury: float,
|
|
175
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
176
|
+
"""
|
|
177
|
+
Defines the global fence bounding box coordinates.
|
|
178
|
+
|
|
179
|
+
Args:
|
|
180
|
+
llx (float): Lower-left X coordinate (microns).
|
|
181
|
+
lly (float): Lower-left Y coordinate (microns).
|
|
182
|
+
urx (float): Upper-right X coordinate (microns).
|
|
183
|
+
ury (float): Upper-right Y coordinate (microns).
|
|
184
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
185
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
186
|
+
"""
|
|
187
|
+
self.set("var", "mpl_fence", (llx, lly, urx, ury), step=step, index=index)
|
|
188
|
+
|
|
189
|
+
def set_openroad_mplbusplanning(self, enable: bool,
|
|
190
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
191
|
+
"""
|
|
192
|
+
Enables or disables bus planning.
|
|
193
|
+
|
|
194
|
+
Args:
|
|
195
|
+
enable (bool): True to enable, False to disable.
|
|
196
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
197
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
198
|
+
"""
|
|
199
|
+
self.set("var", "mpl_bus_planning", enable, step=step, index=index)
|
|
200
|
+
|
|
201
|
+
def set_openroad_mpltargetdeadspace(self, percentage: float,
|
|
202
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
203
|
+
"""
|
|
204
|
+
Sets the target dead space percentage.
|
|
205
|
+
|
|
206
|
+
Args:
|
|
207
|
+
percentage (float): The target dead space percentage.
|
|
208
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
209
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
210
|
+
"""
|
|
211
|
+
self.set("var", "mpl_target_dead_space", percentage, step=step, index=index)
|
|
212
|
+
|
|
213
|
+
def set_openroad_mplareaweight(self, weight: float,
|
|
214
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
215
|
+
"""
|
|
216
|
+
Sets the weight for the area of the current floorplan.
|
|
217
|
+
|
|
218
|
+
Args:
|
|
219
|
+
weight (float): The weight value.
|
|
220
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
221
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
222
|
+
"""
|
|
223
|
+
self.set("var", "mpl_area_weight", weight, step=step, index=index)
|
|
224
|
+
|
|
225
|
+
def set_openroad_mploutlineweight(self, weight: float,
|
|
226
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
227
|
+
"""
|
|
228
|
+
Sets the weight for violating the fixed outline constraint.
|
|
229
|
+
|
|
230
|
+
Args:
|
|
231
|
+
weight (float): The weight value.
|
|
232
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
233
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
234
|
+
"""
|
|
235
|
+
self.set("var", "mpl_outline_weight", weight, step=step, index=index)
|
|
236
|
+
|
|
237
|
+
def set_openroad_mplwirelengthweight(self, weight: float,
|
|
238
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
239
|
+
"""
|
|
240
|
+
Sets the weight for half-perimeter wirelength.
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
weight (float): The weight value.
|
|
244
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
245
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
246
|
+
"""
|
|
247
|
+
self.set("var", "mpl_wirelength_weight", weight, step=step, index=index)
|
|
248
|
+
|
|
249
|
+
def set_openroad_mplguidanceweight(self, weight: float,
|
|
250
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
251
|
+
"""
|
|
252
|
+
Sets the weight for guidance cost.
|
|
253
|
+
|
|
254
|
+
Args:
|
|
255
|
+
weight (float): The weight value.
|
|
256
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
257
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
258
|
+
"""
|
|
259
|
+
self.set("var", "mpl_guidance_weight", weight, step=step, index=index)
|
|
260
|
+
|
|
261
|
+
def set_openroad_mplfenceweight(self, weight: float,
|
|
262
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
263
|
+
"""
|
|
264
|
+
Sets the weight for fence cost.
|
|
265
|
+
|
|
266
|
+
Args:
|
|
267
|
+
weight (float): The weight value.
|
|
268
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
269
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
270
|
+
"""
|
|
271
|
+
self.set("var", "mpl_fence_weight", weight, step=step, index=index)
|
|
272
|
+
|
|
273
|
+
def set_openroad_mplboundaryweight(self, weight: float,
|
|
274
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
275
|
+
"""
|
|
276
|
+
Sets the weight for the boundary cost.
|
|
277
|
+
|
|
278
|
+
Args:
|
|
279
|
+
weight (float): The weight value.
|
|
280
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
281
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
282
|
+
"""
|
|
283
|
+
self.set("var", "mpl_boundary_weight", weight, step=step, index=index)
|
|
284
|
+
|
|
285
|
+
def set_openroad_mplblockageweight(self, weight: float,
|
|
286
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
287
|
+
"""
|
|
288
|
+
Sets the weight for the blockage cost.
|
|
289
|
+
|
|
290
|
+
Args:
|
|
291
|
+
weight (float): The weight value.
|
|
292
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
293
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
294
|
+
"""
|
|
295
|
+
self.set("var", "mpl_blockage_weight", weight, step=step, index=index)
|
|
296
|
+
|
|
297
|
+
def set_openroad_mplnotchweight(self, weight: float,
|
|
298
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
299
|
+
"""
|
|
300
|
+
Sets the weight for the notch cost.
|
|
301
|
+
|
|
302
|
+
Args:
|
|
303
|
+
weight (float): The weight value.
|
|
304
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
305
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
306
|
+
"""
|
|
307
|
+
self.set("var", "mpl_notch_weight", weight, step=step, index=index)
|
|
308
|
+
|
|
309
|
+
def set_openroad_mplmacroblockageweight(self, weight: float,
|
|
310
|
+
step: Optional[str] = None,
|
|
311
|
+
index: Optional[str] = None):
|
|
312
|
+
"""
|
|
313
|
+
Sets the weight for macro blockage cost.
|
|
314
|
+
|
|
315
|
+
Args:
|
|
316
|
+
weight (float): The weight value.
|
|
317
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
318
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
319
|
+
"""
|
|
320
|
+
self.set("var", "mpl_macro_blockage_weight", weight, step=step, index=index)
|
|
321
|
+
|
|
70
322
|
def task(self):
|
|
71
323
|
return "macro_placement"
|
|
72
324
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Union, List, Optional
|
|
2
|
+
|
|
1
3
|
from siliconcompiler.tools.openroad._apr import APRTask
|
|
2
4
|
from siliconcompiler.tools.openroad._apr import OpenROADSTAParameter, OpenROADPSMParameter
|
|
3
5
|
|
|
@@ -26,6 +28,47 @@ class PowerGridTask(APRTask, OpenROADSTAParameter, OpenROADPSMParameter):
|
|
|
26
28
|
else:
|
|
27
29
|
self.add("var", "pdn_fileset", (library, fileset))
|
|
28
30
|
|
|
31
|
+
def set_openroad_fixedpinkeepout(self, keepout: float,
|
|
32
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
33
|
+
"""
|
|
34
|
+
Sets the blockage multiplier for fixed pins to ensure routing room.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
keepout (float): Blockage in multiples of routing pitch.
|
|
38
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
39
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
40
|
+
"""
|
|
41
|
+
self.set("var", "fixed_pin_keepout", keepout, step=step, index=index)
|
|
42
|
+
|
|
43
|
+
def add_openroad_missingterminalnets(self, nets: Union[str, List[str]],
|
|
44
|
+
step: Optional[str] = None, index: Optional[str] = None,
|
|
45
|
+
clobber: bool = False):
|
|
46
|
+
"""
|
|
47
|
+
Adds nets where missing terminals are acceptable.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
nets (Union[str, List[str]]): The net(s) to add.
|
|
51
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
52
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
53
|
+
clobber (bool, optional): If True, overwrites the existing list. Defaults to False.
|
|
54
|
+
"""
|
|
55
|
+
if clobber:
|
|
56
|
+
self.set("var", "psm_allow_missing_terminal_nets", nets, step=step, index=index)
|
|
57
|
+
else:
|
|
58
|
+
self.add("var", "psm_allow_missing_terminal_nets", nets, step=step, index=index)
|
|
59
|
+
|
|
60
|
+
def set_openroad_pdnenable(self, enable: bool,
|
|
61
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
62
|
+
"""
|
|
63
|
+
Enables or disables power grid generation.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
enable (bool): True to enable, False to disable.
|
|
67
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
68
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
69
|
+
"""
|
|
70
|
+
self.set("var", "pdn_enable", enable, step=step, index=index)
|
|
71
|
+
|
|
29
72
|
def task(self):
|
|
30
73
|
return "power_grid"
|
|
31
74
|
|
|
@@ -51,7 +94,7 @@ class PowerGridTask(APRTask, OpenROADSTAParameter, OpenROADPSMParameter):
|
|
|
51
94
|
|
|
52
95
|
def __import_pdn_filesets(self):
|
|
53
96
|
for lib in self.project.get("asic", "asiclib"):
|
|
54
|
-
libobj = self.project.
|
|
97
|
+
libobj = self.project.get_library(lib)
|
|
55
98
|
if libobj.valid("tool", "openroad", "power_grid_fileset"):
|
|
56
99
|
for fileset in libobj.get("tool", "openroad", "power_grid_fileset"):
|
|
57
100
|
self.add_openroad_powergridfileset(lib, fileset)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Optional, Union
|
|
2
|
+
|
|
1
3
|
from siliconcompiler.tools.openroad import OpenROADTask
|
|
2
4
|
|
|
3
5
|
|
|
@@ -12,6 +14,32 @@ class ORXBenchTask(OpenROADTask):
|
|
|
12
14
|
self.add_parameter("bench_length", "float", "Length of bench wires",
|
|
13
15
|
defvalue=100, units="um")
|
|
14
16
|
|
|
17
|
+
def set_openroad_benchmaxlayer(self, layer: str,
|
|
18
|
+
step: Optional[str] = None,
|
|
19
|
+
index: Optional[Union[int, str]] = None):
|
|
20
|
+
"""
|
|
21
|
+
Sets the maximum layer to generate the extraction bench for.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
layer (str): The layer name.
|
|
25
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
26
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
27
|
+
"""
|
|
28
|
+
self.set("var", "max_layer", layer, step=step, index=index)
|
|
29
|
+
|
|
30
|
+
def set_openroad_benchlength(self, length: float,
|
|
31
|
+
step: Optional[str] = None,
|
|
32
|
+
index: Optional[Union[int, str]] = None):
|
|
33
|
+
"""
|
|
34
|
+
Sets the length of bench wires.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
length (float): The length in microns.
|
|
38
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
39
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
40
|
+
"""
|
|
41
|
+
self.set("var", "bench_length", length, step=step, index=index)
|
|
42
|
+
|
|
15
43
|
def task(self):
|
|
16
44
|
return "rcx_bench"
|
|
17
45
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Optional, Union
|
|
2
|
+
|
|
1
3
|
from siliconcompiler.tools.openroad import OpenROADTask
|
|
2
4
|
|
|
3
5
|
|
|
@@ -10,6 +12,18 @@ class ORXExtractTask(OpenROADTask):
|
|
|
10
12
|
|
|
11
13
|
self.add_parameter("corner", "str", "Parasitic corner to generate RCX file for")
|
|
12
14
|
|
|
15
|
+
def set_openroad_rcxcorner(self, corner: str,
|
|
16
|
+
step: Optional[str] = None, index: Optional[Union[int, str]] = None):
|
|
17
|
+
"""
|
|
18
|
+
Sets the parasitic corner to generate the RCX file for.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
corner (str): The parasitic corner name.
|
|
22
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
23
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
24
|
+
"""
|
|
25
|
+
self.set("var", "corner", corner, step=step, index=index)
|
|
26
|
+
|
|
13
27
|
def task(self):
|
|
14
28
|
return "rcx_extract"
|
|
15
29
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
1
3
|
from siliconcompiler.tools.openroad import OpenROADTask
|
|
2
4
|
|
|
3
5
|
|
|
@@ -21,6 +23,18 @@ class RDLRouteTask(OpenROADTask):
|
|
|
21
23
|
else:
|
|
22
24
|
self.add("var", "rdlroute", file, step=step, index=index)
|
|
23
25
|
|
|
26
|
+
def set_openroad_addfill(self, enable: bool,
|
|
27
|
+
step: Optional[str] = None, index: Optional[str] = None):
|
|
28
|
+
"""
|
|
29
|
+
Enables or disables adding fill to the design.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
enable (bool): True to enable fill, False to disable.
|
|
33
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
34
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
35
|
+
"""
|
|
36
|
+
self.set("var", "fin_add_fill", enable, step=step, index=index)
|
|
37
|
+
|
|
24
38
|
def task(self):
|
|
25
39
|
return "rdlroute"
|
|
26
40
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Optional, Union
|
|
2
|
+
|
|
1
3
|
from siliconcompiler.tools.openroad._apr import APRTask
|
|
2
4
|
from siliconcompiler.tools.openroad._apr import OpenROADSTAParameter, OpenROADRSZDRVParameter
|
|
3
5
|
|
|
@@ -20,6 +22,45 @@ class RepairDesignTask(APRTask, OpenROADSTAParameter, OpenROADRSZDRVParameter):
|
|
|
20
22
|
"true/false, when true enables adding buffers to the output ports",
|
|
21
23
|
defvalue=False)
|
|
22
24
|
|
|
25
|
+
def set_openroad_tieseparation(self, separation: float,
|
|
26
|
+
step: Optional[str] = None,
|
|
27
|
+
index: Optional[Union[int, str]] = None):
|
|
28
|
+
"""
|
|
29
|
+
Sets the maximum distance between tie high/low cells.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
separation (float): The separation distance in microns.
|
|
33
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
34
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
35
|
+
"""
|
|
36
|
+
self.set("var", "ifp_tie_separation", separation, step=step, index=index)
|
|
37
|
+
|
|
38
|
+
def set_openroad_bufferinputs(self, enable: bool,
|
|
39
|
+
step: Optional[str] = None,
|
|
40
|
+
index: Optional[Union[int, str]] = None):
|
|
41
|
+
"""
|
|
42
|
+
Enables or disables adding buffers to the input ports.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
enable (bool): True to enable, False to disable.
|
|
46
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
47
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
48
|
+
"""
|
|
49
|
+
self.set("var", "rsz_buffer_inputs", enable, step=step, index=index)
|
|
50
|
+
|
|
51
|
+
def set_openroad_bufferoutputs(self, enable: bool,
|
|
52
|
+
step: Optional[str] = None,
|
|
53
|
+
index: Optional[Union[int, str]] = None):
|
|
54
|
+
"""
|
|
55
|
+
Enables or disables adding buffers to the output ports.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
enable (bool): True to enable, False to disable.
|
|
59
|
+
step (str, optional): The specific step to apply this configuration to.
|
|
60
|
+
index (str, optional): The specific index to apply this configuration to.
|
|
61
|
+
"""
|
|
62
|
+
self.set("var", "rsz_buffer_outputs", enable, step=step, index=index)
|
|
63
|
+
|
|
23
64
|
def task(self):
|
|
24
65
|
return "repair_design"
|
|
25
66
|
|