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.
Files changed (187) hide show
  1. siliconcompiler/_metadata.py +3 -2
  2. siliconcompiler/apps/sc_install.py +13 -5
  3. siliconcompiler/apps/sc_remote.py +2 -1
  4. siliconcompiler/core.py +68 -55
  5. siliconcompiler/issue.py +3 -1
  6. siliconcompiler/remote/client.py +55 -16
  7. siliconcompiler/report/__init__.py +3 -2
  8. siliconcompiler/report/dashboard/__init__.py +61 -170
  9. siliconcompiler/report/dashboard/cli/__init__.py +788 -0
  10. siliconcompiler/report/dashboard/web/__init__.py +196 -0
  11. siliconcompiler/report/dashboard/{components → web/components}/__init__.py +4 -4
  12. siliconcompiler/report/dashboard/{components → web/components}/graph.py +1 -1
  13. siliconcompiler/report/dashboard/{layouts → web/layouts}/__init__.py +3 -3
  14. siliconcompiler/report/dashboard/{layouts → web/layouts}/_common.py +1 -1
  15. siliconcompiler/report/dashboard/{layouts → web/layouts}/vertical_flowgraph.py +5 -5
  16. siliconcompiler/report/dashboard/{layouts → web/layouts}/vertical_flowgraph_node_tab.py +6 -6
  17. siliconcompiler/report/dashboard/{layouts → web/layouts}/vertical_flowgraph_sac_tabs.py +6 -6
  18. siliconcompiler/report/dashboard/{viewer.py → web/viewer.py} +4 -4
  19. siliconcompiler/scheduler/__init__.py +44 -13
  20. siliconcompiler/scheduler/docker_runner.py +2 -1
  21. siliconcompiler/sphinx_ext/dynamicgen.py +11 -11
  22. siliconcompiler/templates/replay/replay.sh.j2 +2 -2
  23. siliconcompiler/templates/tcl/manifest.tcl.j2 +4 -120
  24. siliconcompiler/tools/_common/__init__.py +2 -0
  25. siliconcompiler/tools/_common/tcl/sc_schema_access.tcl +126 -0
  26. siliconcompiler/tools/openroad/_apr.py +7 -0
  27. siliconcompiler/tools/openroad/fillmetal_insertion.py +14 -14
  28. siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +1 -1
  29. siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +1 -1
  30. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +1 -1
  31. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +1 -1
  32. siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +1 -1
  33. siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +1 -1
  34. siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +2 -2
  35. siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +1 -1
  36. siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +1 -1
  37. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +1 -1
  38. siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +1 -1
  39. siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +1 -1
  40. siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +1 -1
  41. siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +1 -1
  42. siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +1 -1
  43. siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +54 -8
  44. siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +1 -1
  45. siliconcompiler/tools/openroad/scripts/common/procs.tcl +19 -1
  46. siliconcompiler/tools/openroad/scripts/common/reports.tcl +18 -7
  47. siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +1 -1
  48. siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +1 -1
  49. siliconcompiler/tools/openroad/scripts/sc_show.tcl +1 -1
  50. siliconcompiler/tools/opensta/__init__.py +1 -1
  51. siliconcompiler/tools/opensta/scripts/sc_check_library.tcl +1 -1
  52. siliconcompiler/tools/opensta/scripts/sc_procs.tcl +16 -0
  53. siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl +1 -1
  54. siliconcompiler/tools/opensta/scripts/sc_timing.tcl +35 -7
  55. siliconcompiler/tools/opensta/timing.py +6 -2
  56. siliconcompiler/tools/slang/__init__.py +7 -8
  57. siliconcompiler/tools/sv2v/sv2v.py +4 -1
  58. siliconcompiler/tools/yosys/__init__.py +4 -36
  59. siliconcompiler/tools/yosys/lec.py +3 -4
  60. siliconcompiler/tools/yosys/{syn_asic.tcl → sc_synth_asic.tcl} +87 -0
  61. siliconcompiler/tools/yosys/{syn_fpga.tcl → sc_synth_fpga.tcl} +78 -0
  62. siliconcompiler/tools/yosys/syn_asic.py +36 -11
  63. siliconcompiler/tools/yosys/syn_fpga.py +23 -16
  64. siliconcompiler/toolscripts/_tools.json +23 -9
  65. siliconcompiler/toolscripts/rhel8/install-chisel.sh +2 -0
  66. siliconcompiler/toolscripts/rhel8/install-icarus.sh +1 -0
  67. siliconcompiler/toolscripts/rhel8/install-klayout.sh +2 -0
  68. siliconcompiler/toolscripts/rhel8/install-magic.sh +1 -2
  69. siliconcompiler/toolscripts/rhel8/install-netgen.sh +1 -1
  70. siliconcompiler/toolscripts/rhel8/install-slang.sh +2 -0
  71. siliconcompiler/toolscripts/rhel8/install-surelog.sh +3 -1
  72. siliconcompiler/toolscripts/rhel8/install-sv2v.sh +1 -0
  73. siliconcompiler/toolscripts/rhel8/install-verible.sh +2 -0
  74. siliconcompiler/toolscripts/rhel8/install-verilator.sh +1 -0
  75. siliconcompiler/toolscripts/rhel8/install-xyce.sh +2 -0
  76. siliconcompiler/toolscripts/rhel9/install-chisel.sh +2 -0
  77. siliconcompiler/toolscripts/rhel9/install-ghdl.sh +1 -0
  78. siliconcompiler/toolscripts/rhel9/install-gtkwave.sh +2 -1
  79. siliconcompiler/toolscripts/rhel9/install-icarus.sh +1 -0
  80. siliconcompiler/toolscripts/rhel9/install-klayout.sh +2 -0
  81. siliconcompiler/toolscripts/rhel9/install-magic.sh +1 -2
  82. siliconcompiler/toolscripts/rhel9/install-netgen.sh +1 -1
  83. siliconcompiler/toolscripts/rhel9/install-openroad.sh +2 -0
  84. siliconcompiler/toolscripts/rhel9/install-opensta.sh +76 -0
  85. siliconcompiler/toolscripts/rhel9/install-slang.sh +3 -1
  86. siliconcompiler/toolscripts/rhel9/install-surelog.sh +2 -1
  87. siliconcompiler/toolscripts/rhel9/install-sv2v.sh +1 -0
  88. siliconcompiler/toolscripts/rhel9/install-verible.sh +2 -0
  89. siliconcompiler/toolscripts/rhel9/install-verilator.sh +1 -0
  90. siliconcompiler/toolscripts/rhel9/install-vpr.sh +31 -0
  91. siliconcompiler/toolscripts/rhel9/install-xdm.sh +2 -0
  92. siliconcompiler/toolscripts/rhel9/install-xyce.sh +2 -0
  93. siliconcompiler/toolscripts/rhel9/install-yosys-moosic.sh +2 -0
  94. siliconcompiler/toolscripts/rhel9/install-yosys-parmys.sh +61 -0
  95. siliconcompiler/toolscripts/rhel9/install-yosys-slang.sh +3 -1
  96. siliconcompiler/toolscripts/rhel9/install-yosys.sh +2 -0
  97. siliconcompiler/toolscripts/ubuntu20/install-bambu.sh +2 -0
  98. siliconcompiler/toolscripts/ubuntu20/install-bluespec.sh +2 -0
  99. siliconcompiler/toolscripts/ubuntu20/install-chisel.sh +2 -0
  100. siliconcompiler/toolscripts/ubuntu20/install-ghdl.sh +2 -0
  101. siliconcompiler/toolscripts/ubuntu20/install-gtkwave.sh +2 -0
  102. siliconcompiler/toolscripts/ubuntu20/install-icarus.sh +2 -0
  103. siliconcompiler/toolscripts/ubuntu20/install-icepack.sh +2 -0
  104. siliconcompiler/toolscripts/ubuntu20/install-klayout.sh +2 -0
  105. siliconcompiler/toolscripts/ubuntu20/install-magic.sh +2 -0
  106. siliconcompiler/toolscripts/ubuntu20/install-netgen.sh +2 -0
  107. siliconcompiler/toolscripts/ubuntu20/install-nextpnr.sh +1 -3
  108. siliconcompiler/toolscripts/ubuntu20/install-openroad.sh +2 -0
  109. siliconcompiler/toolscripts/ubuntu20/install-opensta.sh +72 -0
  110. siliconcompiler/toolscripts/ubuntu20/install-slang.sh +3 -1
  111. siliconcompiler/toolscripts/ubuntu20/install-slurm.sh +2 -0
  112. siliconcompiler/toolscripts/ubuntu20/install-surelog.sh +3 -1
  113. siliconcompiler/toolscripts/ubuntu20/install-sv2v.sh +1 -1
  114. siliconcompiler/toolscripts/ubuntu20/install-verible.sh +2 -0
  115. siliconcompiler/toolscripts/ubuntu20/install-verilator.sh +2 -0
  116. siliconcompiler/toolscripts/ubuntu20/install-vpr.sh +2 -0
  117. siliconcompiler/toolscripts/ubuntu20/install-xdm.sh +2 -0
  118. siliconcompiler/toolscripts/ubuntu20/install-xyce.sh +2 -0
  119. siliconcompiler/toolscripts/ubuntu20/install-yosys-moosic.sh +2 -0
  120. siliconcompiler/toolscripts/ubuntu20/install-yosys-parmys.sh +61 -0
  121. siliconcompiler/toolscripts/ubuntu20/install-yosys.sh +2 -0
  122. siliconcompiler/toolscripts/ubuntu22/install-bambu.sh +2 -0
  123. siliconcompiler/toolscripts/ubuntu22/install-bluespec.sh +27 -2
  124. siliconcompiler/toolscripts/ubuntu22/install-chisel.sh +2 -0
  125. siliconcompiler/toolscripts/ubuntu22/install-ghdl.sh +4 -2
  126. siliconcompiler/toolscripts/ubuntu22/install-gtkwave.sh +2 -0
  127. siliconcompiler/toolscripts/ubuntu22/install-icarus.sh +2 -0
  128. siliconcompiler/toolscripts/ubuntu22/install-icepack.sh +2 -0
  129. siliconcompiler/toolscripts/ubuntu22/install-klayout.sh +2 -0
  130. siliconcompiler/toolscripts/ubuntu22/install-magic.sh +2 -0
  131. siliconcompiler/toolscripts/ubuntu22/install-netgen.sh +2 -0
  132. siliconcompiler/toolscripts/ubuntu22/install-nextpnr.sh +1 -2
  133. siliconcompiler/toolscripts/ubuntu22/install-openroad.sh +2 -0
  134. siliconcompiler/toolscripts/ubuntu22/install-opensta.sh +72 -0
  135. siliconcompiler/toolscripts/ubuntu22/install-slang.sh +3 -1
  136. siliconcompiler/toolscripts/ubuntu22/install-slurm.sh +2 -0
  137. siliconcompiler/toolscripts/ubuntu22/install-surelog.sh +3 -1
  138. siliconcompiler/toolscripts/ubuntu22/install-sv2v.sh +1 -1
  139. siliconcompiler/toolscripts/ubuntu22/install-verible.sh +2 -0
  140. siliconcompiler/toolscripts/ubuntu22/install-verilator.sh +2 -0
  141. siliconcompiler/toolscripts/ubuntu22/install-vpr.sh +2 -0
  142. siliconcompiler/toolscripts/ubuntu22/install-xdm.sh +2 -0
  143. siliconcompiler/toolscripts/ubuntu22/install-xyce.sh +2 -0
  144. siliconcompiler/toolscripts/ubuntu22/install-yosys-moosic.sh +2 -0
  145. siliconcompiler/toolscripts/ubuntu22/install-yosys-parmys.sh +61 -0
  146. siliconcompiler/toolscripts/ubuntu22/install-yosys-slang.sh +3 -1
  147. siliconcompiler/toolscripts/ubuntu22/install-yosys.sh +2 -0
  148. siliconcompiler/toolscripts/ubuntu24/install-bambu.sh +2 -0
  149. siliconcompiler/toolscripts/ubuntu24/install-bluespec.sh +2 -0
  150. siliconcompiler/toolscripts/ubuntu24/install-chisel.sh +2 -0
  151. siliconcompiler/toolscripts/ubuntu24/install-ghdl.sh +4 -2
  152. siliconcompiler/toolscripts/ubuntu24/install-gtkwave.sh +2 -0
  153. siliconcompiler/toolscripts/ubuntu24/install-icarus.sh +2 -0
  154. siliconcompiler/toolscripts/ubuntu24/install-icepack.sh +2 -0
  155. siliconcompiler/toolscripts/ubuntu24/install-klayout.sh +2 -0
  156. siliconcompiler/toolscripts/ubuntu24/install-magic.sh +2 -0
  157. siliconcompiler/toolscripts/ubuntu24/install-netgen.sh +2 -0
  158. siliconcompiler/toolscripts/ubuntu24/install-nextpnr.sh +1 -3
  159. siliconcompiler/toolscripts/ubuntu24/install-openroad.sh +2 -0
  160. siliconcompiler/toolscripts/ubuntu24/install-opensta.sh +72 -0
  161. siliconcompiler/toolscripts/ubuntu24/install-slang.sh +3 -1
  162. siliconcompiler/toolscripts/ubuntu24/install-slurm.sh +2 -0
  163. siliconcompiler/toolscripts/ubuntu24/install-surelog.sh +3 -1
  164. siliconcompiler/toolscripts/ubuntu24/install-sv2v.sh +1 -1
  165. siliconcompiler/toolscripts/ubuntu24/install-verible.sh +2 -0
  166. siliconcompiler/toolscripts/ubuntu24/install-verilator.sh +2 -0
  167. siliconcompiler/toolscripts/ubuntu24/install-vpr.sh +2 -0
  168. siliconcompiler/toolscripts/ubuntu24/install-xdm.sh +2 -0
  169. siliconcompiler/toolscripts/ubuntu24/install-xyce.sh +2 -0
  170. siliconcompiler/toolscripts/ubuntu24/install-yosys-moosic.sh +2 -0
  171. siliconcompiler/toolscripts/ubuntu24/install-yosys-parmys.sh +61 -0
  172. siliconcompiler/toolscripts/ubuntu24/install-yosys-slang.sh +3 -1
  173. siliconcompiler/toolscripts/ubuntu24/install-yosys.sh +2 -0
  174. siliconcompiler/utils/__init__.py +4 -1
  175. siliconcompiler/utils/logging.py +88 -34
  176. {siliconcompiler-0.32.1.dist-info → siliconcompiler-0.32.3.dist-info}/METADATA +14 -10
  177. {siliconcompiler-0.32.1.dist-info → siliconcompiler-0.32.3.dist-info}/RECORD +185 -175
  178. {siliconcompiler-0.32.1.dist-info → siliconcompiler-0.32.3.dist-info}/WHEEL +1 -1
  179. siliconcompiler/tools/yosys/sc_syn.tcl +0 -87
  180. siliconcompiler/toolscripts/ubuntu20/install-yosys-slang.sh +0 -22
  181. /siliconcompiler/report/dashboard/{components → web/components}/flowgraph.py +0 -0
  182. /siliconcompiler/report/dashboard/{state.py → web/state.py} +0 -0
  183. /siliconcompiler/report/dashboard/{utils → web/utils}/__init__.py +0 -0
  184. /siliconcompiler/report/dashboard/{utils → web/utils}/file_utils.py +0 -0
  185. {siliconcompiler-0.32.1.dist-info → siliconcompiler-0.32.3.dist-info}/entry_points.txt +0 -0
  186. {siliconcompiler-0.32.1.dist-info → siliconcompiler-0.32.3.dist-info/licenses}/LICENSE +0 -0
  187. {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
- # Shortcut to get tool vars
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
- proc sc_cfg_tool_task_exists { args } {
61
- set sc_step [sc_cfg_get arg step]
62
- set sc_index [sc_cfg_get arg index]
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
  }
@@ -103,6 +103,8 @@ def add_require_input(chip, *key, include_library_files=True):
103
103
  ",".join(key),
104
104
  step=step, index=index)
105
105
 
106
+ return bool(keys)
107
+
106
108
 
107
109
  def get_input_files(chip, *key, add_library_files=True):
108
110
  '''
@@ -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
- def pre_process(chip):
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
- if not chip.find_files('pdk', pdk, 'aprtech', tool, stackup, libtype, 'fill'):
72
- chip.set('record', 'status', NodeStatus.SKIPPED, step=step, index=index)
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 > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
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
- $openroad_fin_add_fill == "true" &&
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 > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
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 -placement
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 -placement
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 -placement
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 -placement
156
+ estimate_parasitics $parasitics_stage
111
157
 
112
158
  ###############################
113
159
  # Task Postamble
@@ -2,7 +2,7 @@
2
2
  # Reading SC Schema
3
3
  ###############################
4
4
 
5
- source ./sc_manifest.tcl > /dev/null
5
+ source ./sc_manifest.tcl
6
6
 
7
7
  ###############################
8
8
  # Task Preamble
@@ -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