siliconcompiler 0.28.9__py3-none-any.whl → 0.29.1__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 (164) hide show
  1. siliconcompiler/_metadata.py +1 -1
  2. siliconcompiler/apps/__init__.py +26 -0
  3. siliconcompiler/apps/sc_remote.py +15 -14
  4. siliconcompiler/apps/sc_show.py +5 -5
  5. siliconcompiler/apps/utils/replay.py +194 -0
  6. siliconcompiler/checklists/__init__.py +12 -0
  7. siliconcompiler/core.py +89 -22
  8. siliconcompiler/flows/__init__.py +34 -0
  9. siliconcompiler/flows/_common.py +11 -13
  10. siliconcompiler/flows/asicflow.py +83 -42
  11. siliconcompiler/flows/showflow.py +1 -1
  12. siliconcompiler/libs/__init__.py +5 -0
  13. siliconcompiler/optimizer/__init__.py +199 -0
  14. siliconcompiler/optimizer/vizier.py +259 -0
  15. siliconcompiler/pdks/__init__.py +5 -0
  16. siliconcompiler/remote/__init__.py +11 -0
  17. siliconcompiler/remote/client.py +753 -815
  18. siliconcompiler/report/report.py +2 -0
  19. siliconcompiler/report/summary_table.py +1 -1
  20. siliconcompiler/scheduler/__init__.py +118 -58
  21. siliconcompiler/scheduler/send_messages.py +1 -1
  22. siliconcompiler/schema/schema_cfg.py +16 -4
  23. siliconcompiler/schema/schema_obj.py +29 -10
  24. siliconcompiler/schema/utils.py +2 -0
  25. siliconcompiler/sphinx_ext/__init__.py +85 -0
  26. siliconcompiler/sphinx_ext/dynamicgen.py +19 -34
  27. siliconcompiler/sphinx_ext/schemagen.py +3 -2
  28. siliconcompiler/targets/__init__.py +26 -0
  29. siliconcompiler/targets/gf180_demo.py +3 -3
  30. siliconcompiler/templates/replay/replay.py.j2 +62 -0
  31. siliconcompiler/templates/replay/requirements.txt +7 -0
  32. siliconcompiler/templates/replay/setup.sh +130 -0
  33. siliconcompiler/tools/__init__.py +60 -0
  34. siliconcompiler/tools/_common/__init__.py +15 -1
  35. siliconcompiler/tools/_common/asic.py +17 -9
  36. siliconcompiler/tools/builtin/concatenate.py +1 -1
  37. siliconcompiler/tools/ghdl/ghdl.py +1 -2
  38. siliconcompiler/tools/klayout/convert_drc_db.py +1 -1
  39. siliconcompiler/tools/klayout/drc.py +1 -1
  40. siliconcompiler/tools/klayout/export.py +8 -1
  41. siliconcompiler/tools/klayout/klayout.py +2 -2
  42. siliconcompiler/tools/klayout/klayout_convert_drc_db.py +2 -2
  43. siliconcompiler/tools/klayout/klayout_export.py +7 -5
  44. siliconcompiler/tools/klayout/klayout_operations.py +4 -3
  45. siliconcompiler/tools/klayout/klayout_show.py +3 -2
  46. siliconcompiler/tools/klayout/klayout_utils.py +1 -1
  47. siliconcompiler/tools/klayout/operations.py +8 -0
  48. siliconcompiler/tools/klayout/screenshot.py +6 -1
  49. siliconcompiler/tools/klayout/show.py +8 -1
  50. siliconcompiler/tools/magic/magic.py +1 -1
  51. siliconcompiler/tools/openroad/__init__.py +103 -0
  52. siliconcompiler/tools/openroad/{openroad.py → _apr.py} +415 -423
  53. siliconcompiler/tools/openroad/antenna_repair.py +78 -0
  54. siliconcompiler/tools/openroad/clock_tree_synthesis.py +64 -0
  55. siliconcompiler/tools/openroad/detailed_placement.py +59 -0
  56. siliconcompiler/tools/openroad/detailed_route.py +62 -0
  57. siliconcompiler/tools/openroad/endcap_tapcell_insertion.py +52 -0
  58. siliconcompiler/tools/openroad/fillercell_insertion.py +58 -0
  59. siliconcompiler/tools/openroad/{dfm.py → fillmetal_insertion.py} +35 -19
  60. siliconcompiler/tools/openroad/global_placement.py +58 -0
  61. siliconcompiler/tools/openroad/global_route.py +63 -0
  62. siliconcompiler/tools/openroad/init_floorplan.py +103 -0
  63. siliconcompiler/tools/openroad/macro_placement.py +65 -0
  64. siliconcompiler/tools/openroad/metrics.py +23 -8
  65. siliconcompiler/tools/openroad/pin_placement.py +56 -0
  66. siliconcompiler/tools/openroad/power_grid.py +65 -0
  67. siliconcompiler/tools/openroad/rcx_bench.py +7 -4
  68. siliconcompiler/tools/openroad/rcx_extract.py +2 -1
  69. siliconcompiler/tools/openroad/rdlroute.py +4 -4
  70. siliconcompiler/tools/openroad/repair_design.py +59 -0
  71. siliconcompiler/tools/openroad/repair_timing.py +63 -0
  72. siliconcompiler/tools/openroad/screenshot.py +9 -20
  73. siliconcompiler/tools/openroad/scripts/apr/postamble.tcl +44 -0
  74. siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +95 -0
  75. siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +51 -0
  76. siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +66 -0
  77. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +41 -0
  78. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +71 -0
  79. siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +55 -0
  80. siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +27 -0
  81. siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +36 -0
  82. siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +26 -0
  83. siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +61 -0
  84. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +333 -0
  85. siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +123 -0
  86. siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +22 -0
  87. siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +41 -0
  88. siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +60 -0
  89. siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +68 -0
  90. siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +83 -0
  91. siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +125 -0
  92. siliconcompiler/tools/openroad/scripts/common/debugging.tcl +28 -0
  93. siliconcompiler/tools/openroad/scripts/common/procs.tcl +727 -0
  94. siliconcompiler/tools/openroad/scripts/common/read_input_files.tcl +59 -0
  95. siliconcompiler/tools/openroad/scripts/common/read_liberty.tcl +20 -0
  96. siliconcompiler/tools/openroad/scripts/common/read_timing_constraints.tcl +16 -0
  97. siliconcompiler/tools/openroad/scripts/common/reports.tcl +180 -0
  98. siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +18 -0
  99. siliconcompiler/tools/openroad/scripts/common/write_images.tcl +395 -0
  100. siliconcompiler/tools/openroad/scripts/{sc_rcx_bench.tcl → rcx/sc_rcx_bench.tcl} +5 -5
  101. siliconcompiler/tools/openroad/scripts/{sc_rcx_extract.tcl → rcx/sc_rcx_extract.tcl} +0 -0
  102. siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +5 -16
  103. siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +51 -51
  104. siliconcompiler/tools/openroad/scripts/sc_show.tcl +110 -0
  105. siliconcompiler/tools/openroad/show.py +28 -23
  106. siliconcompiler/tools/openroad/{export.py → write_data.py} +31 -26
  107. siliconcompiler/tools/opensta/__init__.py +2 -2
  108. siliconcompiler/tools/opensta/check_library.py +27 -0
  109. siliconcompiler/tools/opensta/scripts/sc_check_library.tcl +255 -0
  110. siliconcompiler/tools/opensta/scripts/sc_timing.tcl +1 -1
  111. siliconcompiler/tools/sv2v/sv2v.py +1 -2
  112. siliconcompiler/tools/verilator/verilator.py +6 -7
  113. siliconcompiler/tools/vivado/vivado.py +1 -1
  114. siliconcompiler/tools/yosys/__init__.py +149 -0
  115. siliconcompiler/tools/yosys/lec.py +22 -9
  116. siliconcompiler/tools/yosys/sc_lec.tcl +94 -49
  117. siliconcompiler/tools/yosys/sc_syn.tcl +1 -0
  118. siliconcompiler/tools/yosys/screenshot.py +2 -2
  119. siliconcompiler/tools/yosys/syn_asic.py +105 -74
  120. siliconcompiler/tools/yosys/syn_asic.tcl +58 -12
  121. siliconcompiler/tools/yosys/syn_fpga.py +2 -3
  122. siliconcompiler/tools/yosys/syn_fpga.tcl +26 -19
  123. siliconcompiler/toolscripts/_tools.json +5 -5
  124. siliconcompiler/utils/__init__.py +7 -3
  125. {siliconcompiler-0.28.9.dist-info → siliconcompiler-0.29.1.dist-info}/METADATA +22 -17
  126. {siliconcompiler-0.28.9.dist-info → siliconcompiler-0.29.1.dist-info}/RECORD +131 -114
  127. {siliconcompiler-0.28.9.dist-info → siliconcompiler-0.29.1.dist-info}/WHEEL +1 -1
  128. {siliconcompiler-0.28.9.dist-info → siliconcompiler-0.29.1.dist-info}/entry_points.txt +13 -0
  129. siliconcompiler/libs/asap7sc7p5t.py +0 -8
  130. siliconcompiler/libs/gf180mcu.py +0 -8
  131. siliconcompiler/libs/interposer.py +0 -8
  132. siliconcompiler/libs/nangate45.py +0 -8
  133. siliconcompiler/libs/sg13g2_stdcell.py +0 -8
  134. siliconcompiler/libs/sky130hd.py +0 -8
  135. siliconcompiler/libs/sky130io.py +0 -8
  136. siliconcompiler/pdks/asap7.py +0 -8
  137. siliconcompiler/pdks/freepdk45.py +0 -8
  138. siliconcompiler/pdks/gf180.py +0 -8
  139. siliconcompiler/pdks/ihp130.py +0 -8
  140. siliconcompiler/pdks/interposer.py +0 -8
  141. siliconcompiler/pdks/skywater130.py +0 -8
  142. siliconcompiler/tools/openroad/cts.py +0 -45
  143. siliconcompiler/tools/openroad/floorplan.py +0 -75
  144. siliconcompiler/tools/openroad/physyn.py +0 -27
  145. siliconcompiler/tools/openroad/place.py +0 -41
  146. siliconcompiler/tools/openroad/route.py +0 -45
  147. siliconcompiler/tools/openroad/scripts/__init__.py +0 -0
  148. siliconcompiler/tools/openroad/scripts/sc_apr.tcl +0 -514
  149. siliconcompiler/tools/openroad/scripts/sc_cts.tcl +0 -68
  150. siliconcompiler/tools/openroad/scripts/sc_dfm.tcl +0 -22
  151. siliconcompiler/tools/openroad/scripts/sc_export.tcl +0 -100
  152. siliconcompiler/tools/openroad/scripts/sc_floorplan.tcl +0 -456
  153. siliconcompiler/tools/openroad/scripts/sc_metrics.tcl +0 -1
  154. siliconcompiler/tools/openroad/scripts/sc_physyn.tcl +0 -6
  155. siliconcompiler/tools/openroad/scripts/sc_place.tcl +0 -84
  156. siliconcompiler/tools/openroad/scripts/sc_procs.tcl +0 -494
  157. siliconcompiler/tools/openroad/scripts/sc_report.tcl +0 -189
  158. siliconcompiler/tools/openroad/scripts/sc_route.tcl +0 -143
  159. siliconcompiler/tools/openroad/scripts/sc_screenshot.tcl +0 -18
  160. siliconcompiler/tools/openroad/scripts/sc_write_images.tcl +0 -393
  161. siliconcompiler/tools/yosys/yosys.py +0 -148
  162. /siliconcompiler/tools/openroad/scripts/{sc_write.tcl → common/write_data.tcl} +0 -0
  163. {siliconcompiler-0.28.9.dist-info → siliconcompiler-0.29.1.dist-info}/LICENSE +0 -0
  164. {siliconcompiler-0.28.9.dist-info → siliconcompiler-0.29.1.dist-info}/top_level.txt +0 -0
