siliconcompiler 0.29.2__py3-none-any.whl → 0.29.4__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/apps/sc_install.py +19 -4
- siliconcompiler/core.py +8 -3
- siliconcompiler/flowgraph.py +23 -5
- siliconcompiler/remote/client.py +3 -0
- siliconcompiler/scheduler/__init__.py +30 -12
- siliconcompiler/tools/__init__.py +1 -1
- siliconcompiler/tools/_common/asic.py +3 -0
- siliconcompiler/tools/_common/asic_clock.py +101 -0
- siliconcompiler/tools/bambu/__init__.py +32 -0
- siliconcompiler/tools/bambu/convert.py +93 -11
- siliconcompiler/tools/bluespec/convert.py +2 -1
- siliconcompiler/tools/chisel/convert.py +2 -1
- siliconcompiler/tools/genfasm/bitstream.py +2 -2
- siliconcompiler/tools/ghdl/convert.py +2 -2
- siliconcompiler/tools/gtkwave/show.py +2 -1
- siliconcompiler/tools/icarus/compile.py +2 -2
- siliconcompiler/tools/klayout/drc.py +2 -1
- siliconcompiler/tools/magic/magic.py +1 -1
- siliconcompiler/tools/netgen/lvs.py +2 -1
- siliconcompiler/tools/openroad/_apr.py +16 -4
- siliconcompiler/tools/openroad/fillmetal_insertion.py +0 -1
- siliconcompiler/tools/openroad/init_floorplan.py +7 -1
- siliconcompiler/tools/openroad/macro_placement.py +1 -2
- siliconcompiler/tools/openroad/pin_placement.py +0 -1
- siliconcompiler/tools/openroad/rdlroute.py +2 -2
- siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +3 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +1 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +78 -94
- siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +12 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +24 -0
- siliconcompiler/tools/openroad/scripts/common/procs.tcl +3 -2
- siliconcompiler/tools/openroad/scripts/common/read_input_files.tcl +1 -0
- siliconcompiler/tools/openroad/scripts/common/reports.tcl +4 -13
- siliconcompiler/tools/openroad/scripts/common/write_data.tcl +2 -5
- siliconcompiler/tools/openroad/scripts/common/write_data_physical.tcl +3 -0
- siliconcompiler/tools/openroad/scripts/common/write_data_timing.tcl +1 -0
- siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +1 -1
- siliconcompiler/tools/opensta/__init__.py +2 -2
- siliconcompiler/tools/opensta/report_libraries.py +2 -2
- siliconcompiler/tools/opensta/timing.py +2 -1
- siliconcompiler/tools/slang/__init__.py +79 -2
- siliconcompiler/tools/slang/elaborate.py +46 -0
- siliconcompiler/tools/slang/lint.py +10 -76
- siliconcompiler/tools/surelog/parse.py +1 -1
- siliconcompiler/tools/sv2v/convert.py +2 -2
- siliconcompiler/tools/template/template.py +2 -2
- siliconcompiler/tools/verilator/verilator.py +3 -1
- siliconcompiler/tools/vivado/vivado.py +2 -1
- siliconcompiler/tools/vpr/place.py +2 -2
- siliconcompiler/tools/vpr/route.py +2 -2
- siliconcompiler/tools/vpr/show.py +2 -1
- siliconcompiler/tools/yosys/__init__.py +26 -23
- siliconcompiler/tools/yosys/procs.tcl +17 -0
- siliconcompiler/tools/yosys/syn_asic.py +20 -65
- siliconcompiler/tools/yosys/syn_asic.tcl +10 -51
- siliconcompiler/toolscripts/_tools.json +4 -4
- siliconcompiler/toolscripts/rhel8/install-slang.sh +0 -0
- siliconcompiler/toolscripts/rhel8/install-sv2v.sh +7 -1
- siliconcompiler/toolscripts/rhel8/install-yosys.sh +1 -1
- siliconcompiler/toolscripts/rhel9/install-openroad.sh +34 -0
- siliconcompiler/toolscripts/rhel9/install-slang.sh +0 -0
- siliconcompiler/toolscripts/rhel9/install-sv2v.sh +7 -1
- siliconcompiler/toolscripts/rhel9/install-yosys.sh +1 -1
- siliconcompiler/toolscripts/ubuntu20/install-slang.sh +0 -0
- siliconcompiler/toolscripts/ubuntu20/install-surelog.sh +1 -0
- siliconcompiler/toolscripts/ubuntu20/install-sv2v.sh +7 -1
- siliconcompiler/toolscripts/ubuntu20/install-yosys.sh +1 -1
- siliconcompiler/toolscripts/ubuntu22/install-surelog.sh +7 -1
- siliconcompiler/toolscripts/ubuntu22/install-sv2v.sh +7 -1
- siliconcompiler/toolscripts/ubuntu22/install-yosys.sh +1 -1
- siliconcompiler/toolscripts/ubuntu24/install-bambu.sh +3 -4
- siliconcompiler/toolscripts/ubuntu24/install-slang.sh +0 -0
- siliconcompiler/toolscripts/ubuntu24/install-surelog.sh +7 -1
- siliconcompiler/toolscripts/ubuntu24/install-sv2v.sh +7 -1
- siliconcompiler/toolscripts/ubuntu24/install-yosys.sh +1 -1
- siliconcompiler/utils/__init__.py +24 -0
- siliconcompiler/utils/logging.py +67 -0
- {siliconcompiler-0.29.2.dist-info → siliconcompiler-0.29.4.dist-info}/METADATA +8 -8
- {siliconcompiler-0.29.2.dist-info → siliconcompiler-0.29.4.dist-info}/RECORD +80 -75
- siliconcompiler/tools/bambu/bambu.py +0 -32
- {siliconcompiler-0.29.2.dist-info → siliconcompiler-0.29.4.dist-info}/LICENSE +0 -0
- {siliconcompiler-0.29.2.dist-info → siliconcompiler-0.29.4.dist-info}/WHEEL +0 -0
- {siliconcompiler-0.29.2.dist-info → siliconcompiler-0.29.4.dist-info}/entry_points.txt +0 -0
- {siliconcompiler-0.29.2.dist-info → siliconcompiler-0.29.4.dist-info}/top_level.txt +0 -0
|
@@ -3,6 +3,7 @@ import os
|
|
|
3
3
|
from siliconcompiler.tools.gtkwave import setup as tool_setup
|
|
4
4
|
from siliconcompiler.tools._common import \
|
|
5
5
|
add_require_input, get_tool_task, input_provides
|
|
6
|
+
from siliconcompiler import utils
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
def setup(chip):
|
|
@@ -16,7 +17,7 @@ def setup(chip):
|
|
|
16
17
|
index = chip.get('arg', 'index')
|
|
17
18
|
tool, task = get_tool_task(chip, step, index)
|
|
18
19
|
|
|
19
|
-
chip.set('tool', tool, 'task', task, 'threads',
|
|
20
|
+
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
20
21
|
step=step, index=index)
|
|
21
22
|
|
|
22
23
|
chip.set('tool', tool, 'task', task, 'refdir',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import os
|
|
2
1
|
from siliconcompiler.tools._common import \
|
|
3
2
|
add_require_input, add_frontend_requires, get_input_files, get_frontend_options, \
|
|
4
3
|
get_tool_task
|
|
4
|
+
from siliconcompiler import utils
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
def setup(chip):
|
|
@@ -20,7 +20,7 @@ def setup(chip):
|
|
|
20
20
|
chip.set('tool', tool, 'vswitch', '-V')
|
|
21
21
|
chip.set('tool', tool, 'version', '>=10.3', clobber=False)
|
|
22
22
|
|
|
23
|
-
chip.set('tool', tool, 'task', task, 'threads',
|
|
23
|
+
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
24
24
|
step=step, index=index, clobber=False)
|
|
25
25
|
|
|
26
26
|
chip.set('tool', tool, 'task', task, 'var', 'verilog_generation',
|
|
@@ -7,6 +7,7 @@ from siliconcompiler.tools._common.asic import set_tool_task_var, get_tool_task_
|
|
|
7
7
|
|
|
8
8
|
from siliconcompiler.tools.klayout.klayout import setup as setup_tool
|
|
9
9
|
import xml.etree.ElementTree as ET
|
|
10
|
+
from siliconcompiler import utils
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
def make_docs(chip):
|
|
@@ -35,7 +36,7 @@ def setup(chip):
|
|
|
35
36
|
chip.set('tool', tool, 'task', task, 'option', option,
|
|
36
37
|
step=step, index=index, clobber=clobber)
|
|
37
38
|
|
|
38
|
-
chip.set('tool', tool, 'task', task, 'threads',
|
|
39
|
+
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
39
40
|
step=step, index=index, clobber=clobber)
|
|
40
41
|
|
|
41
42
|
chip.add('tool', tool, 'task', task, 'require', 'option,pdk')
|
|
@@ -47,7 +47,7 @@ def setup(chip):
|
|
|
47
47
|
chip.set('tool', tool, 'version', '>=8.3.196', clobber=False)
|
|
48
48
|
chip.set('tool', tool, 'format', 'tcl')
|
|
49
49
|
|
|
50
|
-
chip.set('tool', tool, 'task', task, 'threads',
|
|
50
|
+
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
51
51
|
step=step, index=index, clobber=False)
|
|
52
52
|
chip.set('tool', tool, 'task', task, 'refdir', refdir,
|
|
53
53
|
step=step, index=index,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
|
|
3
|
+
from siliconcompiler import utils
|
|
3
4
|
from siliconcompiler.tools.netgen import count_lvs
|
|
4
5
|
from siliconcompiler import sc_open
|
|
5
6
|
from siliconcompiler.tools._common import get_tool_task, record_metric
|
|
@@ -24,7 +25,7 @@ def setup(chip):
|
|
|
24
25
|
chip.set('tool', tool, 'version', '>=1.5.192', clobber=False)
|
|
25
26
|
chip.set('tool', tool, 'format', 'tcl')
|
|
26
27
|
|
|
27
|
-
chip.set('tool', tool, 'task', task, 'threads',
|
|
28
|
+
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
28
29
|
step=step, index=index, clobber=False)
|
|
29
30
|
chip.set('tool', tool, 'task', task, 'refdir', refdir,
|
|
30
31
|
step=step, index=index,
|
|
@@ -16,7 +16,7 @@ def setup(chip, exit=True):
|
|
|
16
16
|
index = chip.get('arg', 'index')
|
|
17
17
|
tool, task = get_tool_task(chip, step, index)
|
|
18
18
|
|
|
19
|
-
chip.set('tool', tool, 'task', task, 'threads',
|
|
19
|
+
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
20
20
|
step=step, index=index)
|
|
21
21
|
|
|
22
22
|
pdkname = chip.get('option', 'pdk')
|
|
@@ -148,6 +148,10 @@ def extract_metrics(chip):
|
|
|
148
148
|
|
|
149
149
|
metrics_file = "reports/metrics.json"
|
|
150
150
|
|
|
151
|
+
if not os.path.exists(metrics_file):
|
|
152
|
+
chip.logger.warning("OpenROAD metrics file is missing")
|
|
153
|
+
return
|
|
154
|
+
|
|
151
155
|
def get_metric_sources(metric):
|
|
152
156
|
metric_sources = [metrics_file]
|
|
153
157
|
if metric in metric_reports:
|
|
@@ -572,6 +576,13 @@ def define_rsz_params(chip):
|
|
|
572
576
|
default_value='100',
|
|
573
577
|
schelp='percentage of violating nets to attempt to repair (0 - 100)')
|
|
574
578
|
|
|
579
|
+
set_tool_task_var(chip, param_key='rsz_skip_recover_power',
|
|
580
|
+
default_value=False,
|
|
581
|
+
schelp='skip power recovery')
|
|
582
|
+
set_tool_task_var(chip, param_key='rsz_recover_power',
|
|
583
|
+
default_value=100,
|
|
584
|
+
schelp='percentage of paths to attempt to recover power (0 - 100)')
|
|
585
|
+
|
|
575
586
|
step = chip.get('arg', 'step')
|
|
576
587
|
index = chip.get('arg', 'index')
|
|
577
588
|
tool, task = get_tool_task(chip, step, index)
|
|
@@ -792,6 +803,10 @@ def define_psm_params(chip):
|
|
|
792
803
|
'list of nets to skip power grid analysis on',
|
|
793
804
|
field='help')
|
|
794
805
|
|
|
806
|
+
chip.set('tool', tool, 'task', task, 'var', 'psm_allow_missing_terminal_nets',
|
|
807
|
+
'list of nets where a missing terminal is acceptable',
|
|
808
|
+
field='help')
|
|
809
|
+
|
|
795
810
|
|
|
796
811
|
def define_fin_params(chip):
|
|
797
812
|
set_tool_task_var(chip, param_key='fin_add_fill',
|
|
@@ -810,9 +825,6 @@ def define_mpl_params(chip):
|
|
|
810
825
|
schelp='macro channel to use when performing automated '
|
|
811
826
|
'macro placement ([x, y] in microns)')
|
|
812
827
|
|
|
813
|
-
set_tool_task_var(chip, param_key='rtlmp_enable',
|
|
814
|
-
default_value=True,
|
|
815
|
-
schelp='true/false, enables the RTLMP macro placement')
|
|
816
828
|
set_tool_task_var(chip, param_key='rtlmp_min_instances',
|
|
817
829
|
schelp='minimum number of instances to use while clustering for '
|
|
818
830
|
'macro placement')
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from siliconcompiler.tools._common import input_provides, add_common_file, get_tool_task
|
|
2
|
-
from siliconcompiler.tools._common.asic import set_tool_task_var
|
|
2
|
+
from siliconcompiler.tools._common.asic import set_tool_task_var, get_mainlib
|
|
3
3
|
|
|
4
4
|
from siliconcompiler.tools.openroad._apr import setup as apr_setup
|
|
5
5
|
from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs
|
|
@@ -74,6 +74,8 @@ def setup(chip):
|
|
|
74
74
|
'power'
|
|
75
75
|
])
|
|
76
76
|
|
|
77
|
+
mainlib = get_mainlib(chip)
|
|
78
|
+
|
|
77
79
|
# Setup required
|
|
78
80
|
for component in chip.getkeys('constraint', 'component'):
|
|
79
81
|
for key in chip.getkeys('constraint', 'component', component):
|
|
@@ -92,6 +94,10 @@ def setup(chip):
|
|
|
92
94
|
chip.add('tool', tool, 'task', task, 'require',
|
|
93
95
|
','.join(['constraint', ifp]),
|
|
94
96
|
step=step, index=index)
|
|
97
|
+
if chip.valid('library', mainlib, 'option', 'file', 'openroad_tracks'):
|
|
98
|
+
chip.add('tool', tool, 'task', task, 'require',
|
|
99
|
+
','.join(['library', mainlib, 'option', 'file', 'openroad_tracks']),
|
|
100
|
+
step=step, index=index)
|
|
95
101
|
|
|
96
102
|
|
|
97
103
|
def pre_process(chip):
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
|
|
3
|
+
from siliconcompiler import utils
|
|
3
4
|
from siliconcompiler.tools._common import input_provides, get_tool_task
|
|
4
5
|
from siliconcompiler.tools._common.asic import set_tool_task_var
|
|
5
6
|
from siliconcompiler.tools.openroad._apr import build_pex_corners
|
|
@@ -44,7 +45,7 @@ def setup(chip):
|
|
|
44
45
|
package='siliconcompiler')
|
|
45
46
|
chip.set('tool', tool, 'task', task, 'script', script,
|
|
46
47
|
step=step, index=index)
|
|
47
|
-
chip.set('tool', tool, 'task', task, 'threads',
|
|
48
|
+
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
48
49
|
step=step, index=index, clobber=False)
|
|
49
50
|
|
|
50
51
|
if chip.get('option', 'nodisplay'):
|
|
@@ -83,7 +84,6 @@ def setup(chip):
|
|
|
83
84
|
','.join(['input', 'netlist', 'verilog']),
|
|
84
85
|
step=step, index=index)
|
|
85
86
|
|
|
86
|
-
chip.add('tool', tool, 'task', task, 'output', design + '.sdc', step=step, index=index)
|
|
87
87
|
chip.add('tool', tool, 'task', task, 'output', design + '.vg', step=step, index=index)
|
|
88
88
|
chip.add('tool', tool, 'task', task, 'output', design + '.def', step=step, index=index)
|
|
89
89
|
chip.add('tool', tool, 'task', task, 'output', design + '.odb', step=step, index=index)
|
|
@@ -91,5 +91,6 @@ if { [llength $openroad_dont_touch] > 0 } {
|
|
|
91
91
|
# set don't touch list
|
|
92
92
|
set_dont_touch $openroad_dont_touch
|
|
93
93
|
}
|
|
94
|
-
tee -file reports/dont_touch.start.rpt {report_dont_touch}
|
|
95
|
-
tee -file reports/dont_use.start.rpt {report_dont_use}
|
|
94
|
+
tee -quiet -file reports/dont_touch.start.rpt {report_dont_touch}
|
|
95
|
+
tee -quiet -file reports/dont_use.start.rpt {report_dont_use}
|
|
96
|
+
tee -file reports/global_connections.start.rpt {report_global_connect}
|
|
@@ -14,104 +14,88 @@ source -echo "$sc_refdir/apr/preamble.tcl"
|
|
|
14
14
|
# Need to check if we have any macros before performing macro placement,
|
|
15
15
|
# since we get an error otherwise.
|
|
16
16
|
if { [sc_design_has_unplaced_macros] } {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
###############################
|
|
17
|
+
###############################
|
|
18
|
+
# Macro placement
|
|
19
|
+
###############################
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
lassign [sc_cfg_tool_task_get var macro_place_halo] halo_x halo_y
|
|
23
22
|
|
|
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
|
-
set rtlmp_area_weight [lindex [sc_cfg_tool_task_get var rtlmp_area_weight] 0]
|
|
66
|
-
if { $rtlmp_area_weight != "" } {
|
|
67
|
-
lappend rtlmp_args -area_weight $rtlmp_area_weight
|
|
68
|
-
}
|
|
69
|
-
set rtlmp_outline_weight [lindex [sc_cfg_tool_task_get var rtlmp_outline_weight] 0]
|
|
70
|
-
if { $rtlmp_outline_weight != "" } {
|
|
71
|
-
lappend rtlmp_args -outline_weight $rtlmp_outline_weight
|
|
72
|
-
}
|
|
73
|
-
set rtlmp_wirelength_weight [lindex [sc_cfg_tool_task_get var rtlmp_wirelength_weight] 0]
|
|
74
|
-
if { $rtlmp_wirelength_weight != "" } {
|
|
75
|
-
lappend rtlmp_args -wirelength_weight $rtlmp_wirelength_weight
|
|
76
|
-
}
|
|
77
|
-
set rtlmp_guidance_weight [lindex [sc_cfg_tool_task_get var rtlmp_guidance_weight] 0]
|
|
78
|
-
if { $rtlmp_guidance_weight != "" } {
|
|
79
|
-
lappend rtlmp_args -guidance_weight $rtlmp_guidance_weight
|
|
80
|
-
}
|
|
81
|
-
set rtlmp_fence_weight [lindex [sc_cfg_tool_task_get var rtlmp_fence_weight] 0]
|
|
82
|
-
if { $rtlmp_fence_weight != "" } {
|
|
83
|
-
lappend rtlmp_args -fence_weight $rtlmp_fence_weight
|
|
84
|
-
}
|
|
85
|
-
set rtlmp_notch_weight [lindex [sc_cfg_tool_task_get var rtlmp_notch_weight] 0]
|
|
86
|
-
if { $rtlmp_notch_weight != "" } {
|
|
87
|
-
lappend rtlmp_args -notch_weight $rtlmp_notch_weight
|
|
88
|
-
}
|
|
89
|
-
set rtlmp_blockage_weight [lindex [sc_cfg_tool_task_get var rtlmp_blockage_weight] 0]
|
|
90
|
-
if { $rtlmp_blockage_weight != "" } {
|
|
91
|
-
lappend rtlmp_args -blockage_weight $rtlmp_blockage_weight
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
rtl_macro_placer \
|
|
95
|
-
-report_directory reports/rtlmp \
|
|
96
|
-
-halo_width $halo_x \
|
|
97
|
-
-halo_height $halo_y \
|
|
98
|
-
-target_util [sc_global_placement_density] \
|
|
99
|
-
{*}$rtlmp_args
|
|
100
|
-
} else {
|
|
101
|
-
###############################
|
|
102
|
-
# TDMS Global Placement
|
|
103
|
-
###############################
|
|
104
|
-
|
|
105
|
-
sc_global_placement -disable_routability_driven
|
|
106
|
-
|
|
107
|
-
###############################
|
|
108
|
-
# Macro placement
|
|
109
|
-
###############################
|
|
23
|
+
set rtlmp_args []
|
|
24
|
+
set rtlmp_max_levels [lindex [sc_cfg_tool_task_get var rtlmp_max_levels] 0]
|
|
25
|
+
if { $rtlmp_max_levels != "" } {
|
|
26
|
+
lappend rtlmp_args -max_num_level $rtlmp_max_levels
|
|
27
|
+
}
|
|
28
|
+
set rtlmp_min_instances [lindex [sc_cfg_tool_task_get var rtlmp_min_instances] 0]
|
|
29
|
+
if { $rtlmp_min_instances != "" } {
|
|
30
|
+
lappend rtlmp_args -min_num_inst $rtlmp_min_instances
|
|
31
|
+
}
|
|
32
|
+
set rtlmp_max_instances [lindex [sc_cfg_tool_task_get var rtlmp_max_instances] 0]
|
|
33
|
+
if { $rtlmp_max_instances != "" } {
|
|
34
|
+
lappend rtlmp_args -max_num_inst $rtlmp_max_instances
|
|
35
|
+
}
|
|
36
|
+
set rtlmp_min_macros [lindex [sc_cfg_tool_task_get var rtlmp_min_macros] 0]
|
|
37
|
+
if { $rtlmp_min_macros != "" } {
|
|
38
|
+
lappend rtlmp_args -min_num_macro $rtlmp_min_macros
|
|
39
|
+
}
|
|
40
|
+
set rtlmp_max_macros [lindex [sc_cfg_tool_task_get var rtlmp_max_macros] 0]
|
|
41
|
+
if { $rtlmp_max_macros != "" } {
|
|
42
|
+
lappend rtlmp_args -max_num_macro $rtlmp_max_macros
|
|
43
|
+
}
|
|
44
|
+
set rtlmp_min_aspect_ratio [lindex [sc_cfg_tool_task_get var rtlmp_min_aspect_ratio] 0]
|
|
45
|
+
if { $rtlmp_min_aspect_ratio != "" } {
|
|
46
|
+
lappend rtlmp_args -min_ar $rtlmp_min_aspect_ratio
|
|
47
|
+
}
|
|
48
|
+
set rtlmp_fence [sc_cfg_tool_task_get var rtlmp_fence]
|
|
49
|
+
if { $rtlmp_fence != "" } {
|
|
50
|
+
lappend rtlmp_args -fence_lx [lindex $rtlmp_fence 0]
|
|
51
|
+
lappend rtlmp_args -fence_ly [lindex $rtlmp_fence 1]
|
|
52
|
+
lappend rtlmp_args -fence_ux [lindex $rtlmp_fence 2]
|
|
53
|
+
lappend rtlmp_args -fence_uy [lindex $rtlmp_fence 3]
|
|
54
|
+
}
|
|
55
|
+
set rtlmp_bus_planning [lindex [sc_cfg_tool_task_get var rtlmp_bus_planning] 0]
|
|
56
|
+
if { $rtlmp_bus_planning == "true" } {
|
|
57
|
+
lappend rtlmp_args -bus_planning
|
|
58
|
+
}
|
|
59
|
+
set rtlmp_target_dead_space [lindex [sc_cfg_tool_task_get var rtlmp_target_dead_space] 0]
|
|
60
|
+
if { $rtlmp_target_dead_space != "" } {
|
|
61
|
+
lappend rtlmp_args -target_dead_space $rtlmp_target_dead_space
|
|
62
|
+
}
|
|
110
63
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
64
|
+
set rtlmp_area_weight [lindex [sc_cfg_tool_task_get var rtlmp_area_weight] 0]
|
|
65
|
+
if { $rtlmp_area_weight != "" } {
|
|
66
|
+
lappend rtlmp_args -area_weight $rtlmp_area_weight
|
|
67
|
+
}
|
|
68
|
+
set rtlmp_outline_weight [lindex [sc_cfg_tool_task_get var rtlmp_outline_weight] 0]
|
|
69
|
+
if { $rtlmp_outline_weight != "" } {
|
|
70
|
+
lappend rtlmp_args -outline_weight $rtlmp_outline_weight
|
|
71
|
+
}
|
|
72
|
+
set rtlmp_wirelength_weight [lindex [sc_cfg_tool_task_get var rtlmp_wirelength_weight] 0]
|
|
73
|
+
if { $rtlmp_wirelength_weight != "" } {
|
|
74
|
+
lappend rtlmp_args -wirelength_weight $rtlmp_wirelength_weight
|
|
114
75
|
}
|
|
76
|
+
set rtlmp_guidance_weight [lindex [sc_cfg_tool_task_get var rtlmp_guidance_weight] 0]
|
|
77
|
+
if { $rtlmp_guidance_weight != "" } {
|
|
78
|
+
lappend rtlmp_args -guidance_weight $rtlmp_guidance_weight
|
|
79
|
+
}
|
|
80
|
+
set rtlmp_fence_weight [lindex [sc_cfg_tool_task_get var rtlmp_fence_weight] 0]
|
|
81
|
+
if { $rtlmp_fence_weight != "" } {
|
|
82
|
+
lappend rtlmp_args -fence_weight $rtlmp_fence_weight
|
|
83
|
+
}
|
|
84
|
+
set rtlmp_notch_weight [lindex [sc_cfg_tool_task_get var rtlmp_notch_weight] 0]
|
|
85
|
+
if { $rtlmp_notch_weight != "" } {
|
|
86
|
+
lappend rtlmp_args -notch_weight $rtlmp_notch_weight
|
|
87
|
+
}
|
|
88
|
+
set rtlmp_blockage_weight [lindex [sc_cfg_tool_task_get var rtlmp_blockage_weight] 0]
|
|
89
|
+
if { $rtlmp_blockage_weight != "" } {
|
|
90
|
+
lappend rtlmp_args -blockage_weight $rtlmp_blockage_weight
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
rtl_macro_placer \
|
|
94
|
+
-report_directory reports/rtlmp \
|
|
95
|
+
-halo_width $halo_x \
|
|
96
|
+
-halo_height $halo_y \
|
|
97
|
+
-target_util [sc_global_placement_density] \
|
|
98
|
+
{*}$rtlmp_args
|
|
115
99
|
}
|
|
116
100
|
|
|
117
101
|
sc_print_macro_information
|
|
@@ -33,6 +33,7 @@ foreach pdnconfig [sc_cfg_tool_task_get {file} pdn_config] {
|
|
|
33
33
|
|
|
34
34
|
lappend pdn_files $pdnconfig
|
|
35
35
|
}
|
|
36
|
+
tee -quiet -file reports/power_grid_configuration.rpt {pdngen -report_only}
|
|
36
37
|
pdngen -failed_via_report "reports/${sc_design}_pdngen_failed_vias.rpt"
|
|
37
38
|
|
|
38
39
|
###############################
|
|
@@ -47,10 +48,20 @@ foreach net [sc_supply_nets] {
|
|
|
47
48
|
|
|
48
49
|
foreach net [sc_psm_check_nets] {
|
|
49
50
|
puts "Check supply net: $net"
|
|
51
|
+
|
|
52
|
+
set check_args []
|
|
53
|
+
if {
|
|
54
|
+
[sc_check_version 18610] &&
|
|
55
|
+
[sc_cfg_tool_task_check_in_list $net var psm_allow_missing_terminal_nets]
|
|
56
|
+
} {
|
|
57
|
+
lappend check_args -dont_require_terminals
|
|
58
|
+
}
|
|
59
|
+
|
|
50
60
|
check_power_grid \
|
|
51
61
|
-floorplanning \
|
|
52
62
|
-error_file "reports/power_grid_${net}.rpt" \
|
|
53
|
-
-net $net
|
|
63
|
+
-net $net \
|
|
64
|
+
{*}$check_args
|
|
54
65
|
}
|
|
55
66
|
|
|
56
67
|
###############################
|
|
@@ -20,6 +20,7 @@ set rsz_hold_slack_margin [lindex [sc_cfg_tool_task_get {var} rsz_hold_slack_mar
|
|
|
20
20
|
set rsz_slew_margin [lindex [sc_cfg_tool_task_get {var} rsz_slew_margin] 0]
|
|
21
21
|
set rsz_cap_margin [lindex [sc_cfg_tool_task_get {var} rsz_cap_margin] 0]
|
|
22
22
|
set rsz_repair_tns [lindex [sc_cfg_tool_task_get {var} rsz_repair_tns] 0]
|
|
23
|
+
set rsz_recover_power [lindex [sc_cfg_tool_task_get {var} rsz_recover_power] 0]
|
|
23
24
|
|
|
24
25
|
set repair_timing_args []
|
|
25
26
|
if { [lindex [sc_cfg_tool_task_get {var} rsz_skip_pin_swap] 0] == "true" } {
|
|
@@ -77,6 +78,29 @@ if { [lindex [sc_cfg_tool_task_get var rsz_skip_hold_repair] 0] != "true" } {
|
|
|
77
78
|
sc_set_dont_use
|
|
78
79
|
}
|
|
79
80
|
|
|
81
|
+
if { [lindex [sc_cfg_tool_task_get var rsz_skip_recover_power] 0] != "true" } {
|
|
82
|
+
###############################
|
|
83
|
+
# Recover power
|
|
84
|
+
###############################
|
|
85
|
+
|
|
86
|
+
estimate_parasitics -placement
|
|
87
|
+
|
|
88
|
+
# Enable cells
|
|
89
|
+
sc_set_dont_use -hold -scanchain -multibit -report dont_use.repair_timing.power
|
|
90
|
+
|
|
91
|
+
repair_timing \
|
|
92
|
+
-recover_power $rsz_recover_power \
|
|
93
|
+
-verbose \
|
|
94
|
+
-setup_margin $rsz_setup_slack_margin \
|
|
95
|
+
-hold_margin $rsz_hold_slack_margin \
|
|
96
|
+
{*}$repair_timing_args
|
|
97
|
+
|
|
98
|
+
sc_detailed_placement
|
|
99
|
+
|
|
100
|
+
# Restore dont use
|
|
101
|
+
sc_set_dont_use
|
|
102
|
+
}
|
|
103
|
+
|
|
80
104
|
global_connect
|
|
81
105
|
|
|
82
106
|
# estimate for metrics
|
|
@@ -581,7 +581,7 @@ proc sc_setup_sta { } {
|
|
|
581
581
|
|
|
582
582
|
# Check timing setup
|
|
583
583
|
if { [sc_cfg_tool_task_check_in_list check_setup var reports] } {
|
|
584
|
-
check_setup
|
|
584
|
+
tee -file "reports/check_timing_setup.rpt" {check_setup -verbose}
|
|
585
585
|
}
|
|
586
586
|
|
|
587
587
|
if { [llength [all_clocks]] == 0 } {
|
|
@@ -758,6 +758,7 @@ proc sc_set_dont_use { args } {
|
|
|
758
758
|
}
|
|
759
759
|
|
|
760
760
|
if { [info exists keys(-report)] } {
|
|
761
|
-
|
|
761
|
+
puts "Dont use report: reports/$keys(-report).rpt"
|
|
762
|
+
tee -quiet -file reports/$keys(-report).rpt {report_dont_use}
|
|
762
763
|
}
|
|
763
764
|
}
|
|
@@ -98,6 +98,10 @@ if { [sc_cfg_tool_task_check_in_list fmax var reports] } {
|
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
+
if { [llength [all_clocks]] > 0 } {
|
|
102
|
+
tee -file "reports/timing/clocks.rpt" {report_clock_properties}
|
|
103
|
+
}
|
|
104
|
+
|
|
101
105
|
# get logic depth of design
|
|
102
106
|
utl::metric_int "design__logic__depth" [sc_count_logic_depth]
|
|
103
107
|
|
|
@@ -164,17 +168,4 @@ foreach markerdb [[ord::get_db_block] getMarkerCategories] {
|
|
|
164
168
|
|
|
165
169
|
utl::push_metrics_stage "sc__cellarea__{}"
|
|
166
170
|
tee -file reports/cell_usage.rpt {report_cell_usage -verbose}
|
|
167
|
-
|
|
168
|
-
foreach modinst [[ord::get_db_block] getModInsts] {
|
|
169
|
-
tee -quiet -append -file reports/cell_usage.rpt { puts "" }
|
|
170
|
-
tee -quiet -append -file reports/cell_usage.rpt {
|
|
171
|
-
puts "########################################################"
|
|
172
|
-
}
|
|
173
|
-
tee -quiet -append -file reports/cell_usage.rpt { puts "" }
|
|
174
|
-
|
|
175
|
-
utl::metric "design__instance__name__in_module:[[$modinst getMaster] getName]" \
|
|
176
|
-
[$modinst getHierarchicalName]
|
|
177
|
-
tee -quiet -append -file reports/cell_usage.rpt \
|
|
178
|
-
"report_cell_usage -verbose [$modinst getHierarchicalName]"
|
|
179
|
-
}
|
|
180
171
|
utl::pop_metrics_stage
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
write_def "outputs/${sc_design}.def"
|
|
5
|
-
write_verilog -include_pwr_gnd "outputs/${sc_design}.vg"
|
|
1
|
+
source "$sc_refdir/common/write_data_physical.tcl"
|
|
2
|
+
source "$sc_refdir/common/write_data_timing.tcl"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
write_sdc "outputs/${sc_design}.sdc"
|
|
@@ -8,7 +8,7 @@ Sources: https://github.com/The-OpenROAD-Project/OpenSTA
|
|
|
8
8
|
Installation: https://github.com/The-OpenROAD-Project/OpenSTA (also installed with OpenROAD)
|
|
9
9
|
'''
|
|
10
10
|
|
|
11
|
-
import
|
|
11
|
+
from siliconcompiler import utils
|
|
12
12
|
from siliconcompiler.tools.openroad._apr import get_library_timing_keypaths
|
|
13
13
|
from siliconcompiler.tools._common import get_tool_task
|
|
14
14
|
from siliconcompiler.tools._common.asic import get_libraries
|
|
@@ -43,7 +43,7 @@ def setup(chip):
|
|
|
43
43
|
chip.set('tool', tool, 'task', task, 'refdir', 'tools/opensta/scripts',
|
|
44
44
|
step=step, index=index,
|
|
45
45
|
package='siliconcompiler', clobber=False)
|
|
46
|
-
chip.set('tool', tool, 'task', task, 'threads',
|
|
46
|
+
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
47
47
|
step=step, index=index, clobber=False)
|
|
48
48
|
|
|
49
49
|
if delaymodel != 'nldm':
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
from siliconcompiler import utils
|
|
2
2
|
from siliconcompiler.tools.opensta import setup as tool_setup
|
|
3
3
|
from siliconcompiler.tools.opensta import runtime_options as tool_runtime_options
|
|
4
4
|
from siliconcompiler.tools._common import get_tool_task
|
|
@@ -17,7 +17,7 @@ def setup(chip):
|
|
|
17
17
|
chip.set('tool', tool, 'task', task, 'script', 'sc_report_libraries.tcl',
|
|
18
18
|
step=step, index=index, clobber=False)
|
|
19
19
|
|
|
20
|
-
chip.set('tool', tool, 'task', task, 'threads',
|
|
20
|
+
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
21
21
|
step=step, index=index)
|
|
22
22
|
|
|
23
23
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import re
|
|
3
|
+
from siliconcompiler import utils
|
|
3
4
|
from siliconcompiler import sc_open, SiliconCompilerError
|
|
4
5
|
from siliconcompiler.tools.opensta import setup as tool_setup
|
|
5
6
|
from siliconcompiler.tools.opensta import runtime_options as tool_runtime_options
|
|
@@ -22,7 +23,7 @@ def setup(chip):
|
|
|
22
23
|
chip.set('tool', tool, 'task', task, 'script', 'sc_timing.tcl',
|
|
23
24
|
step=step, index=index, clobber=False)
|
|
24
25
|
|
|
25
|
-
chip.set('tool', tool, 'task', task, 'threads',
|
|
26
|
+
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
26
27
|
step=step, index=index)
|
|
27
28
|
|
|
28
29
|
design = chip.top()
|