siliconcompiler 0.32.3__py3-none-any.whl → 0.33.0__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 (154) hide show
  1. siliconcompiler/__init__.py +19 -2
  2. siliconcompiler/_metadata.py +1 -1
  3. siliconcompiler/apps/sc.py +2 -2
  4. siliconcompiler/apps/sc_install.py +3 -3
  5. siliconcompiler/apps/sc_issue.py +1 -1
  6. siliconcompiler/apps/sc_remote.py +4 -4
  7. siliconcompiler/apps/sc_show.py +2 -2
  8. siliconcompiler/apps/utils/replay.py +5 -3
  9. siliconcompiler/asic.py +120 -0
  10. siliconcompiler/checklist.py +150 -0
  11. siliconcompiler/core.py +267 -289
  12. siliconcompiler/flowgraph.py +803 -515
  13. siliconcompiler/fpga.py +84 -0
  14. siliconcompiler/metric.py +420 -0
  15. siliconcompiler/optimizer/vizier.py +2 -3
  16. siliconcompiler/package/__init__.py +29 -6
  17. siliconcompiler/pdk.py +415 -0
  18. siliconcompiler/record.py +449 -0
  19. siliconcompiler/remote/client.py +6 -3
  20. siliconcompiler/remote/schema.py +116 -112
  21. siliconcompiler/remote/server.py +3 -5
  22. siliconcompiler/report/dashboard/cli/__init__.py +13 -722
  23. siliconcompiler/report/dashboard/cli/board.py +895 -0
  24. siliconcompiler/report/dashboard/web/__init__.py +10 -10
  25. siliconcompiler/report/dashboard/web/components/__init__.py +5 -4
  26. siliconcompiler/report/dashboard/web/components/flowgraph.py +3 -3
  27. siliconcompiler/report/dashboard/web/components/graph.py +6 -3
  28. siliconcompiler/report/dashboard/web/state.py +1 -1
  29. siliconcompiler/report/dashboard/web/utils/__init__.py +4 -3
  30. siliconcompiler/report/html_report.py +2 -3
  31. siliconcompiler/report/report.py +13 -7
  32. siliconcompiler/report/summary_image.py +1 -1
  33. siliconcompiler/report/summary_table.py +3 -3
  34. siliconcompiler/report/utils.py +11 -10
  35. siliconcompiler/scheduler/__init__.py +145 -280
  36. siliconcompiler/scheduler/run_node.py +2 -1
  37. siliconcompiler/scheduler/send_messages.py +4 -4
  38. siliconcompiler/scheduler/slurm.py +2 -2
  39. siliconcompiler/schema/__init__.py +19 -2
  40. siliconcompiler/schema/baseschema.py +493 -0
  41. siliconcompiler/schema/cmdlineschema.py +250 -0
  42. siliconcompiler/{sphinx_ext → schema/docs}/__init__.py +3 -1
  43. siliconcompiler/{sphinx_ext → schema/docs}/dynamicgen.py +63 -81
  44. siliconcompiler/{sphinx_ext → schema/docs}/schemagen.py +73 -85
  45. siliconcompiler/{sphinx_ext → schema/docs}/utils.py +12 -13
  46. siliconcompiler/schema/editableschema.py +136 -0
  47. siliconcompiler/schema/journalingschema.py +238 -0
  48. siliconcompiler/schema/namedschema.py +41 -0
  49. siliconcompiler/schema/packageschema.py +101 -0
  50. siliconcompiler/schema/parameter.py +791 -0
  51. siliconcompiler/schema/parametertype.py +323 -0
  52. siliconcompiler/schema/parametervalue.py +736 -0
  53. siliconcompiler/schema/safeschema.py +37 -0
  54. siliconcompiler/schema/schema_cfg.py +109 -1789
  55. siliconcompiler/schema/utils.py +5 -68
  56. siliconcompiler/schema_obj.py +119 -0
  57. siliconcompiler/tool.py +1308 -0
  58. siliconcompiler/tools/_common/__init__.py +6 -10
  59. siliconcompiler/tools/_common/sdc/sc_constraints.sdc +1 -1
  60. siliconcompiler/tools/bluespec/convert.py +7 -7
  61. siliconcompiler/tools/builtin/_common.py +1 -1
  62. siliconcompiler/tools/builtin/concatenate.py +2 -2
  63. siliconcompiler/tools/builtin/minimum.py +1 -1
  64. siliconcompiler/tools/builtin/mux.py +2 -1
  65. siliconcompiler/tools/builtin/nop.py +1 -1
  66. siliconcompiler/tools/builtin/verify.py +6 -4
  67. siliconcompiler/tools/chisel/convert.py +4 -4
  68. siliconcompiler/tools/genfasm/bitstream.py +3 -3
  69. siliconcompiler/tools/ghdl/convert.py +1 -1
  70. siliconcompiler/tools/icarus/compile.py +4 -4
  71. siliconcompiler/tools/icepack/bitstream.py +6 -1
  72. siliconcompiler/tools/klayout/convert_drc_db.py +5 -0
  73. siliconcompiler/tools/klayout/klayout_export.py +0 -1
  74. siliconcompiler/tools/klayout/klayout_utils.py +3 -10
  75. siliconcompiler/tools/nextpnr/apr.py +6 -1
  76. siliconcompiler/tools/nextpnr/nextpnr.py +4 -4
  77. siliconcompiler/tools/openroad/_apr.py +13 -0
  78. siliconcompiler/tools/openroad/rdlroute.py +3 -3
  79. siliconcompiler/tools/openroad/scripts/apr/postamble.tcl +1 -1
  80. siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +5 -5
  81. siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +2 -2
  82. siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +2 -2
  83. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +2 -2
  84. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +2 -2
  85. siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +2 -2
  86. siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +2 -2
  87. siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +2 -2
  88. siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +2 -2
  89. siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +2 -2
  90. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +2 -2
  91. siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +3 -3
  92. siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +2 -2
  93. siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +2 -2
  94. siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +2 -2
  95. siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +2 -2
  96. siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +2 -2
  97. siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +2 -2
  98. siliconcompiler/tools/openroad/scripts/common/procs.tcl +57 -1
  99. siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +2 -2
  100. siliconcompiler/tools/openroad/scripts/common/write_images.tcl +28 -3
  101. siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +1 -1
  102. siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +3 -3
  103. siliconcompiler/tools/openroad/scripts/sc_show.tcl +6 -6
  104. siliconcompiler/tools/slang/__init__.py +10 -10
  105. siliconcompiler/tools/surelog/parse.py +4 -4
  106. siliconcompiler/tools/sv2v/convert.py +20 -3
  107. siliconcompiler/tools/verilator/compile.py +2 -2
  108. siliconcompiler/tools/verilator/verilator.py +3 -3
  109. siliconcompiler/tools/vpr/place.py +1 -1
  110. siliconcompiler/tools/vpr/route.py +4 -4
  111. siliconcompiler/tools/vpr/screenshot.py +1 -1
  112. siliconcompiler/tools/vpr/show.py +5 -5
  113. siliconcompiler/tools/vpr/vpr.py +24 -24
  114. siliconcompiler/tools/xdm/convert.py +2 -2
  115. siliconcompiler/tools/xyce/simulate.py +1 -1
  116. siliconcompiler/tools/yosys/sc_synth_asic.tcl +74 -68
  117. siliconcompiler/tools/yosys/syn_asic.py +2 -2
  118. siliconcompiler/toolscripts/_tools.json +7 -7
  119. siliconcompiler/toolscripts/ubuntu22/install-vpr.sh +0 -2
  120. siliconcompiler/toolscripts/ubuntu24/install-vpr.sh +0 -2
  121. siliconcompiler/utils/__init__.py +8 -112
  122. siliconcompiler/utils/flowgraph.py +339 -0
  123. siliconcompiler/{issue.py → utils/issue.py} +4 -3
  124. siliconcompiler/utils/logging.py +1 -2
  125. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/METADATA +9 -8
  126. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/RECORD +151 -134
  127. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/WHEEL +1 -1
  128. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/entry_points.txt +8 -8
  129. siliconcompiler/schema/schema_obj.py +0 -1936
  130. siliconcompiler/toolscripts/ubuntu20/install-vpr.sh +0 -29
  131. siliconcompiler/toolscripts/ubuntu20/install-yosys-parmys.sh +0 -61
  132. /siliconcompiler/{templates → data/templates}/__init__.py +0 -0
  133. /siliconcompiler/{templates → data/templates}/email/__init__.py +0 -0
  134. /siliconcompiler/{templates → data/templates}/email/general.j2 +0 -0
  135. /siliconcompiler/{templates → data/templates}/email/summary.j2 +0 -0
  136. /siliconcompiler/{templates → data/templates}/issue/README.txt +0 -0
  137. /siliconcompiler/{templates → data/templates}/issue/__init__.py +0 -0
  138. /siliconcompiler/{templates → data/templates}/issue/run.sh +0 -0
  139. /siliconcompiler/{templates → data/templates}/replay/replay.py.j2 +0 -0
  140. /siliconcompiler/{templates → data/templates}/replay/replay.sh.j2 +0 -0
  141. /siliconcompiler/{templates → data/templates}/replay/requirements.txt +0 -0
  142. /siliconcompiler/{templates → data/templates}/replay/setup.sh +0 -0
  143. /siliconcompiler/{templates → data/templates}/report/__init__.py +0 -0
  144. /siliconcompiler/{templates → data/templates}/report/bootstrap.min.css +0 -0
  145. /siliconcompiler/{templates → data/templates}/report/bootstrap.min.js +0 -0
  146. /siliconcompiler/{templates → data/templates}/report/bootstrap_LICENSE.md +0 -0
  147. /siliconcompiler/{templates → data/templates}/report/sc_report.j2 +0 -0
  148. /siliconcompiler/{templates → data/templates}/slurm/__init__.py +0 -0
  149. /siliconcompiler/{templates → data/templates}/slurm/run.sh +0 -0
  150. /siliconcompiler/{templates → data/templates}/tcl/__init__.py +0 -0
  151. /siliconcompiler/{templates → data/templates}/tcl/manifest.tcl.j2 +0 -0
  152. /siliconcompiler/{units.py → utils/units.py} +0 -0
  153. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/licenses/LICENSE +0 -0
  154. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/top_level.txt +0 -0
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Error checking
@@ -122,4 +122,4 @@ if { [llength $pdn_blockages] > 0 } {
122
122
  # Task Postamble
123
123
  ###############################
124
124
 
125
- source -echo "$sc_refdir/apr/postamble.tcl"
125
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Buffer ports
@@ -70,4 +70,4 @@ estimate_parasitics -placement
70
70
  # Task Postamble
71
71
  ###############################
72
72
 
73
- source -echo "$sc_refdir/apr/postamble.tcl"
73
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Timing Repair
@@ -159,4 +159,4 @@ estimate_parasitics $parasitics_stage
159
159
  # Task Postamble
160
160
  ###############################
161
161
 
162
- source -echo "$sc_refdir/apr/postamble.tcl"
162
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Generate LEF
@@ -122,4 +122,4 @@ foreach net [sc_psm_check_nets] {
122
122
  # Task Postamble
123
123
  ###############################
124
124
 
125
- source -echo "$sc_refdir/apr/postamble.tcl"
125
+ source "$sc_refdir/apr/postamble.tcl"
@@ -411,12 +411,18 @@ proc sc_psm_check_nets { } {
411
411
  # Save an image
412
412
  ###########################
413
413
 
414
- proc sc_save_image { title path { pixels 1000 } } {
414
+ proc sc_save_image { title path { gif false } { pixels 1000 } } {
415
415
  utl::info FLW 1 "Saving \"$title\" to $path"
416
416
 
417
417
  save_image -resolution [sc_image_resolution $pixels] \
418
418
  -area [sc_image_area] \
419
419
  $path
420
+
421
+ if { $gif } {
422
+ save_animated_gif -add \
423
+ -resolution [sc_image_resolution $pixels] \
424
+ -area [sc_image_area]
425
+ }
420
426
  }
421
427
 
422
428
  ###########################
@@ -480,6 +486,9 @@ proc sc_image_setup_default { } {
480
486
  gui::set_display_controls "Misc/Scale bar" visible true
481
487
  gui::set_display_controls "Misc/Highlight selected" visible true
482
488
  gui::set_display_controls "Misc/Detailed view" visible true
489
+ if { [sc_check_version 21574] } {
490
+ gui::set_display_controls "Misc/Labels" visible true
491
+ }
483
492
  }
484
493
 
485
494
  ###########################
@@ -597,6 +606,22 @@ proc sc_has_input_files { type key } {
597
606
  return [expr { [sc_get_input_files $type $key] != [] }]
598
607
  }
599
608
 
609
+ proc sc_path_group { args } {
610
+ sta::parse_key_args "sc_path_group" args \
611
+ keys {-name -to -from} \
612
+ flags {}
613
+
614
+ sta::check_argc_eq0 "sc_path_group" $args
615
+
616
+ if { [llength $keys(-from)] == 0 } {
617
+ return
618
+ }
619
+ if { [llength $keys(-to)] == 0 } {
620
+ return
621
+ }
622
+ group_path -name $keys(-name) -from $keys(-from) -to $keys(-to)
623
+ }
624
+
600
625
  proc sc_setup_sta { } {
601
626
  set sta_early_timing_derate [lindex [sc_cfg_tool_task_get var sta_early_timing_derate] 0]
602
627
  set sta_late_timing_derate [lindex [sc_cfg_tool_task_get var sta_late_timing_derate] 0]
@@ -609,6 +634,37 @@ proc sc_setup_sta { } {
609
634
  set_timing_derate -late $sta_late_timing_derate
610
635
  }
611
636
 
637
+ # Create path groups
638
+ if {
639
+ [lindex [sc_cfg_tool_task_get var sta_define_path_groups] 0] == "true" &&
640
+ [llength [sta::path_group_names]] == 0
641
+ } {
642
+ sc_path_group -name in2out -from [all_inputs -no_clocks] -to [all_outputs]
643
+
644
+ if {
645
+ [llength [all_clocks]] == 1 ||
646
+ [lindex [sc_cfg_tool_task_get var sta_unique_path_groups_per_clock] 0] == "false"
647
+ } {
648
+ sc_path_group -name in2reg -from [all_inputs -no_clocks] -to [all_registers]
649
+ sc_path_group -name reg2reg -from [all_registers] -to [all_registers]
650
+ sc_path_group -name reg2out -from [all_registers] -to [all_outputs]
651
+ } else {
652
+ foreach clock [all_clocks] {
653
+ set clk_name [get_property $clock name]
654
+ sc_path_group -name in2reg.${clk_name} \
655
+ -from [all_inputs -no_clocks] \
656
+ -to [all_registers -clock $clock]
657
+ sc_path_group -name reg2reg.${clk_name} \
658
+ -from [all_registers -clock $clock] \
659
+ -to [all_registers -clock $clock]
660
+ sc_path_group -name reg2out.${clk_name} \
661
+ -from [all_registers -clock $clock] \
662
+ -to [all_outputs]
663
+ }
664
+ }
665
+ }
666
+ utl::info FLW 1 "Timing path groups: [sta::path_group_names]"
667
+
612
668
  # Check timing setup
613
669
  if { [sc_cfg_tool_task_check_in_list check_setup var reports] } {
614
670
  tee -file "reports/check_timing_setup.rpt" {check_setup -verbose}
@@ -5,7 +5,7 @@ set sc_resolution \
5
5
 
6
6
  sc_image_setup_default
7
7
 
8
- sc_save_image "screenshot" "outputs/${sc_design}.png" $sc_resolution
8
+ sc_save_image "screenshot" "outputs/${sc_design}.png" false $sc_resolution
9
9
 
10
10
  gui::restore_display_controls
11
11
 
@@ -14,5 +14,5 @@ if {
14
14
  [lindex [sc_cfg_tool_task_get {var} include_report_images] 0]
15
15
  == "true"
16
16
  } {
17
- source -echo "${sc_refdir}/sc_write_images.tcl"
17
+ source "${sc_refdir}/sc_write_images.tcl"
18
18
  }
@@ -1,6 +1,6 @@
1
1
  # Adopted from https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/blob/3f9740e6b3643835e918d78ae1d377d65af0f0fb/flow/scripts/save_images.tcl
2
2
 
3
- proc sc_image_heatmap { name ident image_name title { allow_bin_adjust 1 } } {
3
+ proc sc_image_heatmap { name ident image_name title { gif false } { allow_bin_adjust 1 } } {
4
4
  set ord_heatmap_bins_x [lindex [sc_cfg_tool_task_get var ord_heatmap_bins_x] 0]
5
5
  set ord_heatmap_bins_y [lindex [sc_cfg_tool_task_get var ord_heatmap_bins_y] 0]
6
6
 
@@ -49,7 +49,7 @@ proc sc_image_heatmap { name ident image_name title { allow_bin_adjust 1 } } {
49
49
 
50
50
  gui::set_display_controls "Heat Maps/${name}" visible true
51
51
 
52
- sc_save_image "$title heatmap" reports/images/heatmap/${image_name}
52
+ sc_save_image "$title heatmap" reports/images/heatmap/${image_name} $gif
53
53
 
54
54
  gui::set_display_controls "Heat Maps/${name}" visible false
55
55
  }
@@ -125,6 +125,13 @@ proc sc_image_irdrop { net corner } {
125
125
  return
126
126
  }
127
127
 
128
+ set gif false
129
+ if { [sc_check_version 21574] } {
130
+ set gif true
131
+ }
132
+ if { $gif } {
133
+ save_animated_gif -start "reports/images/heatmap/irdrop/${net}.${corner}.gif"
134
+ }
128
135
  foreach layer [[ord::get_db_tech] getLayers] {
129
136
  if { [$layer getRoutingLevel] == 0 } {
130
137
  continue
@@ -136,10 +143,26 @@ proc sc_image_irdrop { net corner } {
136
143
  gui::set_heatmap IRDrop Layer $layer_name
137
144
  gui::set_heatmap IRDrop rebuild
138
145
 
146
+ set label ""
147
+ if { [sc_check_version 21574] } {
148
+ set box [[ord::get_db_block] getDieArea]
149
+ set x [ord::dbu_to_microns [$box xMax]]
150
+ set y [ord::dbu_to_microns [$box yMin]]
151
+ set label [add_label -position "$x $y" -anchor "bottom right" -color white $layer_name]
152
+ }
153
+
139
154
  sc_image_heatmap "IR Drop" \
140
155
  "IRDrop" \
141
156
  "irdrop/${net}.${corner}.${layer_name}.png" \
142
- "IR drop for $net on $layer_name for $corner"
157
+ "IR drop for $net on $layer_name for $corner" \
158
+ $gif
159
+
160
+ if { $label != "" } {
161
+ gui::delete_label $label
162
+ }
163
+ }
164
+ if { $gif } {
165
+ save_animated_gif -end
143
166
  }
144
167
  }
145
168
 
@@ -154,6 +177,7 @@ proc sc_image_routing_congestion { } {
154
177
  "Routing" \
155
178
  "routing_congestion.png" \
156
179
  "routing congestion" \
180
+ 0 \
157
181
  0
158
182
  }
159
183
 
@@ -170,6 +194,7 @@ proc sc_image_estimated_routing_congestion { } {
170
194
  "RUDY" \
171
195
  "estimated_routing_congestion.png" \
172
196
  "estimated routing congestion" \
197
+ 0 \
173
198
  0
174
199
  } err
175
200
  unsuppress_message GRT 10
@@ -48,5 +48,5 @@ read_lef $sc_techlef
48
48
  set_thread_count [sc_cfg_tool_task_get threads]
49
49
 
50
50
  utl::set_metrics_stage "sc__step__{}"
51
- source -echo "${sc_refdir}/rcx/sc_${sc_task}.tcl"
51
+ source "${sc_refdir}/rcx/sc_${sc_task}.tcl"
52
52
  utl::pop_metrics_stage
@@ -39,7 +39,7 @@ set sc_macrolibs [sc_get_asic_libraries macro]
39
39
  # Setup debugging
40
40
  ###############################
41
41
 
42
- source -echo "$sc_refdir/common/debugging.tcl"
42
+ source "$sc_refdir/common/debugging.tcl"
43
43
 
44
44
  ###############################
45
45
  # Source helper functions
@@ -85,7 +85,7 @@ utl::push_metrics_stage "sc__prestep__{}"
85
85
  if { [sc_cfg_tool_task_exists prescript] } {
86
86
  foreach sc_pre_script [sc_cfg_tool_task_get prescript] {
87
87
  puts "Sourcing pre script: ${sc_pre_script}"
88
- source -echo $sc_pre_script
88
+ source $sc_pre_script
89
89
  }
90
90
  }
91
91
  utl::pop_metrics_stage
@@ -160,7 +160,7 @@ utl::push_metrics_stage "sc__poststep__{}"
160
160
  if { [sc_cfg_tool_task_exists postscript] } {
161
161
  foreach sc_post_script [sc_cfg_tool_task_get postscript] {
162
162
  puts "Sourcing post script: ${sc_post_script}"
163
- source -echo $sc_post_script
163
+ source $sc_post_script
164
164
  }
165
165
  }
166
166
  utl::pop_metrics_stage
@@ -20,7 +20,7 @@ set sc_refdir [sc_cfg_tool_task_get refdir]
20
20
  # Setup debugging
21
21
  ###############################
22
22
 
23
- source -echo "$sc_refdir/common/debugging.tcl"
23
+ source "$sc_refdir/common/debugging.tcl"
24
24
 
25
25
  ###############################
26
26
  # Setup helper functions
@@ -58,11 +58,11 @@ set_thread_count [sc_cfg_tool_task_get threads]
58
58
  # Read Files
59
59
  ###############################
60
60
 
61
- source -echo "$sc_refdir/common/read_liberty.tcl"
61
+ source "$sc_refdir/common/read_liberty.tcl"
62
62
 
63
- source -echo "$sc_refdir/common/read_input_files.tcl"
63
+ source "$sc_refdir/common/read_input_files.tcl"
64
64
 
65
- source -echo "$sc_refdir/common/read_timing_constraints.tcl"
65
+ source "$sc_refdir/common/read_timing_constraints.tcl"
66
66
 
67
67
  ###############################
68
68
  # Common Setup
@@ -84,7 +84,7 @@ utl::push_metrics_stage "sc__prestep__{}"
84
84
  if { [sc_cfg_tool_task_exists prescript] } {
85
85
  foreach sc_pre_script [sc_cfg_tool_task_get prescript] {
86
86
  puts "Sourcing pre script: ${sc_pre_script}"
87
- source -echo $sc_pre_script
87
+ source $sc_pre_script
88
88
  }
89
89
  }
90
90
  utl::pop_metrics_stage
@@ -102,7 +102,7 @@ if { [llength $openroad_dont_touch] > 0 } {
102
102
  }
103
103
 
104
104
  if { $sc_task == "screenshot" } {
105
- source -echo "$sc_refdir/common/screenshot.tcl"
105
+ source "$sc_refdir/common/screenshot.tcl"
106
106
  }
107
107
 
108
108
  if { [lindex [sc_cfg_tool_task_get {var} show_exit] 0] == "true" } {
@@ -70,38 +70,38 @@ def common_runtime_options(chip):
70
70
  'param'])
71
71
 
72
72
  if opts['libext']:
73
- options.append(f'--libext {",".join(opts["libext"])}')
73
+ options.extend(['--libext', f'{",".join(opts["libext"])}'])
74
74
 
75
75
  #####################
76
76
  # Library directories
77
77
  #####################
78
78
  if opts['ydir']:
79
- options.append(f'-y {",".join(opts["ydir"])}')
79
+ options.extend(['-y', f'{",".join(opts["ydir"])}'])
80
80
 
81
81
  #####################
82
82
  # Library files
83
83
  #####################
84
84
  if opts['vlib']:
85
- options.append(f'-libfile {",".join(opts["vlib"])}')
85
+ options.extend(['-libfile', f'{",".join(opts["vlib"])}'])
86
86
 
87
87
  #####################
88
88
  # Include paths
89
89
  #####################
90
90
  if opts['idir']:
91
- options.append(f'--include-directory {",".join(opts["idir"])}')
91
+ options.extend(['--include-directory', f'{",".join(opts["idir"])}'])
92
92
 
93
93
  #######################
94
94
  # Variable Definitions
95
95
  #######################
96
96
  for value in opts['define']:
97
- options.append('-D ' + value)
97
+ options.extend(['-D', value])
98
98
 
99
99
  #######################
100
100
  # Command files
101
101
  #######################
102
102
  cmdfiles = get_input_files(chip, 'input', 'cmdfile', 'f')
103
103
  if cmdfiles:
104
- options.append(f'-F {",".join(cmdfiles)}')
104
+ options.extend(['-F', f'{",".join(cmdfiles)}'])
105
105
 
106
106
  #######################
107
107
  # Sources
@@ -114,7 +114,7 @@ def common_runtime_options(chip):
114
114
  #######################
115
115
  # Top Module
116
116
  #######################
117
- options.append('--top ' + chip.top(step, index))
117
+ options.extend(['--top', chip.top(step, index)])
118
118
 
119
119
  ###############################
120
120
  # Parameters (top module only)
@@ -122,7 +122,7 @@ def common_runtime_options(chip):
122
122
  # Set up user-provided parameters to ensure we elaborate the correct modules
123
123
  for param, value in opts['param']:
124
124
  value = value.replace('"', '\\"')
125
- options.append(f'-G {param}={value}')
125
+ options.extend(['-G', f'{param}={value}'])
126
126
 
127
127
  return options
128
128
 
@@ -211,5 +211,5 @@ def _diagnostics(chip, driver, compilation):
211
211
  for diag in compilation.getAllDiagnostics():
212
212
  diags.issue(diag)
213
213
 
214
- record_metric(chip, step, index, 'errors', diags.numErrors, [])
215
- record_metric(chip, step, index, 'warnings', diags.numWarnings, [])
214
+ record_metric(chip, step, index, 'errors', diags.numErrors, [f'sc_{step}{index}.log'])
215
+ record_metric(chip, step, index, 'warnings', diags.numWarnings, [f'sc_{step}{index}.log'])
@@ -83,13 +83,13 @@ def runtime_options(chip):
83
83
  # Library directories
84
84
  #####################
85
85
  for value in opts['ydir']:
86
- cmdlist.append('-y ' + value)
86
+ cmdlist.extend(['-y', value])
87
87
 
88
88
  #####################
89
89
  # Library files
90
90
  #####################
91
91
  for value in opts['vlib']:
92
- cmdlist.append('-v ' + value)
92
+ cmdlist.extend(['-v', value])
93
93
 
94
94
  #####################
95
95
  # Include paths
@@ -107,7 +107,7 @@ def runtime_options(chip):
107
107
  # Command files
108
108
  #######################
109
109
  for value in get_input_files(chip, 'input', 'cmdfile', 'f'):
110
- cmdlist.append('-f ' + value)
110
+ cmdlist.extend(['-f', + value])
111
111
 
112
112
  #######################
113
113
  # Sources
@@ -120,7 +120,7 @@ def runtime_options(chip):
120
120
  #######################
121
121
  # Top Module
122
122
  #######################
123
- cmdlist.append(f'-top {chip.top(step, index)}')
123
+ cmdlist.extend(['-top', chip.top(step, index)])
124
124
 
125
125
  ###############################
126
126
  # Parameters (top module only)
@@ -23,6 +23,26 @@ def setup(chip):
23
23
  chip.set('tool', tool, 'vswitch', '--numeric-version')
24
24
  chip.set('tool', tool, 'version', '>=0.0.9', clobber=False)
25
25
 
26
+ chip.add('tool', tool, 'task', task, 'require',
27
+ ",".join(['tool', tool, 'task', task, 'var', 'skip_convert']), step=step, index=index)
28
+ chip.set('tool', tool, 'task', task, 'var', 'skip_convert',
29
+ 'true/false, if true will skip converting system verilog to verilog', field='help')
30
+ skip = chip.get('tool', tool, 'task', task, 'var', 'skip_convert', step=step, index=index)
31
+ if skip:
32
+ skip = skip[0] == "true"
33
+ else:
34
+ skip = False
35
+ chip.set('tool', tool, 'task', task, 'var', 'skip_convert', skip,
36
+ step=step, index=index, clobber=False)
37
+
38
+ chip.set('tool', tool, 'task', task, 'input', f'{topmodule}.sv', step=step, index=index)
39
+
40
+ if skip:
41
+ chip.set('tool', tool, 'task', task, 'output', f'{topmodule}.sv', step=step, index=index)
42
+ return "passing system verilog along"
43
+
44
+ chip.set('tool', tool, 'task', task, 'output', f'{topmodule}.v', step=step, index=index)
45
+
26
46
  chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
27
47
  step=step, index=index, clobber=False)
28
48
 
@@ -41,6 +61,3 @@ def setup(chip):
41
61
  step=step, index=index)
42
62
  chip.add('tool', tool, 'task', task, 'option', "--write=outputs/" + topmodule + ".v",
43
63
  step=step, index=index)
44
-
45
- chip.set('tool', tool, 'task', task, 'input', f'{topmodule}.sv', step=step, index=index)
46
- chip.set('tool', tool, 'task', task, 'output', f'{topmodule}.v', step=step, index=index)
@@ -161,12 +161,12 @@ def runtime_options(chip):
161
161
 
162
162
  if c_flags:
163
163
  cflags_str = ' '.join(c_flags)
164
- cmdlist.extend(['-CFLAGS', f'"{cflags_str}"'])
164
+ cmdlist.extend(['-CFLAGS', cflags_str])
165
165
 
166
166
  ld_flags = chip.get('tool', tool, 'task', task, 'var', 'ldflags', step=step, index=index)
167
167
  if ld_flags:
168
168
  ldflags_str = ' '.join(ld_flags)
169
- cmdlist.extend(['-LDFLAGS', f'"{ldflags_str}"'])
169
+ cmdlist.extend(['-LDFLAGS', ldflags_str])
170
170
 
171
171
  for value in get_input_files(chip, 'input', 'hll', 'c'):
172
172
  cmdlist.append(value)
@@ -144,9 +144,9 @@ def runtime_options(chip):
144
144
  cmdlist.append(f'inputs/{design}.v')
145
145
  else:
146
146
  for value in frontend_opts['ydir']:
147
- cmdlist.append(f'-y {value}')
147
+ cmdlist.extend(['-y', value])
148
148
  for value in frontend_opts['vlib']:
149
- cmdlist.append(f'-v {value}')
149
+ cmdlist.extend(['-v', value])
150
150
  for value in frontend_opts['idir']:
151
151
  cmdlist.append(f'-I{value}')
152
152
  for value in frontend_opts['define']:
@@ -160,7 +160,7 @@ def runtime_options(chip):
160
160
  cmdlist.append(value)
161
161
 
162
162
  for value in get_input_files(chip, 'input', 'cmdfile', 'f'):
163
- cmdlist.append(f'-f {value}')
163
+ cmdlist.extend(['-f', value])
164
164
 
165
165
  return cmdlist
166
166
 
@@ -62,7 +62,7 @@ def runtime_options(chip):
62
62
  graphics_command_str = " ".join(graphics_commands)
63
63
 
64
64
  options.append("--graphics_commands")
65
- options.append(f"\"{graphics_command_str}\"")
65
+ options.append(graphics_command_str)
66
66
 
67
67
  return options
68
68
 
@@ -62,8 +62,8 @@ def runtime_options(chip):
62
62
 
63
63
  options.append('--route')
64
64
  # To run only the routing step we need to pass in the placement files
65
- options.append(f'--net_file inputs/{design}.net')
66
- options.append(f'--place_file inputs/{design}.place')
65
+ options.extend(['--net_file', f'inputs/{design}.net'])
66
+ options.extend(['--place_file', f'inputs/{design}.place'])
67
67
 
68
68
  enable_images = chip.get('tool', tool, 'task', task, 'var', 'enable_images',
69
69
  step=step, index=index)[0]
@@ -72,7 +72,7 @@ def runtime_options(chip):
72
72
  step=step, index=index)
73
73
 
74
74
  if (len(route_iterations) > 0):
75
- options.append(f'--max_router_iterations {route_iterations[0]}')
75
+ options.extend(['--max_router_iterations', route_iterations[0]])
76
76
 
77
77
  if enable_images == 'true':
78
78
  design = chip.top()
@@ -102,7 +102,7 @@ def runtime_options(chip):
102
102
  graphics_command_str = " ".join(graphics_commands)
103
103
 
104
104
  options.append("--graphics_commands")
105
- options.append(f"\"{graphics_command_str}\"")
105
+ options.append(graphics_command_str)
106
106
 
107
107
  return options
108
108
 
@@ -49,6 +49,6 @@ def runtime_options(chip):
49
49
  raise SiliconCompilerError(f"Incorrect file type {show_type}", chip=chip)
50
50
 
51
51
  options.append("--graphics_commands")
52
- options.append(f"\"{screenshot_command_str}\"")
52
+ options.append(screenshot_command_str)
53
53
 
54
54
  return options
@@ -64,14 +64,14 @@ def generic_show_options(chip):
64
64
  raise SiliconCompilerError("Blif file does not exist", chip=chip)
65
65
 
66
66
  if os.path.exists(net_file):
67
- options.append(f'--net_file {net_file}')
67
+ options.extend(['--net_file', net_file])
68
68
  else:
69
69
  raise SiliconCompilerError("Net file does not exist", chip=chip)
70
70
 
71
71
  if os.path.exists(route_file) and os.path.exists(place_file):
72
72
  options.append('--analysis')
73
- options.append(f'--place_file {place_file}')
74
- options.append(f'--route_file {route_file}')
73
+ options.extend(['--place_file', place_file])
74
+ options.extend(['--route_file', route_file])
75
75
  elif os.path.exists(place_file):
76
76
  # NOTE: This is a workaround to display the VPR GUI on the output of the place step.
77
77
  # VPR GUI can be invoked during the place, route or analysis steps - not after they are run.
@@ -81,8 +81,8 @@ def generic_show_options(chip):
81
81
  # the placed design. Setting max_router_iterations to 0 avoids running routing iterations
82
82
  # and provides a fast way to invoke VPR GUI on the placed design.
83
83
  options.append('--route')
84
- options.append('--max_router_iterations 0')
85
- options.append(f'--place_file {place_file}')
84
+ options.extend(['--max_router_iterations', 0])
85
+ options.extend(['--place_file', place_file])
86
86
  else:
87
87
  raise SiliconCompilerError("Place file does not exist", chip=chip)
88
88