@@ -1,18 +1,18 @@
1
1
  #https://github.com/The-OpenROAD-Project/OpenROAD/blob/9b52b1d9cfb532f9872739ffe482afb5ac9def92/src/rcx/calibration/script/generate_rules.tcl
2
2
 
3
3
  set openroad_bench_length \
4
- [lindex [sc_cfg_tool_task_get {var} bench_length] 0]
4
+ [lindex [sc_cfg_tool_task_get {var} bench_length] 0]
5
5
 
6
6
  set sc_maxmetal \
7
- [sc_get_layer_name [lindex [sc_cfg_tool_task_get {var} max_layer] 0]]
7
+ [sc_get_layer_name [lindex [sc_cfg_tool_task_get {var} max_layer] 0]]
8
8
  set openroad_top_metal_number [[[ord::get_db_tech] findLayer $sc_maxmetal] getRoutingLevel]
9
9
 
10
10
  # Creates the patterns and
11
11
  # store it in the database
12
12
  bench_wires \
13
- -len $openroad_bench_length \
14
- -met_cnt $openroad_top_metal_number \
15
- -all
13
+ -len $openroad_bench_length \
14
+ -met_cnt $openroad_top_metal_number \
15
+ -all
16
16
 
17
17
  # Writes the verilog netlist
