siliconcompiler 0.29.1__py3-none-any.whl → 0.29.3__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 +2 -2
- siliconcompiler/core.py +18 -8
- siliconcompiler/flowgraph.py +23 -5
- siliconcompiler/scheduler/__init__.py +21 -9
- siliconcompiler/tools/__init__.py +2 -0
- siliconcompiler/tools/_common/asic.py +70 -0
- siliconcompiler/tools/_common/tcl/sc_pin_constraints.tcl +2 -2
- siliconcompiler/tools/bambu/convert.py +2 -1
- 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/__init__.py +39 -0
- siliconcompiler/tools/gtkwave/scripts/sc_show.tcl +34 -0
- siliconcompiler/tools/gtkwave/show.py +71 -0
- siliconcompiler/tools/icarus/compile.py +6 -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 +14 -5
- siliconcompiler/tools/openroad/global_placement.py +23 -2
- siliconcompiler/tools/openroad/rdlroute.py +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +64 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +78 -94
- siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +11 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +4 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +7 -1
- siliconcompiler/tools/openroad/scripts/common/procs.tcl +39 -3
- siliconcompiler/tools/openroad/scripts/common/reports.tcl +4 -0
- 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/common/write_images.tcl +10 -1
- 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 +78 -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/compile.py +11 -0
- siliconcompiler/tools/verilator/verilator.py +3 -2
- 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/syn_asic.py +8 -0
- siliconcompiler/tools/yosys/syn_asic.tcl +4 -0
- siliconcompiler/toolscripts/_tools.json +8 -3
- siliconcompiler/toolscripts/rhel8/install-slang.sh +0 -0
- siliconcompiler/toolscripts/rhel8/install-sv2v.sh +7 -1
- siliconcompiler/toolscripts/rhel9/install-gtkwave.sh +40 -0
- siliconcompiler/toolscripts/rhel9/install-slang.sh +0 -0
- siliconcompiler/toolscripts/rhel9/install-sv2v.sh +7 -1
- siliconcompiler/toolscripts/ubuntu20/install-gtkwave.sh +28 -0
- 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/ubuntu22/install-gtkwave.sh +28 -0
- siliconcompiler/toolscripts/ubuntu22/install-slang.sh +0 -0
- siliconcompiler/toolscripts/ubuntu22/install-surelog.sh +7 -1
- siliconcompiler/toolscripts/ubuntu22/install-sv2v.sh +7 -1
- siliconcompiler/toolscripts/ubuntu24/install-bambu.sh +3 -4
- siliconcompiler/toolscripts/ubuntu24/install-gtkwave.sh +29 -0
- 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/utils/__init__.py +22 -0
- siliconcompiler/utils/logging.py +67 -0
- siliconcompiler/utils/showtools.py +3 -0
- {siliconcompiler-0.29.1.dist-info → siliconcompiler-0.29.3.dist-info}/METADATA +8 -8
- {siliconcompiler-0.29.1.dist-info → siliconcompiler-0.29.3.dist-info}/RECORD +76 -65
- {siliconcompiler-0.29.1.dist-info → siliconcompiler-0.29.3.dist-info}/LICENSE +0 -0
- {siliconcompiler-0.29.1.dist-info → siliconcompiler-0.29.3.dist-info}/WHEEL +0 -0
- {siliconcompiler-0.29.1.dist-info → siliconcompiler-0.29.3.dist-info}/entry_points.txt +0 -0
- {siliconcompiler-0.29.1.dist-info → siliconcompiler-0.29.3.dist-info}/top_level.txt +0 -0
|
@@ -5,7 +5,7 @@ from siliconcompiler import utils
|
|
|
5
5
|
from siliconcompiler.tools._common import input_provides, add_common_file, \
|
|
6
6
|
get_tool_task, record_metric
|
|
7
7
|
from siliconcompiler.tools._common.asic import get_mainlib, set_tool_task_var, get_libraries, \
|
|
8
|
-
CellArea
|
|
8
|
+
CellArea, set_tool_task_lib_var
|
|
9
9
|
from siliconcompiler.tools.openroad import setup as tool_setup
|
|
10
10
|
|
|
11
11
|
|
|
@@ -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')
|
|
@@ -792,6 +792,10 @@ def define_psm_params(chip):
|
|
|
792
792
|
'list of nets to skip power grid analysis on',
|
|
793
793
|
field='help')
|
|
794
794
|
|
|
795
|
+
chip.set('tool', tool, 'task', task, 'var', 'psm_allow_missing_terminal_nets',
|
|
796
|
+
'list of nets where a missing terminal is acceptable',
|
|
797
|
+
field='help')
|
|
798
|
+
|
|
795
799
|
|
|
796
800
|
def define_fin_params(chip):
|
|
797
801
|
set_tool_task_var(chip, param_key='fin_add_fill',
|
|
@@ -810,9 +814,6 @@ def define_mpl_params(chip):
|
|
|
810
814
|
schelp='macro channel to use when performing automated '
|
|
811
815
|
'macro placement ([x, y] in microns)')
|
|
812
816
|
|
|
813
|
-
set_tool_task_var(chip, param_key='rtlmp_enable',
|
|
814
|
-
default_value=True,
|
|
815
|
-
schelp='true/false, enables the RTLMP macro placement')
|
|
816
817
|
set_tool_task_var(chip, param_key='rtlmp_min_instances',
|
|
817
818
|
schelp='minimum number of instances to use while clustering for '
|
|
818
819
|
'macro placement')
|
|
@@ -894,6 +895,14 @@ def define_ord_params(chip):
|
|
|
894
895
|
require=['key'],
|
|
895
896
|
schelp='number of Y bins to use for heatmap image generation')
|
|
896
897
|
|
|
898
|
+
set_tool_task_lib_var(chip, param_key='scan_chain_cells',
|
|
899
|
+
default_value=None,
|
|
900
|
+
schelp='cells to use for scan chain insertion')
|
|
901
|
+
|
|
902
|
+
set_tool_task_lib_var(chip, param_key='multibit_ff_cells',
|
|
903
|
+
default_value=None,
|
|
904
|
+
schelp='multibit flipflop cells')
|
|
905
|
+
|
|
897
906
|
|
|
898
907
|
def define_ord_files(chip):
|
|
899
908
|
step = chip.get('arg', 'step')
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
from siliconcompiler.tools._common import get_tool_task
|
|
2
2
|
from siliconcompiler.tools.openroad._apr import setup as apr_setup
|
|
3
|
-
from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs
|
|
3
|
+
from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs, \
|
|
4
|
+
set_tool_task_var
|
|
4
5
|
from siliconcompiler.tools.openroad._apr import \
|
|
5
6
|
define_ord_params, define_sta_params, define_sdc_params, \
|
|
6
|
-
define_gpl_params, define_grt_params, define_rsz_params
|
|
7
|
+
define_gpl_params, define_grt_params, define_rsz_params, \
|
|
8
|
+
define_ppl_params
|
|
7
9
|
from siliconcompiler.tools.openroad._apr import build_pex_corners, define_ord_files
|
|
8
10
|
from siliconcompiler.tools.openroad._apr import extract_metrics
|
|
9
11
|
|
|
@@ -35,6 +37,7 @@ def setup(chip):
|
|
|
35
37
|
define_gpl_params(chip)
|
|
36
38
|
define_grt_params(chip)
|
|
37
39
|
define_rsz_params(chip)
|
|
40
|
+
define_ppl_params(chip)
|
|
38
41
|
|
|
39
42
|
set_reports(chip, [
|
|
40
43
|
'setup',
|
|
@@ -48,6 +51,24 @@ def setup(chip):
|
|
|
48
51
|
'power_density'
|
|
49
52
|
])
|
|
50
53
|
|
|
54
|
+
set_tool_task_var(chip, param_key='enable_multibit_clustering',
|
|
55
|
+
default_value=False,
|
|
56
|
+
schelp='true/false, when true multibit clustering will be performed.')
|
|
57
|
+
|
|
58
|
+
set_tool_task_var(chip, param_key='enable_scan_chains',
|
|
59
|
+
default_value=False,
|
|
60
|
+
schelp='true/false, when true scan chains will be inserted.')
|
|
61
|
+
|
|
62
|
+
set_tool_task_var(chip, param_key='scan_enable_port_pattern',
|
|
63
|
+
schelp='pattern of the scan chain enable port.',
|
|
64
|
+
skip=['pdk', 'lib'])
|
|
65
|
+
set_tool_task_var(chip, param_key='scan_in_port_pattern',
|
|
66
|
+
schelp='pattern of the scan chain in port.',
|
|
67
|
+
skip=['pdk', 'lib'])
|
|
68
|
+
set_tool_task_var(chip, param_key='scan_out_port_pattern',
|
|
69
|
+
schelp='pattern of the scan chain out port.',
|
|
70
|
+
skip=['pdk', 'lib'])
|
|
71
|
+
|
|
51
72
|
|
|
52
73
|
def pre_process(chip):
|
|
53
74
|
define_ord_files(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)
|
|
@@ -17,7 +17,7 @@ source -echo "$sc_refdir/apr/preamble.tcl"
|
|
|
17
17
|
###############################
|
|
18
18
|
|
|
19
19
|
if { [llength [all_clocks]] > 0 } {
|
|
20
|
-
sc_set_dont_use -clock
|
|
20
|
+
sc_set_dont_use -clock -report dont_use.clock_tree_synthesis
|
|
21
21
|
|
|
22
22
|
# Clone clock tree inverters next to register loads
|
|
23
23
|
# so cts does not try to buffer the inverted clocks.
|
|
@@ -11,16 +11,79 @@ source ./sc_manifest.tcl > /dev/null
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
12
|
source -echo "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
|
+
set dont_use_args []
|
|
15
|
+
|
|
16
|
+
if { [lindex [sc_cfg_tool_task_get var enable_scan_chains] 0] == "true" } {
|
|
17
|
+
lappend dont_use_args -scanchain
|
|
18
|
+
}
|
|
19
|
+
if { [lindex [sc_cfg_tool_task_get var enable_multibit_clustering] 0] == "true" } {
|
|
20
|
+
lappend dont_use_args -multibit
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
sc_set_dont_use {*}$dont_use_args -report dont_use.global_placement
|
|
24
|
+
|
|
25
|
+
###############################
|
|
26
|
+
# Scan Chain Preparation
|
|
27
|
+
###############################
|
|
28
|
+
|
|
29
|
+
if { [lindex [sc_cfg_tool_task_get var enable_scan_chains] 0] == "true" } {
|
|
30
|
+
set dft_args []
|
|
31
|
+
if { [sc_cfg_tool_task_get var scan_in_port_pattern] != [] } {
|
|
32
|
+
lappend dft_args -scan_in_name_pattern \
|
|
33
|
+
[lindex [sc_cfg_tool_task_get var scan_in_port_pattern] 0]
|
|
34
|
+
}
|
|
35
|
+
if { [sc_cfg_tool_task_get var scan_out_port_pattern] != [] } {
|
|
36
|
+
lappend dft_args -scan_out_name_pattern \
|
|
37
|
+
[lindex [sc_cfg_tool_task_get var scan_out_port_pattern] 0]
|
|
38
|
+
}
|
|
39
|
+
if { [sc_cfg_tool_task_get var scan_enable_port_pattern] != [] } {
|
|
40
|
+
lappend dft_args -scan_enable_name_pattern \
|
|
41
|
+
[lindex [sc_cfg_tool_task_get var scan_enable_port_pattern] 0]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
set_dft_config -clock_mixing clock_mix {*}$dft_args
|
|
45
|
+
tee -file reports/scan_chain_config.rpt {report_dft_config}
|
|
46
|
+
scan_replace
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
###############################
|
|
50
|
+
# Perform multi-bit clustering
|
|
51
|
+
###############################
|
|
52
|
+
|
|
53
|
+
if { [lindex [sc_cfg_tool_task_get var enable_multibit_clustering] 0] == "true" } {
|
|
54
|
+
cluster_flops
|
|
55
|
+
}
|
|
56
|
+
|
|
14
57
|
###############################
|
|
15
58
|
# Global Placement
|
|
16
59
|
###############################
|
|
17
60
|
|
|
18
61
|
sc_global_placement
|
|
19
62
|
|
|
20
|
-
|
|
63
|
+
###############################
|
|
64
|
+
# Scan Chain Finalize
|
|
65
|
+
###############################
|
|
66
|
+
|
|
67
|
+
if { [lindex [sc_cfg_tool_task_get var enable_scan_chains] 0] == "true" } {
|
|
68
|
+
tee -file reports/scan_chain.rpt {preview_dft -verbose}
|
|
69
|
+
insert_dft
|
|
70
|
+
|
|
71
|
+
set new_ios [sc_get_unplaced_io_nets]
|
|
72
|
+
if { [llength $new_ios] > 0 } {
|
|
73
|
+
foreach net $new_ios {
|
|
74
|
+
utl::report "New IO net [$net getName]"
|
|
75
|
+
}
|
|
76
|
+
utl::warn FLW 1 "Scan chain generated new ports, rerunning pin placement"
|
|
77
|
+
sc_pin_placement
|
|
78
|
+
}
|
|
79
|
+
}
|
|
21
80
|
|
|
22
81
|
###############################
|
|
23
82
|
# Task Postamble
|
|
24
83
|
###############################
|
|
25
84
|
|
|
85
|
+
sc_set_dont_use
|
|
86
|
+
|
|
87
|
+
estimate_parasitics -placement
|
|
88
|
+
|
|
26
89
|
source -echo "$sc_refdir/apr/postamble.tcl"
|
|
@@ -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
|
|
@@ -47,10 +47,20 @@ foreach net [sc_supply_nets] {
|
|
|
47
47
|
|
|
48
48
|
foreach net [sc_psm_check_nets] {
|
|
49
49
|
puts "Check supply net: $net"
|
|
50
|
+
|
|
51
|
+
set check_args []
|
|
52
|
+
if {
|
|
53
|
+
[sc_check_version 18610] &&
|
|
54
|
+
[sc_cfg_tool_task_check_in_list $net var psm_allow_missing_terminal_nets]
|
|
55
|
+
} {
|
|
56
|
+
lappend check_args -dont_require_terminals
|
|
57
|
+
}
|
|
58
|
+
|
|
50
59
|
check_power_grid \
|
|
51
60
|
-floorplanning \
|
|
52
61
|
-error_file "reports/power_grid_${net}.rpt" \
|
|
53
|
-
-net $net
|
|
62
|
+
-net $net \
|
|
63
|
+
{*}$check_args
|
|
54
64
|
}
|
|
55
65
|
|
|
56
66
|
###############################
|
|
@@ -28,6 +28,8 @@ estimate_parasitics -placement
|
|
|
28
28
|
# Repair DRVs
|
|
29
29
|
###############################
|
|
30
30
|
|
|
31
|
+
sc_set_dont_use -scanchain -multibit -report dont_use.repair_drv
|
|
32
|
+
|
|
31
33
|
set repair_design_args []
|
|
32
34
|
|
|
33
35
|
set rsz_cap_margin [lindex [sc_cfg_tool_task_get {var} rsz_cap_margin] 0]
|
|
@@ -43,6 +45,8 @@ repair_design \
|
|
|
43
45
|
-verbose \
|
|
44
46
|
{*}$repair_design_args
|
|
45
47
|
|
|
48
|
+
sc_set_dont_use
|
|
49
|
+
|
|
46
50
|
###############################
|
|
47
51
|
# Tie-off cell insertion
|
|
48
52
|
###############################
|
|
@@ -34,6 +34,9 @@ if { [lindex [sc_cfg_tool_task_get var rsz_skip_setup_repair] 0] != "true" } {
|
|
|
34
34
|
# Setup Repair
|
|
35
35
|
###############################
|
|
36
36
|
|
|
37
|
+
# Enable ffs for resizing
|
|
38
|
+
sc_set_dont_use -scanchain -multibit -report dont_use.repair_timing.setup
|
|
39
|
+
|
|
37
40
|
estimate_parasitics -placement
|
|
38
41
|
|
|
39
42
|
repair_timing \
|
|
@@ -45,6 +48,9 @@ if { [lindex [sc_cfg_tool_task_get var rsz_skip_setup_repair] 0] != "true" } {
|
|
|
45
48
|
{*}$repair_timing_args
|
|
46
49
|
|
|
47
50
|
sc_detailed_placement
|
|
51
|
+
|
|
52
|
+
# Restore dont use
|
|
53
|
+
sc_set_dont_use
|
|
48
54
|
}
|
|
49
55
|
|
|
50
56
|
if { [lindex [sc_cfg_tool_task_get var rsz_skip_hold_repair] 0] != "true" } {
|
|
@@ -55,7 +61,7 @@ if { [lindex [sc_cfg_tool_task_get var rsz_skip_hold_repair] 0] != "true" } {
|
|
|
55
61
|
estimate_parasitics -placement
|
|
56
62
|
|
|
57
63
|
# Enable hold cells
|
|
58
|
-
sc_set_dont_use -hold
|
|
64
|
+
sc_set_dont_use -hold -scanchain -multibit -report dont_use.repair_timing.hold
|
|
59
65
|
|
|
60
66
|
repair_timing \
|
|
61
67
|
-hold \
|
|
@@ -300,6 +300,23 @@ proc sc_bterm_has_placed_io { net } {
|
|
|
300
300
|
return false
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
+
###########################
|
|
304
|
+
# Get nets with unplaced bterms
|
|
305
|
+
###########################
|
|
306
|
+
|
|
307
|
+
proc sc_get_unplaced_io_nets { } {
|
|
308
|
+
set nets []
|
|
309
|
+
foreach bterm [[ord::get_db_block] getBTerms] {
|
|
310
|
+
if {
|
|
311
|
+
[$bterm getFirstPinPlacementStatus] == "UNPLACED" ||
|
|
312
|
+
[$bterm getFirstPinPlacementStatus] == "NONE"
|
|
313
|
+
} {
|
|
314
|
+
lappend nets [$bterm getNet]
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return $nets
|
|
318
|
+
}
|
|
319
|
+
|
|
303
320
|
###########################
|
|
304
321
|
# Find nets regex
|
|
305
322
|
###########################
|
|
@@ -564,7 +581,7 @@ proc sc_setup_sta { } {
|
|
|
564
581
|
|
|
565
582
|
# Check timing setup
|
|
566
583
|
if { [sc_cfg_tool_task_check_in_list check_setup var reports] } {
|
|
567
|
-
check_setup
|
|
584
|
+
tee -file "reports/check_timing_setup.rpt" {check_setup -verbose}
|
|
568
585
|
}
|
|
569
586
|
|
|
570
587
|
if { [llength [all_clocks]] == 0 } {
|
|
@@ -701,13 +718,17 @@ proc sc_set_gui_title { } {
|
|
|
701
718
|
|
|
702
719
|
proc sc_set_dont_use { args } {
|
|
703
720
|
sta::parse_key_args "sc_set_dont_use" args \
|
|
704
|
-
keys {} \
|
|
705
|
-
flags {-hold -clock}
|
|
721
|
+
keys {-report} \
|
|
722
|
+
flags {-hold -clock -multibit -scanchain}
|
|
706
723
|
|
|
707
724
|
sta::check_argc_eq0 "sc_set_dont_use" $args
|
|
708
725
|
|
|
709
726
|
global sc_mainlib
|
|
710
727
|
|
|
728
|
+
if { [sc_check_version 18171] } {
|
|
729
|
+
reset_dont_use
|
|
730
|
+
}
|
|
731
|
+
|
|
711
732
|
set_dont_use [sc_cfg_get library $sc_mainlib asic cells dontuse]
|
|
712
733
|
|
|
713
734
|
set clk_groups "clkbuf clkgate clklogic"
|
|
@@ -724,4 +745,19 @@ proc sc_set_dont_use { args } {
|
|
|
724
745
|
unset_dont_use [sc_cfg_get library $sc_mainlib asic cells $group]
|
|
725
746
|
}
|
|
726
747
|
}
|
|
748
|
+
if { [info exists flags(-clock)] } {
|
|
749
|
+
foreach group $clk_groups {
|
|
750
|
+
unset_dont_use [sc_cfg_get library $sc_mainlib asic cells $group]
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
if { [info exists flags(-multibit)] } {
|
|
754
|
+
unset_dont_use [sc_cfg_tool_task_get var multibit_ff_cells]
|
|
755
|
+
}
|
|
756
|
+
if { [info exists flags(-scanchain)] } {
|
|
757
|
+
unset_dont_use [sc_cfg_tool_task_get var scan_chain_cells]
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
if { [info exists keys(-report)] } {
|
|
761
|
+
tee -file reports/$keys(-report).rpt {report_dont_use}
|
|
762
|
+
}
|
|
727
763
|
}
|
|
@@ -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
|
|
|
@@ -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"
|
|
@@ -93,6 +93,10 @@ proc sc_image_everything { } {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
proc sc_image_irdrop { net corner } {
|
|
96
|
+
if { ![sc_cfg_tool_task_check_in_list power var reports] } {
|
|
97
|
+
return
|
|
98
|
+
}
|
|
99
|
+
|
|
96
100
|
if { ![sc_has_placed_instances] || [sc_has_unplaced_instances] } {
|
|
97
101
|
return
|
|
98
102
|
}
|
|
@@ -107,7 +111,12 @@ proc sc_image_irdrop { net corner } {
|
|
|
107
111
|
foreach msg $msgs {
|
|
108
112
|
suppress_message PSM $msg
|
|
109
113
|
}
|
|
110
|
-
set
|
|
114
|
+
set analyze_args []
|
|
115
|
+
lappend analyze_args -source_type STRAPS
|
|
116
|
+
if { [sc_check_version 18074] } {
|
|
117
|
+
lappend analyze_args -allow_reuse
|
|
118
|
+
}
|
|
119
|
+
set failed [catch { analyze_power_grid -net $net -corner $corner {*}$analyze_args } err]
|
|
111
120
|
foreach msg $msgs {
|
|
112
121
|
unsuppress_message PSM $msg
|
|
113
122
|
}
|
|
@@ -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()
|