siliconcompiler 0.32.1__py3-none-any.whl → 0.32.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 +3 -2
- siliconcompiler/apps/sc_install.py +13 -5
- siliconcompiler/apps/sc_remote.py +2 -1
- siliconcompiler/core.py +68 -55
- siliconcompiler/issue.py +3 -1
- siliconcompiler/remote/client.py +55 -16
- siliconcompiler/report/__init__.py +3 -2
- siliconcompiler/report/dashboard/__init__.py +61 -170
- siliconcompiler/report/dashboard/cli/__init__.py +788 -0
- siliconcompiler/report/dashboard/web/__init__.py +196 -0
- siliconcompiler/report/dashboard/{components → web/components}/__init__.py +4 -4
- siliconcompiler/report/dashboard/{components → web/components}/graph.py +1 -1
- siliconcompiler/report/dashboard/{layouts → web/layouts}/__init__.py +3 -3
- siliconcompiler/report/dashboard/{layouts → web/layouts}/_common.py +1 -1
- siliconcompiler/report/dashboard/{layouts → web/layouts}/vertical_flowgraph.py +5 -5
- siliconcompiler/report/dashboard/{layouts → web/layouts}/vertical_flowgraph_node_tab.py +6 -6
- siliconcompiler/report/dashboard/{layouts → web/layouts}/vertical_flowgraph_sac_tabs.py +6 -6
- siliconcompiler/report/dashboard/{viewer.py → web/viewer.py} +4 -4
- siliconcompiler/scheduler/__init__.py +44 -13
- siliconcompiler/scheduler/docker_runner.py +2 -1
- siliconcompiler/sphinx_ext/dynamicgen.py +11 -11
- siliconcompiler/templates/replay/replay.sh.j2 +2 -2
- siliconcompiler/templates/tcl/manifest.tcl.j2 +4 -120
- siliconcompiler/tools/_common/__init__.py +2 -0
- siliconcompiler/tools/_common/tcl/sc_schema_access.tcl +126 -0
- siliconcompiler/tools/openroad/_apr.py +7 -0
- siliconcompiler/tools/openroad/fillmetal_insertion.py +14 -14
- siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +54 -8
- siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/common/procs.tcl +19 -1
- siliconcompiler/tools/openroad/scripts/common/reports.tcl +18 -7
- siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/sc_show.tcl +1 -1
- siliconcompiler/tools/opensta/__init__.py +1 -1
- siliconcompiler/tools/opensta/scripts/sc_check_library.tcl +1 -1
- siliconcompiler/tools/opensta/scripts/sc_procs.tcl +16 -0
- siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl +1 -1
- siliconcompiler/tools/opensta/scripts/sc_timing.tcl +35 -7
- siliconcompiler/tools/opensta/timing.py +6 -2
- siliconcompiler/tools/slang/__init__.py +7 -8
- siliconcompiler/tools/sv2v/sv2v.py +4 -1
- siliconcompiler/tools/yosys/__init__.py +4 -36
- siliconcompiler/tools/yosys/lec.py +3 -4
- siliconcompiler/tools/yosys/{syn_asic.tcl → sc_synth_asic.tcl} +87 -0
- siliconcompiler/tools/yosys/{syn_fpga.tcl → sc_synth_fpga.tcl} +78 -0
- siliconcompiler/tools/yosys/syn_asic.py +36 -11
- siliconcompiler/tools/yosys/syn_fpga.py +23 -16
- siliconcompiler/toolscripts/_tools.json +23 -9
- siliconcompiler/toolscripts/rhel8/install-chisel.sh +2 -0
- siliconcompiler/toolscripts/rhel8/install-icarus.sh +1 -0
- siliconcompiler/toolscripts/rhel8/install-klayout.sh +2 -0
- siliconcompiler/toolscripts/rhel8/install-magic.sh +1 -2
- siliconcompiler/toolscripts/rhel8/install-netgen.sh +1 -1
- siliconcompiler/toolscripts/rhel8/install-slang.sh +2 -0
- siliconcompiler/toolscripts/rhel8/install-surelog.sh +3 -1
- siliconcompiler/toolscripts/rhel8/install-sv2v.sh +1 -0
- siliconcompiler/toolscripts/rhel8/install-verible.sh +2 -0
- siliconcompiler/toolscripts/rhel8/install-verilator.sh +1 -0
- siliconcompiler/toolscripts/rhel8/install-xyce.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-chisel.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-ghdl.sh +1 -0
- siliconcompiler/toolscripts/rhel9/install-gtkwave.sh +2 -1
- siliconcompiler/toolscripts/rhel9/install-icarus.sh +1 -0
- siliconcompiler/toolscripts/rhel9/install-klayout.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-magic.sh +1 -2
- siliconcompiler/toolscripts/rhel9/install-netgen.sh +1 -1
- siliconcompiler/toolscripts/rhel9/install-openroad.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-opensta.sh +76 -0
- siliconcompiler/toolscripts/rhel9/install-slang.sh +3 -1
- siliconcompiler/toolscripts/rhel9/install-surelog.sh +2 -1
- siliconcompiler/toolscripts/rhel9/install-sv2v.sh +1 -0
- siliconcompiler/toolscripts/rhel9/install-verible.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-verilator.sh +1 -0
- siliconcompiler/toolscripts/rhel9/install-vpr.sh +31 -0
- siliconcompiler/toolscripts/rhel9/install-xdm.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-xyce.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-yosys-moosic.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-yosys-parmys.sh +61 -0
- siliconcompiler/toolscripts/rhel9/install-yosys-slang.sh +3 -1
- siliconcompiler/toolscripts/rhel9/install-yosys.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-bambu.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-bluespec.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-chisel.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-ghdl.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-gtkwave.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-icarus.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-icepack.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-klayout.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-magic.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-netgen.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-nextpnr.sh +1 -3
- siliconcompiler/toolscripts/ubuntu20/install-openroad.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-opensta.sh +72 -0
- siliconcompiler/toolscripts/ubuntu20/install-slang.sh +3 -1
- siliconcompiler/toolscripts/ubuntu20/install-slurm.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-surelog.sh +3 -1
- siliconcompiler/toolscripts/ubuntu20/install-sv2v.sh +1 -1
- siliconcompiler/toolscripts/ubuntu20/install-verible.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-verilator.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-vpr.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-xdm.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-xyce.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-yosys-moosic.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-yosys-parmys.sh +61 -0
- siliconcompiler/toolscripts/ubuntu20/install-yosys.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-bambu.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-bluespec.sh +27 -2
- siliconcompiler/toolscripts/ubuntu22/install-chisel.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-ghdl.sh +4 -2
- siliconcompiler/toolscripts/ubuntu22/install-gtkwave.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-icarus.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-icepack.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-klayout.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-magic.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-netgen.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-nextpnr.sh +1 -2
- siliconcompiler/toolscripts/ubuntu22/install-openroad.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-opensta.sh +72 -0
- siliconcompiler/toolscripts/ubuntu22/install-slang.sh +3 -1
- siliconcompiler/toolscripts/ubuntu22/install-slurm.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-surelog.sh +3 -1
- siliconcompiler/toolscripts/ubuntu22/install-sv2v.sh +1 -1
- siliconcompiler/toolscripts/ubuntu22/install-verible.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-verilator.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-vpr.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-xdm.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-xyce.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-yosys-moosic.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-yosys-parmys.sh +61 -0
- siliconcompiler/toolscripts/ubuntu22/install-yosys-slang.sh +3 -1
- siliconcompiler/toolscripts/ubuntu22/install-yosys.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-bambu.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-bluespec.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-chisel.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-ghdl.sh +4 -2
- siliconcompiler/toolscripts/ubuntu24/install-gtkwave.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-icarus.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-icepack.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-klayout.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-magic.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-netgen.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-nextpnr.sh +1 -3
- siliconcompiler/toolscripts/ubuntu24/install-openroad.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-opensta.sh +72 -0
- siliconcompiler/toolscripts/ubuntu24/install-slang.sh +3 -1
- siliconcompiler/toolscripts/ubuntu24/install-slurm.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-surelog.sh +3 -1
- siliconcompiler/toolscripts/ubuntu24/install-sv2v.sh +1 -1
- siliconcompiler/toolscripts/ubuntu24/install-verible.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-verilator.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-vpr.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-xdm.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-xyce.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-yosys-moosic.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-yosys-parmys.sh +61 -0
- siliconcompiler/toolscripts/ubuntu24/install-yosys-slang.sh +3 -1
- siliconcompiler/toolscripts/ubuntu24/install-yosys.sh +2 -0
- siliconcompiler/utils/__init__.py +4 -1
- siliconcompiler/utils/logging.py +88 -34
- {siliconcompiler-0.32.1.dist-info → siliconcompiler-0.32.3.dist-info}/METADATA +14 -10
- {siliconcompiler-0.32.1.dist-info → siliconcompiler-0.32.3.dist-info}/RECORD +185 -175
- {siliconcompiler-0.32.1.dist-info → siliconcompiler-0.32.3.dist-info}/WHEEL +1 -1
- siliconcompiler/tools/yosys/sc_syn.tcl +0 -87
- siliconcompiler/toolscripts/ubuntu20/install-yosys-slang.sh +0 -22
- /siliconcompiler/report/dashboard/{components → web/components}/flowgraph.py +0 -0
- /siliconcompiler/report/dashboard/{state.py → web/state.py} +0 -0
- /siliconcompiler/report/dashboard/{utils → web/utils}/__init__.py +0 -0
- /siliconcompiler/report/dashboard/{utils → web/utils}/file_utils.py +0 -0
- {siliconcompiler-0.32.1.dist-info → siliconcompiler-0.32.3.dist-info}/entry_points.txt +0 -0
- {siliconcompiler-0.32.1.dist-info → siliconcompiler-0.32.3.dist-info/licenses}/LICENSE +0 -0
- {siliconcompiler-0.32.1.dist-info → siliconcompiler-0.32.3.dist-info}/top_level.txt +0 -0
|
@@ -11,129 +11,13 @@
|
|
|
11
11
|
# Helper functions
|
|
12
12
|
#############################################
|
|
13
13
|
|
|
14
|
-
# Shortcut to get values from configuration
|
|
15
|
-
proc sc_cfg_get { args } {
|
|
16
|
-
# Refer to global sc_cfg dictionary
|
|
17
|
-
global sc_cfg
|
|
18
|
-
|
|
19
|
-
{% if record_access %}puts "{{ record_access_id }} [join $args ,]"{% endif %}
|
|
20
|
-
|
|
21
|
-
if { ![sc_cfg_exists {*}$args] } {
|
|
22
|
-
throw {FLOW KEYERROR} "key \"$args\" is not in the siliconcompiler configuration"
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return [dict get $sc_cfg {*}$args]
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
proc sc_cfg_exists { args } {
|
|
29
|
-
# Refer to global sc_cfg dictionary
|
|
30
|
-
global sc_cfg
|
|
31
|
-
|
|
32
|
-
return [dict exists $sc_cfg {*}$args]
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
proc sc_top {} {
|
|
36
|
-
set sc_entrypoint [sc_cfg_get option entrypoint]
|
|
37
|
-
if {$sc_entrypoint == {{ '{}' }}} {
|
|
38
|
-
return [sc_cfg_get design]
|
|
39
|
-
}
|
|
40
|
-
return $sc_entrypoint
|
|
41
|
-
}
|
|
42
|
-
|
|
43
14
|
proc sc_root {} {
|
|
44
15
|
return "{{ scroot }}"
|
|
45
16
|
}
|
|
46
17
|
|
|
47
|
-
|
|
48
|
-
proc sc_cfg_tool_task_get { args } {
|
|
49
|
-
set sc_step [sc_cfg_get arg step]
|
|
50
|
-
set sc_index [sc_cfg_get arg index]
|
|
51
|
-
|
|
52
|
-
set sc_flow [sc_cfg_get option flow]
|
|
53
|
-
|
|
54
|
-
set sc_task [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index task]
|
|
55
|
-
set sc_tool [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index tool]
|
|
56
|
-
|
|
57
|
-
return [sc_cfg_get tool $sc_tool task $sc_task {*}$args]
|
|
58
|
-
}
|
|
18
|
+
{% include 'tools/_common/tcl/sc_schema_access.tcl' %}
|
|
59
19
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
set sc_flow [sc_cfg_get option flow]
|
|
65
|
-
|
|
66
|
-
set sc_task [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index task]
|
|
67
|
-
set sc_tool [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index tool]
|
|
68
|
-
|
|
69
|
-
return [sc_cfg_exists tool $sc_tool task $sc_task {*}$args]
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
# Check if an item is present in a list
|
|
73
|
-
proc sc_cfg_tool_task_check_in_list { item args } {
|
|
74
|
-
set result [sc_cfg_tool_task_get {*}$args]
|
|
75
|
-
|
|
76
|
-
if { [lsearch -exact $result $item] != -1 } {
|
|
77
|
-
return 1
|
|
78
|
-
} else {
|
|
79
|
-
return 0
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
proc sc_section_banner { text { method puts } } {
|
|
84
|
-
$method "============================================================"
|
|
85
|
-
$method "| $text"
|
|
86
|
-
$method "============================================================"
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
# Get list of soft libraries
|
|
90
|
-
proc sc_get_libraries { {library {}} {libraries {}} } {
|
|
91
|
-
set key []
|
|
92
|
-
if { [llength $library] != 0 } {
|
|
93
|
-
lappend key library $library
|
|
94
|
-
}
|
|
95
|
-
lappend key option library
|
|
96
|
-
|
|
97
|
-
set libs []
|
|
98
|
-
foreach lib [sc_cfg_get {*}$key] {
|
|
99
|
-
if { [lsearch -exact $libs $lib] != -1 || [lsearch -exact $libraries $lib] != -1 } {
|
|
100
|
-
continue
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
lappend libs $lib
|
|
104
|
-
|
|
105
|
-
foreach sublib [sc_get_libraries $lib $libs] {
|
|
106
|
-
lappend libs $sublib
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return [lsort -unique $libs]
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
# Get list of asic libraries
|
|
114
|
-
proc sc_get_asic_libraries { type } {
|
|
115
|
-
set libs []
|
|
116
|
-
|
|
117
|
-
foreach lib [sc_cfg_get asic ${type}lib] {
|
|
118
|
-
if { [lsearch -exact $libs $lib] != -1 } {
|
|
119
|
-
continue
|
|
120
|
-
}
|
|
121
|
-
lappend libs $lib
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
foreach lib [sc_get_libraries] {
|
|
125
|
-
if { ![sc_cfg_exists library $lib asic ${type}lib] } {
|
|
126
|
-
continue
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
foreach sublib [sc_cfg_get library $lib asic ${type}lib] {
|
|
130
|
-
if { [lsearch -exact $libs $sublib] != -1 } {
|
|
131
|
-
continue
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
lappend libs $sublib
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return $libs
|
|
20
|
+
# Redefine
|
|
21
|
+
proc _sc_cfg_get_debug { args } {
|
|
22
|
+
{% if record_access %}puts "{{ record_access_id }} [join $args ,]"{% endif %}
|
|
139
23
|
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
proc _sc_cfg_get_debug { args } {
|
|
2
|
+
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
# Shortcut to get values from configuration
|
|
6
|
+
proc sc_cfg_get { args } {
|
|
7
|
+
_sc_cfg_get_debug $args
|
|
8
|
+
|
|
9
|
+
# Refer to global sc_cfg dictionary
|
|
10
|
+
global sc_cfg
|
|
11
|
+
|
|
12
|
+
if { ![sc_cfg_exists {*}$args] } {
|
|
13
|
+
throw {FLOW KEYERROR} "key \"$args\" is not in the siliconcompiler configuration"
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return [dict get $sc_cfg {*}$args]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
proc sc_cfg_exists { args } {
|
|
20
|
+
# Refer to global sc_cfg dictionary
|
|
21
|
+
global sc_cfg
|
|
22
|
+
|
|
23
|
+
return [dict exists $sc_cfg {*}$args]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
proc sc_top { } {
|
|
27
|
+
set sc_entrypoint [sc_cfg_get option entrypoint]
|
|
28
|
+
if { $sc_entrypoint == {{ '{}' }} } {
|
|
29
|
+
return [sc_cfg_get design]
|
|
30
|
+
}
|
|
31
|
+
return $sc_entrypoint
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
# Shortcut to get tool vars
|
|
35
|
+
proc sc_cfg_tool_task_get { args } {
|
|
36
|
+
set sc_step [sc_cfg_get arg step]
|
|
37
|
+
set sc_index [sc_cfg_get arg index]
|
|
38
|
+
|
|
39
|
+
set sc_flow [sc_cfg_get option flow]
|
|
40
|
+
|
|
41
|
+
set sc_task [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index task]
|
|
42
|
+
set sc_tool [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index tool]
|
|
43
|
+
|
|
44
|
+
return [sc_cfg_get tool $sc_tool task $sc_task {*}$args]
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
proc sc_cfg_tool_task_exists { args } {
|
|
48
|
+
set sc_step [sc_cfg_get arg step]
|
|
49
|
+
set sc_index [sc_cfg_get arg index]
|
|
50
|
+
|
|
51
|
+
set sc_flow [sc_cfg_get option flow]
|
|
52
|
+
|
|
53
|
+
set sc_task [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index task]
|
|
54
|
+
set sc_tool [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index tool]
|
|
55
|
+
|
|
56
|
+
return [sc_cfg_exists tool $sc_tool task $sc_task {*}$args]
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
# Check if an item is present in a list
|
|
60
|
+
proc sc_cfg_tool_task_check_in_list { item args } {
|
|
61
|
+
set result [sc_cfg_tool_task_get {*}$args]
|
|
62
|
+
|
|
63
|
+
if { [lsearch -exact $result $item] != -1 } {
|
|
64
|
+
return 1
|
|
65
|
+
} else {
|
|
66
|
+
return 0
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
proc sc_section_banner { text { method puts } } {
|
|
71
|
+
$method "============================================================"
|
|
72
|
+
$method "| $text"
|
|
73
|
+
$method "============================================================"
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
# Get list of soft libraries
|
|
77
|
+
proc sc_get_libraries { { library {} } { libraries {} } } {
|
|
78
|
+
set key []
|
|
79
|
+
if { [llength $library] != 0 } {
|
|
80
|
+
lappend key library $library
|
|
81
|
+
}
|
|
82
|
+
lappend key option library
|
|
83
|
+
|
|
84
|
+
set libs []
|
|
85
|
+
foreach lib [sc_cfg_get {*}$key] {
|
|
86
|
+
if { [lsearch -exact $libs $lib] != -1 || [lsearch -exact $libraries $lib] != -1 } {
|
|
87
|
+
continue
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
lappend libs $lib
|
|
91
|
+
|
|
92
|
+
foreach sublib [sc_get_libraries $lib $libs] {
|
|
93
|
+
lappend libs $sublib
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return [lsort -unique $libs]
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
# Get list of asic libraries
|
|
101
|
+
proc sc_get_asic_libraries { type } {
|
|
102
|
+
set libs []
|
|
103
|
+
|
|
104
|
+
foreach lib [sc_cfg_get asic ${type}lib] {
|
|
105
|
+
if { [lsearch -exact $libs $lib] != -1 } {
|
|
106
|
+
continue
|
|
107
|
+
}
|
|
108
|
+
lappend libs $lib
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
foreach lib [sc_get_libraries] {
|
|
112
|
+
if { ![sc_cfg_exists library $lib asic ${type}lib] } {
|
|
113
|
+
continue
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
foreach sublib [sc_cfg_get library $lib asic ${type}lib] {
|
|
117
|
+
if { [lsearch -exact $libs $sublib] != -1 } {
|
|
118
|
+
continue
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
lappend libs $sublib
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return $libs
|
|
126
|
+
}
|
|
@@ -500,6 +500,10 @@ def define_ppl_params(chip):
|
|
|
500
500
|
['pdk', pdkname, 'var', 'openroad', 'pin_layer_vertical', stackup]):
|
|
501
501
|
chip.add('tool', tool, 'task', task, 'require', ",".join(key),
|
|
502
502
|
step=step, index=index)
|
|
503
|
+
if chip.get('tool', tool, 'task', task, 'file', 'ppl_constraints', step=step, index=index):
|
|
504
|
+
chip.add('tool', tool, 'task', task, 'require',
|
|
505
|
+
",".join(['tool', tool, 'task', task, 'file', 'ppl_constraints']),
|
|
506
|
+
step=step, index=index)
|
|
503
507
|
|
|
504
508
|
|
|
505
509
|
def define_pdn_params(chip):
|
|
@@ -555,6 +559,9 @@ def define_pad_params(chip):
|
|
|
555
559
|
|
|
556
560
|
|
|
557
561
|
def define_rsz_params(chip):
|
|
562
|
+
set_tool_task_var(chip, param_key='rsz_skip_drv_repair',
|
|
563
|
+
default_value=False,
|
|
564
|
+
schelp='skip design rule violation repair')
|
|
558
565
|
set_tool_task_var(chip, param_key='rsz_skip_setup_repair',
|
|
559
566
|
default_value=False,
|
|
560
567
|
schelp='skip setup timing repair')
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from siliconcompiler import NodeStatus
|
|
2
|
-
|
|
3
1
|
from siliconcompiler.tools._common import get_tool_task, has_pre_post_script
|
|
4
2
|
from siliconcompiler.tools._common.asic import get_mainlib
|
|
5
3
|
|
|
@@ -55,24 +53,26 @@ def setup(chip):
|
|
|
55
53
|
'clock_trees'
|
|
56
54
|
])
|
|
57
55
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
step = chip.get('arg', 'step')
|
|
61
|
-
index = chip.get('arg', 'index')
|
|
62
|
-
tool, task = get_tool_task(chip, step, index)
|
|
63
|
-
if not has_pre_post_script(chip) and \
|
|
64
|
-
chip.get('tool', tool, 'task', task, 'var', 'fin_add_fill',
|
|
65
|
-
step=step, index=index) == ["true"]:
|
|
56
|
+
if chip.get('tool', tool, 'task', task, 'var', 'fin_add_fill',
|
|
57
|
+
step=step, index=index) == ["true"]:
|
|
66
58
|
pdk = chip.get('option', 'pdk')
|
|
67
59
|
stackup = chip.get('option', 'stackup')
|
|
68
60
|
mainlib = get_mainlib(chip)
|
|
69
61
|
libtype = chip.get('library', mainlib, 'asic', 'libarch', step=step, index=index)
|
|
62
|
+
if chip.get('pdk', pdk, 'aprtech', tool, stackup, libtype, 'fill'):
|
|
63
|
+
chip.add('tool', tool, 'task', task, 'require',
|
|
64
|
+
",".join(['pdk', pdk, 'aprtech', tool, stackup, libtype, 'fill']),
|
|
65
|
+
step=step, index=index)
|
|
66
|
+
else:
|
|
67
|
+
if not has_pre_post_script(chip):
|
|
68
|
+
# nothing to do so we can skip
|
|
69
|
+
return "no fill script is available"
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
chip.logger.warning(f'{step}{index} will be skipped since there is nothing to do.')
|
|
74
|
-
return
|
|
71
|
+
chip.set('tool', tool, 'task', task, 'var', 'fin_add_fill', False,
|
|
72
|
+
step=step, index=index)
|
|
75
73
|
|
|
74
|
+
|
|
75
|
+
def pre_process(chip):
|
|
76
76
|
define_ord_files(chip)
|
|
77
77
|
build_pex_corners(chip)
|
|
78
78
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Reading SC Schema
|
|
3
3
|
###############################
|
|
4
4
|
|
|
5
|
-
source ./sc_manifest.tcl
|
|
5
|
+
source ./sc_manifest.tcl
|
|
6
6
|
|
|
7
7
|
###############################
|
|
8
8
|
# Task Preamble
|
|
@@ -18,7 +18,7 @@ source -echo "$sc_refdir/apr/preamble.tcl"
|
|
|
18
18
|
set sc_libtype [sc_cfg_get library $sc_mainlib asic libarch]
|
|
19
19
|
|
|
20
20
|
if {
|
|
21
|
-
|
|
21
|
+
[lindex [sc_cfg_tool_task_get var fin_add_fill] 0] == "true" &&
|
|
22
22
|
[sc_cfg_exists pdk $sc_pdk aprtech openroad $sc_stackup $sc_libtype fill]
|
|
23
23
|
} {
|
|
24
24
|
set sc_fillrules \
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Reading SC Schema
|
|
3
3
|
###############################
|
|
4
4
|
|
|
5
|
-
source ./sc_manifest.tcl
|
|
5
|
+
source ./sc_manifest.tcl
|
|
6
6
|
|
|
7
7
|
###############################
|
|
8
8
|
# Task Preamble
|
|
@@ -15,6 +15,11 @@ source -echo "$sc_refdir/apr/preamble.tcl"
|
|
|
15
15
|
# Timing Repair
|
|
16
16
|
###############################
|
|
17
17
|
|
|
18
|
+
set parasitics_stage -placement
|
|
19
|
+
if { [sc_check_version 20073] && [grt::have_routes] } {
|
|
20
|
+
set parasitics_stage -global_routing
|
|
21
|
+
}
|
|
22
|
+
|
|
18
23
|
set rsz_setup_slack_margin [lindex [sc_cfg_tool_task_get {var} rsz_setup_slack_margin] 0]
|
|
19
24
|
set rsz_hold_slack_margin [lindex [sc_cfg_tool_task_get {var} rsz_hold_slack_margin] 0]
|
|
20
25
|
set rsz_slew_margin [lindex [sc_cfg_tool_task_get {var} rsz_slew_margin] 0]
|
|
@@ -30,6 +35,42 @@ if { [lindex [sc_cfg_tool_task_get {var} rsz_skip_gate_cloning] 0] == "true" } {
|
|
|
30
35
|
lappend repair_timing_args "-skip_gate_cloning"
|
|
31
36
|
}
|
|
32
37
|
|
|
38
|
+
set repair_design_args []
|
|
39
|
+
set rsz_cap_margin [lindex [sc_cfg_tool_task_get {var} rsz_cap_margin] 0]
|
|
40
|
+
if { $rsz_cap_margin != "false" } {
|
|
41
|
+
lappend repair_design_args "-cap_margin" $rsz_cap_margin
|
|
42
|
+
}
|
|
43
|
+
set rsz_slew_margin [lindex [sc_cfg_tool_task_get {var} rsz_slew_margin] 0]
|
|
44
|
+
if { $rsz_slew_margin != "false" } {
|
|
45
|
+
lappend repair_design_args "-slew_margin" $rsz_slew_margin
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
set total_insts [llength [[ord::get_db_block] getInsts]]
|
|
49
|
+
# Remove filler cells before attempting to repair timing
|
|
50
|
+
remove_fillers
|
|
51
|
+
set removed_fillers [expr { $total_insts - [llength [[ord::get_db_block] getInsts]] }]
|
|
52
|
+
|
|
53
|
+
if { [lindex [sc_cfg_tool_task_get var rsz_skip_drv_repair] 0] != "true" } {
|
|
54
|
+
###############################
|
|
55
|
+
# DRV Repair
|
|
56
|
+
###############################
|
|
57
|
+
|
|
58
|
+
# Enable ffs for resizing
|
|
59
|
+
sc_set_dont_use -scanchain -multibit -report dont_use.repair_timing.drv
|
|
60
|
+
|
|
61
|
+
estimate_parasitics $parasitics_stage
|
|
62
|
+
|
|
63
|
+
sc_report_args -command repair_design -args $repair_design_args
|
|
64
|
+
repair_design \
|
|
65
|
+
-verbose \
|
|
66
|
+
{*}$repair_design_args
|
|
67
|
+
|
|
68
|
+
sc_detailed_placement -congestion_report reports/congestion.drv.rpt
|
|
69
|
+
|
|
70
|
+
# Restore dont use
|
|
71
|
+
sc_set_dont_use
|
|
72
|
+
}
|
|
73
|
+
|
|
33
74
|
if { [lindex [sc_cfg_tool_task_get var rsz_skip_setup_repair] 0] != "true" } {
|
|
34
75
|
###############################
|
|
35
76
|
# Setup Repair
|
|
@@ -38,7 +79,7 @@ if { [lindex [sc_cfg_tool_task_get var rsz_skip_setup_repair] 0] != "true" } {
|
|
|
38
79
|
# Enable ffs for resizing
|
|
39
80
|
sc_set_dont_use -scanchain -multibit -report dont_use.repair_timing.setup
|
|
40
81
|
|
|
41
|
-
estimate_parasitics
|
|
82
|
+
estimate_parasitics $parasitics_stage
|
|
42
83
|
|
|
43
84
|
sc_report_args -command repair_timing -args $repair_timing_args
|
|
44
85
|
repair_timing \
|
|
@@ -49,7 +90,7 @@ if { [lindex [sc_cfg_tool_task_get var rsz_skip_setup_repair] 0] != "true" } {
|
|
|
49
90
|
-repair_tns $rsz_repair_tns \
|
|
50
91
|
{*}$repair_timing_args
|
|
51
92
|
|
|
52
|
-
sc_detailed_placement
|
|
93
|
+
sc_detailed_placement -congestion_report reports/congestion.setup_repair.rpt
|
|
53
94
|
|
|
54
95
|
# Restore dont use
|
|
55
96
|
sc_set_dont_use
|
|
@@ -60,7 +101,7 @@ if { [lindex [sc_cfg_tool_task_get var rsz_skip_hold_repair] 0] != "true" } {
|
|
|
60
101
|
# Hold Repair
|
|
61
102
|
###############################
|
|
62
103
|
|
|
63
|
-
estimate_parasitics
|
|
104
|
+
estimate_parasitics $parasitics_stage
|
|
64
105
|
|
|
65
106
|
# Enable hold cells
|
|
66
107
|
sc_set_dont_use -hold -scanchain -multibit -report dont_use.repair_timing.hold
|
|
@@ -74,7 +115,7 @@ if { [lindex [sc_cfg_tool_task_get var rsz_skip_hold_repair] 0] != "true" } {
|
|
|
74
115
|
-repair_tns $rsz_repair_tns \
|
|
75
116
|
{*}$repair_timing_args
|
|
76
117
|
|
|
77
|
-
sc_detailed_placement
|
|
118
|
+
sc_detailed_placement -congestion_report reports/congestion.hold_repair.rpt
|
|
78
119
|
|
|
79
120
|
# Restore dont use
|
|
80
121
|
sc_set_dont_use
|
|
@@ -85,7 +126,7 @@ if { [lindex [sc_cfg_tool_task_get var rsz_skip_recover_power] 0] != "true" } {
|
|
|
85
126
|
# Recover power
|
|
86
127
|
###############################
|
|
87
128
|
|
|
88
|
-
estimate_parasitics
|
|
129
|
+
estimate_parasitics $parasitics_stage
|
|
89
130
|
|
|
90
131
|
# Enable cells
|
|
91
132
|
sc_set_dont_use -hold -scanchain -multibit -report dont_use.repair_timing.power
|
|
@@ -98,16 +139,21 @@ if { [lindex [sc_cfg_tool_task_get var rsz_skip_recover_power] 0] != "true" } {
|
|
|
98
139
|
-hold_margin $rsz_hold_slack_margin \
|
|
99
140
|
{*}$repair_timing_args
|
|
100
141
|
|
|
101
|
-
sc_detailed_placement
|
|
142
|
+
sc_detailed_placement -congestion_report reports/congestion.power_recovery.rpt
|
|
102
143
|
|
|
103
144
|
# Restore dont use
|
|
104
145
|
sc_set_dont_use
|
|
105
146
|
}
|
|
106
147
|
|
|
148
|
+
if { $removed_fillers > 0 } {
|
|
149
|
+
# Add filler cells back
|
|
150
|
+
sc_insert_fillers
|
|
151
|
+
}
|
|
152
|
+
|
|
107
153
|
global_connect
|
|
108
154
|
|
|
109
155
|
# estimate for metrics
|
|
110
|
-
estimate_parasitics
|
|
156
|
+
estimate_parasitics $parasitics_stage
|
|
111
157
|
|
|
112
158
|
###############################
|
|
113
159
|
# Task Postamble
|
|
@@ -97,7 +97,12 @@ proc sc_global_placement { args } {
|
|
|
97
97
|
# Detailed Placement
|
|
98
98
|
###########################
|
|
99
99
|
|
|
100
|
-
proc sc_detailed_placement { } {
|
|
100
|
+
proc sc_detailed_placement { args } {
|
|
101
|
+
sta::parse_key_args "sc_detailed_placement" args \
|
|
102
|
+
keys {-congestion_report} \
|
|
103
|
+
flags {}
|
|
104
|
+
sta::check_argc_eq0 "sc_detailed_placement" $args
|
|
105
|
+
|
|
101
106
|
set dpl_padding [lindex [sc_cfg_tool_task_get var pad_detail_place] 0]
|
|
102
107
|
set dpl_disallow_one_site [lindex [sc_cfg_tool_task_get var dpl_disallow_one_site] 0]
|
|
103
108
|
set dpl_max_displacement [lindex [sc_cfg_tool_task_get var dpl_max_displacement] 0]
|
|
@@ -111,10 +116,23 @@ proc sc_detailed_placement { } {
|
|
|
111
116
|
lappend dpl_args "-disallow_one_site_gaps"
|
|
112
117
|
}
|
|
113
118
|
|
|
119
|
+
set incremental_route [expr { [sc_check_version 20073] && [grt::have_routes] }]
|
|
120
|
+
|
|
121
|
+
if { $incremental_route } {
|
|
122
|
+
global_route -start_incremental
|
|
123
|
+
}
|
|
124
|
+
|
|
114
125
|
sc_report_args -command detailed_placement -args $dpl_args
|
|
126
|
+
|
|
115
127
|
detailed_placement \
|
|
116
128
|
-max_displacement $dpl_max_displacement \
|
|
117
129
|
{*}$dpl_args
|
|
130
|
+
|
|
131
|
+
if { $incremental_route } {
|
|
132
|
+
global_route -end_incremental \
|
|
133
|
+
-congestion_report_file $keys(-congestion_report)
|
|
134
|
+
}
|
|
135
|
+
|
|
118
136
|
check_placement -verbose
|
|
119
137
|
}
|
|
120
138
|
|