18
18
  # of the patterns
@@ -8,16 +8,9 @@ source ./sc_manifest.tcl > /dev/null
8
8
  # Schema Helper functions
9
9
  ###############################
10
10
 
11
- proc sc_get_layer_name { name } {
12
- if { [string is integer $name] } {
13
- set layer [[ord::get_db_tech] findRoutingLayer $name]
14
- if { $layer == "NULL" } {
15
- utl::error FLW 1 "$name is not a valid routing layer."
16
- }
17
- return [$layer getName]
18
- }
19
- return $name
20
- }
11
+ set sc_refdir [sc_cfg_tool_task_get refdir]
12
+
13
+ source "${sc_refdir}/common/procs.tcl"
21
14
 
22
15
  ##############################
23
16
  # Schema Adapter
@@ -29,8 +22,6 @@ set sc_index [sc_cfg_get arg index]
29
22
  set sc_flow [sc_cfg_get option flow]
30
23
  set sc_task [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index task]
31
24
 
32
- set sc_refdir [sc_cfg_tool_task_get refdir]
33
-
34
25
  # Design
35
26
  set sc_design [sc_top]
36
27
  set sc_pdk [sc_cfg_get option pdk]
@@ -42,8 +33,6 @@ set sc_libtype [lindex [sc_cfg_tool_task_get {var} libtype] 0]
42
33
  # PDK Design Rules
43
34
  set sc_techlef [sc_cfg_get pdk $sc_pdk aprtech openroad $sc_stackup $sc_libtype lef]
44
35
 
45
- set sc_threads [sc_cfg_tool_task_get threads]
46
-
47
36
  ###############################
48
37
  # Read Files
49
38
  ###############################
@@ -56,8 +45,8 @@ read_lef $sc_techlef
56
45
  # Run task
57
46
  ###############################
58
47
 
59
- set_thread_count $sc_threads
48
+ set_thread_count [sc_cfg_tool_task_get threads]
60
49
 
61
50
  utl::set_metrics_stage "sc__step__{}"
62
- source -echo "${sc_refdir}/sc_${sc_task}.tcl"
51
+ source -echo "${sc_refdir}/rcx/sc_${sc_task}.tcl"
63
52
  utl::pop_metrics_stage
@@ -40,22 +40,22 @@ set sc_macrolibs [sc_get_asic_libraries macro]
40
40
  ###############################
41
41
 
42
42
  foreach msg [sc_cfg_tool_task_get warningoff] {
43
- set or_msg [split $msg "-"]
44
- if { [llength $or_msg] != 2 } {
45
- utl::warn FLW 1 "$msg is not a valid message id"
46
- } else {
47
- set or_tool [lindex $or_msg 0]
48
- set or_msg_id [expr { int([lindex $or_msg 1]) }]
49
- utl::info FLW 1 "Suppressing $msg messages"
50
- suppress_message $or_tool $or_msg_id
51
- }
43
+ set or_msg [split $msg "-"]
44
+ if { [llength $or_msg] != 2 } {
45
+ utl::warn FLW 1 "$msg is not a valid message id"
46
+ } else {
47
+ set or_tool [lindex $or_msg 0]
48
+ set or_msg_id [expr { int([lindex $or_msg 1]) }]
49
+ utl::info FLW 1 "Suppressing $msg messages"
50
+ suppress_message $or_tool $or_msg_id
51
+ }
52
52
  }
53
53
 
54
54
  ###############################
55
55
  # Source helper functions
56
56
  ###############################
57
57
 
58
- source "$sc_refdir/sc_procs.tcl"
58
+ source "$sc_refdir/common/procs.tcl"
59
59
 
60
60
  ###############################
61
61
  # Common Setup
@@ -69,21 +69,21 @@ read_lef $sc_techlef
69
69
 
70
70
  # Read Lefs
71
71
  foreach lib "$sc_macrolibs" {
72
- foreach lef_file [sc_cfg_get library $lib output $sc_stackup lef] {
73
- puts "Reading lef: ${lef_file}"
74
- read_lef $lef_file
75
- }
72
+ foreach lef_file [sc_cfg_get library $lib output $sc_stackup lef] {
73
+ puts "Reading lef: ${lef_file}"
74
+ read_lef $lef_file
75
+ }
76
76
  }
77
77
 
78
78
  # Read Verilog
79
79
  if { [file exists "inputs/${sc_design}.vg"] } {
80
- puts "Reading netlist verilog: inputs/${sc_design}.vg"
81
- read_verilog "inputs/${sc_design}.vg"
80
+ puts "Reading netlist verilog: inputs/${sc_design}.vg"
81
+ read_verilog "inputs/${sc_design}.vg"
82
82
  } else {
83
- foreach netlist [sc_cfg_get input netlist verilog] {
84
- puts "Reading netlist verilog: ${netlist}"
85
- read_verilog $netlist
86
- }
83
+ foreach netlist [sc_cfg_get input netlist verilog] {
84
+ puts "Reading netlist verilog: ${netlist}"
85
+ read_verilog $netlist
86
+ }
87
87
  }
88
88
  link_design $sc_design
89
89
 
@@ -93,10 +93,10 @@ link_design $sc_design
93
93
 
94
94
  utl::push_metrics_stage "sc__prestep__{}"
95
95
  if { [sc_cfg_tool_task_exists prescript] } {
96
- foreach sc_pre_script [sc_cfg_tool_task_get prescript] {
97
- puts "Sourcing pre script: ${sc_pre_script}"
98
- source -echo $sc_pre_script
99
- }
96
+ foreach sc_pre_script [sc_cfg_tool_task_get prescript] {
97
+ puts "Sourcing pre script: ${sc_pre_script}"
98
+ source -echo $sc_pre_script
99
+ }
100
100
  }
101
101
  utl::pop_metrics_stage
102
102
 
@@ -107,23 +107,23 @@ utl::push_metrics_stage "sc__step__{}"
107
107
  ###########################
108
108
 
109
109
  if { [sc_cfg_exists input asic floorplan] } {
110
- set def [lindex [sc_cfg_get input asic floorplan] 0]
111
- puts "Reading floorplan DEF: ${def}"
112
- read_def -floorplan_initialize $def
110
+ set def [lindex [sc_cfg_get input asic floorplan] 0]
111
+ puts "Reading floorplan DEF: ${def}"
112
+ read_def -floorplan_initialize $def
113
113
  } else {
114
- #NOTE: assuming a two tuple value as lower left, upper right
115
- set sc_diearea [sc_cfg_get constraint outline]
114
+ #NOTE: assuming a two tuple value as lower left, upper right
115
+ set sc_diearea [sc_cfg_get constraint outline]
116
116
 
117
- # Use die and core sizes
118
- set sc_diesize "[lindex $sc_diearea 0] [lindex $sc_diearea 1]"
117
+ # Use die and core sizes
118
+ set sc_diesize "[lindex $sc_diearea 0] [lindex $sc_diearea 1]"
119
119
 
120
- set outline [odb::Rect]
121
- $outline set_xlo [ord::microns_to_dbu [lindex $sc_diesize 0]]
122
- $outline set_ylo [ord::microns_to_dbu [lindex $sc_diesize 1]]
123
- $outline set_xhi [ord::microns_to_dbu [lindex $sc_diesize 2]]
124
- $outline set_yhi [ord::microns_to_dbu [lindex $sc_diesize 3]]
120
+ set outline [odb::Rect]
121
+ $outline set_xlo [ord::microns_to_dbu [lindex $sc_diesize 0]]
122
+ $outline set_ylo [ord::microns_to_dbu [lindex $sc_diesize 1]]
123
+ $outline set_xhi [ord::microns_to_dbu [lindex $sc_diesize 2]]
124
+ $outline set_yhi [ord::microns_to_dbu [lindex $sc_diesize 3]]
125
125
 
126
- [ord::get_db_block] setDieArea $outline
126
+ [ord::get_db_block] setDieArea $outline
127
127
  }
128
128
 
129
129
  puts "Floorplan information:"
@@ -140,8 +140,8 @@ make_tracks
140
140
  # RDL Routing
141
141
  ###########################
142
142
  foreach rdl_file [sc_cfg_tool_task_get {file} rdlroute] {
143
- puts "Sourcing rdlroute: ${rdl_file}"
144
- source $rdl_file
143
+ puts "Sourcing rdlroute: ${rdl_file}"
144
+ source $rdl_file
145
145
  }
146
146
 
147
147
  ######################
@@ -150,28 +150,28 @@ foreach rdl_file [sc_cfg_tool_task_get {file} rdlroute] {
150
150
 
151
151
  set removed_obs 0
152
152
  foreach obstruction [[ord::get_db_block] getObstructions] {
153
- odb::dbObstruction_destroy $obstruction
154
- incr removed_obs
153
+ odb::dbObstruction_destroy $obstruction
154
+ incr removed_obs
155
155
  }
156
156
  utl::info FLW 1 "Deleted $removed_obs routing obstructions"
157
157
 
158
158
  if {
159
- [lindex [sc_cfg_tool_task_get var fin_add_fill] 0] == "true" &&
160
- [sc_cfg_exists pdk $sc_pdk aprtech openroad $sc_stackup $sc_libtype fill]
159
+ [lindex [sc_cfg_tool_task_get var fin_add_fill] 0] == "true" &&
160
+ [sc_cfg_exists pdk $sc_pdk aprtech openroad $sc_stackup $sc_libtype fill]
161
161
  } {
162
- set sc_fillrules \
163
- [lindex [sc_cfg_get pdk $sc_pdk aprtech openroad $sc_stackup $sc_libtype fill] 0]
164
- density_fill -rules $sc_fillrules
162
+ set sc_fillrules \
163
+ [lindex [sc_cfg_get pdk $sc_pdk aprtech openroad $sc_stackup $sc_libtype fill] 0]
164
+ density_fill -rules $sc_fillrules
165
165
  }
166
166
 
167
167
  utl::pop_metrics_stage
168
168
 
169
169
  utl::push_metrics_stage "sc__poststep__{}"
170
170
  if { [sc_cfg_tool_task_exists postscript] } {
171
- foreach sc_post_script [sc_cfg_tool_task_get postscript] {
172
- puts "Sourcing post script: ${sc_post_script}"
173
- source -echo $sc_post_script
174
- }
171
+ foreach sc_post_script [sc_cfg_tool_task_get postscript] {
172
+ puts "Sourcing post script: ${sc_post_script}"
173
+ source -echo $sc_post_script
174
+ }
175
175
  }
176
176
  utl::pop_metrics_stage
177
177
 
@@ -180,5 +180,5 @@ utl::pop_metrics_stage
180
180
  ###############################
181
181
 
182
182
  utl::push_metrics_stage "sc__write__{}"
183
- source "$sc_refdir/sc_write.tcl"
183
+ source "$sc_refdir/common/write_data.tcl"
184
184
  utl::pop_metrics_stage
@@ -0,0 +1,110 @@
1
+ ###############################
2
+ # Reading SC Schema
3
+ ###############################
4
+
5
+ source ./sc_manifest.tcl > /dev/null
6
+
7
+ ##############################
8
+ # Schema Adapter
9
+ ###############################
10
+
11
+ set sc_step [sc_cfg_get arg step]
12
+ set sc_index [sc_cfg_get arg index]
13
+ set sc_flow [sc_cfg_get option flow]
14
+ set sc_tool [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index tool]
15
+ set sc_task [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index task]
16
+
17
+ set sc_refdir [sc_cfg_tool_task_get refdir]
18
+
19
+ ##############################
20
+ # Setup debugging
21
+ ###############################
22
+
23
+ source -echo "$sc_refdir/common/debugging.tcl"
24
+
25
+ ###############################
26
+ # Setup helper functions
27
+ ###############################
28
+
29
+ source "$sc_refdir/common/procs.tcl"
30
+
31
+ ###############################
32
+ # Setup GUI title early
33
+ ###############################
34
+ sc_set_gui_title
35
+
36
+ ###############################
37
+ # Design information
38
+ ###############################
39
+
40
+ # Design
41
+ set sc_design [sc_top]
42
+ set sc_optmode [sc_cfg_get option optmode]
43
+ set sc_pdk [sc_cfg_get option pdk]
44
+ set sc_stackup [sc_cfg_get option stackup]
45
+
46
+ # APR Parameters
47
+ set sc_targetlibs [sc_get_asic_libraries logic]
48
+ set sc_mainlib [lindex $sc_targetlibs 0]
49
+ set sc_delaymodel [sc_cfg_get asic delaymodel]
50
+
51
+ # Hard macro libraries
52
+ set sc_macrolibs [sc_get_asic_libraries macro]
53
+
54
+ # Threads
55
+ set_thread_count [sc_cfg_tool_task_get threads]
56
+
57
+ ###############################
58
+ # Read Files
59
+ ###############################
60
+
61
+ source -echo "$sc_refdir/common/read_liberty.tcl"
62
+
63
+ source -echo "$sc_refdir/common/read_input_files.tcl"
64
+
65
+ source -echo "$sc_refdir/common/read_timing_constraints.tcl"
66
+
67
+ ###############################
68
+ # Common Setup
69
+ ###############################
70
+
71
+ sc_setup_sta
72
+
73
+ sc_setup_parasitics
74
+
75
+ set_dont_use [sc_cfg_get library $sc_mainlib asic cells dontuse]
76
+
77
+ ###############################
78
+ # Source Step Script
79
+ ###############################
80
+
81
+ report_units_metric
82
+
83
+ utl::push_metrics_stage "sc__prestep__{}"
84
+ if { [sc_cfg_tool_task_exists prescript] } {
85
+ foreach sc_pre_script [sc_cfg_tool_task_get prescript] {
86
+ puts "Sourcing pre script: ${sc_pre_script}"
87
+ source -echo $sc_pre_script
88
+ }
89
+ }
90
+ utl::pop_metrics_stage
91
+
92
+ utl::push_metrics_stage "sc__step__{}"
93
+
94
+ set openroad_dont_touch {}
95
+ if { [sc_cfg_tool_task_exists {var} dont_touch] } {
96
+ set openroad_dont_touch [sc_cfg_tool_task_get {var} dont_touch]
97
+ }
98
+
99
+ if { [llength $openroad_dont_touch] > 0 } {
100
+ # set don't touch list
101
+ set_dont_touch $openroad_dont_touch
102
+ }
103
+
104
+ if { $sc_task == "screenshot" } {
105
+ source -echo "$sc_refdir/common/screenshot.tcl"
106
+ }
107
+
108
+ if { [lindex [sc_cfg_tool_task_get {var} show_exit] 0] == "true" } {
109
+ exit
110
+ }
@@ -1,18 +1,20 @@
1
1
  import shutil
2
2
  import os
3
3
 
4
- from siliconcompiler.tools.openroad import openroad
5
- from siliconcompiler.tools.openroad.openroad import setup as setup_tool
6
- from siliconcompiler.tools.openroad.openroad import build_pex_corners
7
- from siliconcompiler.tools.openroad.openroad import pre_process as or_pre_process
4
+ from siliconcompiler.tools.openroad import make_docs as or_make_docs
5
+ from siliconcompiler.tools.openroad._apr import setup as tool_setup
6
+ from siliconcompiler.tools.openroad._apr import set_reports
7
+ from siliconcompiler.tools.openroad._apr import build_pex_corners, define_ord_files
8
8
  from siliconcompiler.tools._common import find_incoming_ext, input_provides, get_tool_task
9
+ from siliconcompiler.tools.openroad._apr import \
10
+ define_ord_params, define_sta_params, define_sdc_params
9
11
 
10
12
 
11
13
  ####################################################################
12
14
  # Make Docs
13
15
  ####################################################################
14
16
  def make_docs(chip):
15
- openroad.make_docs(chip)
17
+ or_make_docs(chip)
16
18
  chip.set('tool', 'openroad', 'task', 'show', 'var', 'show_filepath', '<path>')
17
19
 
18
20
 
@@ -20,22 +22,26 @@ def setup(chip):
20
22
  '''
21
23
  Show a design in openroad
22
24
  '''
25
+ generic_show_setup(chip, False)
23
26
 
24
- # Generic tool setup.
25
- setup_tool(chip)
26
-
27
- generic_show_setup(chip, 'show', False)
28
27
 
28
+ def generic_show_setup(chip, exit):
29
+ # Generic tool setup.
30
+ tool_setup(chip, exit=exit)
29
31
 
30
- def generic_show_setup(chip, task, exit):
31
- tool = 'openroad'
32
- design = chip.top()
33
32
  step = chip.get('arg', 'step')
34
33
  index = chip.get('arg', 'index')
34
+ tool, task = get_tool_task(chip, step, index)
35
+ design = chip.top()
36
+
37
+ chip.set('tool', tool, 'task', task, 'script', 'sc_show.tcl',
38
+ step=step, index=index)
35
39
 
36
- option = "-no_init -gui"
40
+ # Add GUI option
41
+ chip.add('tool', tool, 'task', task, 'option', '-gui',
42
+ step=step, index=index)
37
43
 
38
- chip.set('tool', tool, 'task', task, 'var', 'show_exit', "true" if exit else "false",
44
+ chip.set('tool', tool, 'task', task, 'var', 'show_exit', exit,
39
45
  step=step, index=index, clobber=False)
40
46
  if chip.valid('tool', tool, 'task', task, 'var', 'show_filepath'):
41
47
  chip.add('tool', tool, 'task', task, 'require',
@@ -51,25 +57,24 @@ def generic_show_setup(chip, task, exit):
51
57
  chip.add('tool', tool, 'task', task, 'input', f'{design}.sdc',
52
58
  step=step, index=index)
53
59
 
54
- # Add to option string.
55
- cur_options = ' '.join(chip.get('tool', tool, 'task', task, 'option', step=step, index=index))
56
- new_options = f'{cur_options} {option}'
57
- chip.set('tool', tool, 'task', task, 'option', new_options,
58
- step=step, index=index, clobber=True)
60
+ # set default values for task
61
+ define_ord_params(chip)
62
+ define_sta_params(chip)
63
+ define_sdc_params(chip)
64
+
65
+ set_reports(chip, [])
59
66
 
60
67
 
61
68
  def pre_process(chip):
62
- or_pre_process(chip)
63
69
  copy_show_files(chip)
70
+ define_ord_files(chip)
64
71
  build_pex_corners(chip)
65
72
 
66
73
 
67
74
  def copy_show_files(chip):
68
-
69
- tool = 'openroad'
70
75
  step = chip.get('arg', 'step')
71
76
  index = chip.get('arg', 'index')
72
- _, task = get_tool_task(chip, step, index)
77
+ tool, task = get_tool_task(chip, step, index)
73
78
 
74
79
  if chip.valid('tool', tool, 'task', task, 'var', 'show_filepath'):
75
80
  show_file = chip.get('tool', tool, 'task', task, 'var', 'show_filepath',
@@ -1,41 +1,46 @@
1
-
2
- from siliconcompiler.tools.openroad.openroad import setup as setup_tool
3
- from siliconcompiler.tools.openroad.openroad import build_pex_corners
4
- from siliconcompiler.tools.openroad.openroad import post_process as or_post_process
5
- from siliconcompiler.tools.openroad.openroad import pre_process as or_pre_process
6
- from siliconcompiler.tools._common.asic import set_tool_task_var, get_libraries
7
- from siliconcompiler.tools.openroad.openroad import _set_reports, set_pnr_inputs, set_pnr_outputs
8
1
  from siliconcompiler.tools._common import get_tool_task
2
+ from siliconcompiler.tools._common.asic import get_libraries, set_tool_task_var
3
+ from siliconcompiler.tools.openroad._apr import setup as apr_setup
4
+ from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs
5
+ from siliconcompiler.tools.openroad._apr import \
6
+ define_ord_params, define_sta_params, define_sdc_params, \
7
+ define_pex_params, define_psm_params
8
+ from siliconcompiler.tools.openroad._apr import build_pex_corners, define_ord_files
9
+ from siliconcompiler.tools.openroad._apr import extract_metrics
9
10
 
10
11
 
11
12
  def setup(chip):
12
13
  '''
13
- Generate abstract views (LEF), timing libraries (liberty files),
14
- circuit descriptions (CDL), and parasitic annotation files (SPEF)
14
+ Write output files
15
15
  '''
16
16
 
17
- # Generic tool setup.
18
- setup_tool(chip)
17
+ # Generic apr tool setup.
18
+ apr_setup(chip)
19
19
 
20
- set_pnr_inputs(chip)
21
- set_pnr_outputs(chip)
22
-
23
- tool = 'openroad'
20
+ # Task setup
24
21
  design = chip.top()
25
22
  step = chip.get('arg', 'step')
26
23
  index = chip.get('arg', 'index')
27
- _, task = get_tool_task(chip, step, index)
24
+ tool, task = get_tool_task(chip, step, index)
28
25
 
29
- # Set thread count to 1 while issue related to write_timing_model segfaulting
30
- # when multiple threads are on is resolved.
31
- chip.set('tool', tool, 'task', task, 'threads', 1,
32
- step=step, index=index, clobber=True)
26
+ chip.set('tool', tool, 'task', task, 'script', 'apr/sc_write_data.tcl',
27
+ step=step, index=index)
33
28
 
34
- stackup = chip.get('option', 'stackup')
35
- pdk = chip.get('option', 'pdk')
29
+ # Setup task IO
30
+ set_pnr_inputs(chip)
31
+ set_pnr_outputs(chip)
36
32
 
33
+ # set default values for openroad
34
+ define_ord_params(chip)
35
+ define_sta_params(chip)
36
+ define_sdc_params(chip)
37
+ define_pex_params(chip)
38
+ define_psm_params(chip)
39
+
40
+ pdkname = chip.get('option', 'pdk')
37
41
  targetlibs = get_libraries(chip, 'logic')
38
42
  macrolibs = get_libraries(chip, 'macro')
43
+ stackup = chip.get('option', 'stackup')
39
44
 
40
45
  # Determine if exporting the cdl
41
46
  set_tool_task_var(chip, param_key='write_cdl',
@@ -65,7 +70,7 @@ def setup(chip):
65
70
  for corner in chip.get('tool', tool, 'task', task, 'var', 'pex_corners',
66
71
  step=step, index=index):
67
72
  chip.add('tool', tool, 'task', task, 'require',
68
- ",".join(['pdk', pdk, 'pexmodel', 'openroad-openrcx', stackup, corner]),
73
+ ",".join(['pdk', pdkname, 'pexmodel', 'openroad-openrcx', stackup, corner]),
69
74
  step=step, index=index)
70
75
 
71
76
  # Add outputs SPEF in the format {design}.{pexcorner}.spef
@@ -102,7 +107,7 @@ def setup(chip):
102
107
  chip.add('tool', tool, 'task', task, 'output', design + '.' + corner + '.sdf',
103
108
  step=step, index=index)
104
109
 
105
- _set_reports(chip, [
110
+ set_reports(chip, [
106
111
  'setup',
107
112
  'hold',
108
113
  'unconstrained',
@@ -123,9 +128,9 @@ def setup(chip):
123
128
 
124
129
 
125
130
  def pre_process(chip):
126
- or_pre_process(chip)
131
+ define_ord_files(chip)
127
132
  build_pex_corners(chip)
128
133
 
129
134
 
130
135
  def post_process(chip):
131
- or_post_process(chip)
136
+ extract_metrics(chip)
@@ -9,16 +9,16 @@ Installation: https://github.com/The-OpenROAD-Project/OpenSTA (also installed wi
9
9
  '''
10
10
 
11
11
  import os
12
- from siliconcompiler.tools.openroad.openroad import get_library_timing_keypaths
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
15
- from siliconcompiler.targets import asap7_demo
16
15
 
17
16
 
18
17
  ####################################################################
19
18
  # Make Docs
20
19
  ####################################################################
21
20
  def make_docs(chip):
21
+ from siliconcompiler.targets import asap7_demo
22
22
  chip.use(asap7_demo)
23
23
 
24
24
 
@@ -0,0 +1,27 @@
1
+ from siliconcompiler.tools.opensta import setup as tool_setup
2
+ from siliconcompiler.tools.opensta import runtime_options as tool_runtime_options
3
+ from siliconcompiler.tools._common import get_tool_task
4
+
5
+
6
+ def setup(chip):
7
+ '''
8
+ Check setup information about the timing libraries.
9
+ '''
10
+ step = chip.get('arg', 'step')
11
+ index = chip.get('arg', 'index')
12
+ tool, task = get_tool_task(chip, step, index)
13
+
14
+ tool_setup(chip)
15
+
16
+ chip.set('tool', tool, 'task', task, 'script', 'sc_check_library.tcl',
17
+ step=step, index=index, clobber=False)
18
+
19
+ chip.set('tool', tool, 'task', task, 'threads', 1,
20
+ step=step, index=index)
21
+
22
+
23
+ ################################
24
+ # Runtime options
25
+ ################################
26
+ def runtime_options(chip):
27
+ return tool_runtime_options(chip)