siliconcompiler 0.35.4__py3-none-any.whl → 0.36.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 (59) hide show
  1. siliconcompiler/_metadata.py +1 -1
  2. siliconcompiler/constraints/__init__.py +4 -1
  3. siliconcompiler/constraints/asic_timing.py +230 -38
  4. siliconcompiler/constraints/fpga_timing.py +209 -14
  5. siliconcompiler/constraints/timing_mode.py +82 -0
  6. siliconcompiler/data/templates/tcl/manifest.tcl.j2 +0 -6
  7. siliconcompiler/flowgraph.py +95 -42
  8. siliconcompiler/flows/generate_openroad_rcx.py +2 -2
  9. siliconcompiler/flows/highresscreenshotflow.py +37 -0
  10. siliconcompiler/library.py +2 -1
  11. siliconcompiler/package/__init__.py +39 -45
  12. siliconcompiler/project.py +4 -1
  13. siliconcompiler/scheduler/scheduler.py +64 -35
  14. siliconcompiler/scheduler/schedulernode.py +5 -2
  15. siliconcompiler/scheduler/slurm.py +7 -6
  16. siliconcompiler/scheduler/taskscheduler.py +19 -16
  17. siliconcompiler/schema/_metadata.py +1 -1
  18. siliconcompiler/schema/namedschema.py +2 -4
  19. siliconcompiler/schema_support/cmdlineschema.py +0 -3
  20. siliconcompiler/schema_support/dependencyschema.py +0 -6
  21. siliconcompiler/schema_support/record.py +4 -3
  22. siliconcompiler/tool.py +58 -27
  23. siliconcompiler/tools/_common/tcl/sc_schema_access.tcl +0 -6
  24. siliconcompiler/tools/keplerformal/__init__.py +7 -0
  25. siliconcompiler/tools/keplerformal/lec.py +112 -0
  26. siliconcompiler/tools/klayout/screenshot.py +66 -1
  27. siliconcompiler/tools/klayout/scripts/klayout_export.py +10 -40
  28. siliconcompiler/tools/klayout/scripts/klayout_show.py +4 -4
  29. siliconcompiler/tools/klayout/scripts/klayout_utils.py +13 -1
  30. siliconcompiler/tools/montage/tile.py +26 -12
  31. siliconcompiler/tools/openroad/_apr.py +26 -10
  32. siliconcompiler/tools/openroad/init_floorplan.py +5 -2
  33. siliconcompiler/tools/openroad/power_grid_analysis.py +1 -1
  34. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +49 -14
  35. siliconcompiler/tools/openroad/scripts/apr/sc_irdrop.tcl +6 -4
  36. siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +4 -4
  37. siliconcompiler/tools/openroad/scripts/common/procs.tcl +14 -5
  38. siliconcompiler/tools/openroad/scripts/common/read_liberty.tcl +2 -2
  39. siliconcompiler/tools/openroad/scripts/common/reports.tcl +6 -3
  40. siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +1 -1
  41. siliconcompiler/tools/openroad/scripts/common/write_data_physical.tcl +8 -0
  42. siliconcompiler/tools/openroad/scripts/common/write_images.tcl +16 -12
  43. siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +3 -1
  44. siliconcompiler/tools/openroad/write_data.py +2 -2
  45. siliconcompiler/tools/opensta/scripts/sc_check_library.tcl +2 -2
  46. siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl +2 -2
  47. siliconcompiler/tools/opensta/scripts/sc_timing.tcl +12 -14
  48. siliconcompiler/tools/opensta/timing.py +6 -2
  49. siliconcompiler/toolscripts/_tools.json +9 -4
  50. siliconcompiler/toolscripts/ubuntu22/install-keplerformal.sh +72 -0
  51. siliconcompiler/toolscripts/ubuntu24/install-keplerformal.sh +72 -0
  52. siliconcompiler/utils/multiprocessing.py +11 -0
  53. siliconcompiler/utils/settings.py +70 -49
  54. {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.0.dist-info}/METADATA +3 -3
  55. {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.0.dist-info}/RECORD +59 -53
  56. {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.0.dist-info}/WHEEL +0 -0
  57. {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.0.dist-info}/entry_points.txt +0 -0
  58. {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.0.dist-info}/licenses/LICENSE +0 -0
  59. {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.0.dist-info}/top_level.txt +0 -0
@@ -60,7 +60,7 @@ if { [sc_cfg_tool_task_get var write_spef] } {
60
60
  if { [sc_cfg_tool_task_get var use_spef] } {
61
61
  set lib_pex [dict create]
62
62
  foreach scenario $sc_scenarios {
63
- set pexcorner [sc_cfg_get constraint timing $scenario pexcorner]
63
+ set pexcorner [sc_cfg_get constraint timing scenario $scenario pexcorner]
64
64
 
65
65
  dict set lib_pex $scenario $pexcorner
66
66
  }
@@ -107,11 +107,11 @@ foreach corner $sc_scenarios {
107
107
  ###############################
108
108
 
109
109
  foreach corner $sc_scenarios {
110
- if { [sc_cfg_exists constraint timing $corner voltage] } {
111
- foreach net [dict keys [sc_cfg_get constraint timing $corner voltage]] {
110
+ if { [sc_cfg_exists constraint timing scenario $corner voltage] } {
111
+ foreach net [dict keys [sc_cfg_get constraint timing scenario $corner voltage]] {
112
112
  set_pdnsim_net_voltage -corner $corner \
113
113
  -net $net \
114
- -voltage [sc_cfg_get constraint timing $corner voltage $net]
114
+ -voltage [sc_cfg_get constraint timing scenario $corner voltage $net]
115
115
  }
116
116
  }
117
117
  }
@@ -238,10 +238,10 @@ proc sc_design_has_unplaced_macros { } {
238
238
  # Print macros placement
239
239
  ###########################
240
240
 
241
- proc sc_print_macro_information { } {
241
+ proc sc_print_macro_information { { insts [] } } {
242
242
  set print_header "true"
243
243
  foreach inst [[ord::get_db_block] getInsts] {
244
- if { [$inst isBlock] } {
244
+ if { [$inst isBlock] || [lsearch -exact $insts [$inst getName]] != -1 } {
245
245
  set master [$inst getMaster]
246
246
  set status [$inst getPlacementStatus]
247
247
 
@@ -388,17 +388,22 @@ proc sc_psm_check_nets { } {
388
388
  # Save an image
389
389
  ###########################
390
390
 
391
- proc sc_save_image { title path { gif false } { pixels 1000 } } {
391
+ proc sc_save_image { title path { gif -1 } { pixels 1000 } } {
392
392
  utl::info FLW 1 "Saving \"$title\" to $path"
393
393
 
394
394
  save_image -resolution [sc_image_resolution $pixels] \
395
395
  -area [sc_image_area] \
396
396
  $path
397
397
 
398
- if { $gif } {
398
+ if { $gif >= 0 } {
399
+ set gif_args []
400
+ if { [sc_check_version 26866] } {
401
+ lappend gif_args -key $gif
402
+ }
399
403
  save_animated_gif -add \
400
404
  -resolution [sc_image_resolution $pixels] \
401
- -area [sc_image_area]
405
+ -area [sc_image_area] \
406
+ {*}$gif_args
402
407
  }
403
408
  }
404
409
 
@@ -458,6 +463,10 @@ proc sc_image_setup_default { } {
458
463
  gui::set_display_controls "Nets/*" visible true
459
464
  gui::set_display_controls "Instances/*" visible true
460
465
  gui::set_display_controls "Shape Types/*" visible true
466
+ if { [llength [[ord::get_db_block] getBTerms]] > 10000 } {
467
+ # Avoid performance issues with too many IOs
468
+ gui::set_display_controls "Shape Types/Pins" visible false
469
+ }
461
470
  gui::set_display_controls "Misc/Instances/*" visible true
462
471
  gui::set_display_controls "Misc/Instances/Pin Names" visible false
463
472
  gui::set_display_controls "Misc/Scale bar" visible true
@@ -1,4 +1,4 @@
1
- set sc_scenarios [dict keys [sc_cfg_get constraint timing]]
1
+ set sc_scenarios [dict keys [sc_cfg_get constraint timing scenario]]
2
2
  set sc_delaymodel [sc_cfg_get asic delaymodel]
3
3
 
4
4
  # Read Liberty
@@ -7,7 +7,7 @@ define_corners {*}$sc_scenarios
7
7
  foreach corner $sc_scenarios {
8
8
  foreach lib $sc_logiclibs {
9
9
  set lib_filesets []
10
- foreach libcorner [sc_cfg_get constraint timing $corner libcorner] {
10
+ foreach libcorner [sc_cfg_get constraint timing scenario $corner libcorner] {
11
11
  if { [sc_cfg_exists library $lib asic libcornerfileset $libcorner $sc_delaymodel] } {
12
12
  lappend lib_filesets \
13
13
  {*}[sc_cfg_get library $lib asic libcornerfileset $libcorner $sc_delaymodel]
@@ -84,13 +84,16 @@ if { [sc_cfg_tool_task_check_in_list drv_violations var reports] } {
84
84
  }
85
85
 
86
86
  puts "$PREFIX floating nets"
87
- tee -file reports/floating_nets.rpt \
87
+ puts "Reporting floating nets: reports/floating_nets.rpt"
88
+ tee -quiet -file reports/floating_nets.rpt \
88
89
  "report_floating_nets -verbose"
89
90
  if { [sc_check_version 19048] } {
90
91
  puts "$PREFIX overdriven nets"
91
- tee -file reports/overdriven_nets.rpt \
92
+ puts "Reporting overdriven nets: reports/overdriven_nets.rpt"
93
+ tee -quiet -file reports/overdriven_nets.rpt \
92
94
  "report_overdriven_nets -verbose"
93
- tee -file reports/overdriven_nets_with_parallel.rpt \
95
+ puts "Reporting overdriven nets: reports/overdriven_nets_with_parallel.rpt"
96
+ tee -quiet -file reports/overdriven_nets_with_parallel.rpt \
94
97
  "report_overdriven_nets -include_parallel_driven -verbose"
95
98
  }
96
99
 
@@ -5,7 +5,7 @@ sc_image_setup_default
5
5
  sc_save_image \
6
6
  "screenshot" \
7
7
  "outputs/${sc_topmodule}.png" \
8
- false \
8
+ -1 \
9
9
  [sc_cfg_tool_task_get var show_vertical_resolution]
10
10
 
11
11
  gui::restore_display_controls
@@ -1,3 +1,11 @@
1
1
  write_db "outputs/${sc_topmodule}.odb"
2
2
  write_def "outputs/${sc_topmodule}.def"
3
3
  write_verilog -include_pwr_gnd "outputs/${sc_topmodule}.vg"
4
+
5
+ set remove_cells []
6
+ foreach lib [sc_cfg_get asic asiclib] {
7
+ foreach celltype "decap tie filler tap endcap antenna physicalonly" {
8
+ lappend remove_cells {*}[sc_cfg_get library $lib asic cells $celltype]
9
+ }
10
+ }
11
+ write_verilog -remove_cells $remove_cells "outputs/${sc_topmodule}.lec.vg"
@@ -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 { gif false } { allow_bin_adjust 1 } } {
3
+ proc sc_image_heatmap { name ident image_name title { gif -1 } { allow_bin_adjust 1 } } {
4
4
  lassign [sc_cfg_tool_task_get var ord_heatmap_bins] ord_heatmap_bins_x ord_heatmap_bins_y
5
5
 
6
6
  file mkdir reports/images/heatmap
@@ -124,12 +124,12 @@ proc sc_image_irdrop { net corner } {
124
124
  return
125
125
  }
126
126
 
127
- set gif false
127
+ set gif -1
128
128
  if { [sc_check_version 21574] } {
129
- set gif true
130
- }
131
- if { $gif } {
132
- save_animated_gif -start "reports/images/heatmap/irdrop/${net}.${corner}.gif"
129
+ set gif [save_animated_gif -start "reports/images/heatmap/irdrop/${net}.${corner}.gif"]
130
+ if { $gif == "" } {
131
+ set gif 0
132
+ }
133
133
  }
134
134
  foreach layer [[ord::get_db_tech] getLayers] {
135
135
  if { [$layer getRoutingLevel] == 0 } {
@@ -160,8 +160,12 @@ proc sc_image_irdrop { net corner } {
160
160
  gui::delete_label $label
161
161
  }
162
162
  }
163
- if { $gif } {
164
- save_animated_gif -end
163
+ if { $gif >= 0 } {
164
+ if { [sc_check_version 26866] } {
165
+ save_animated_gif -end -key $gif
166
+ } else {
167
+ save_animated_gif -end
168
+ }
165
169
  }
166
170
  }
167
171
 
@@ -176,7 +180,7 @@ proc sc_image_routing_congestion { } {
176
180
  "Routing" \
177
181
  "routing_congestion.png" \
178
182
  "routing congestion" \
179
- 0 \
183
+ -1 \
180
184
  0
181
185
  }
182
186
 
@@ -194,7 +198,7 @@ proc sc_image_estimated_routing_congestion { } {
194
198
  "RUDY" \
195
199
  "estimated_routing_congestion.png" \
196
200
  "estimated routing congestion" \
197
- 0 \
201
+ -1 \
198
202
  0
199
203
  } err
200
204
  unsuppress_message GRT 10
@@ -342,7 +346,7 @@ proc sc_image_timing_histograms { } {
342
346
 
343
347
  if { [sc_cfg_tool_task_check_in_list setup var reports] } {
344
348
  set path reports/images/timing/setup.histogram.png
345
- utl::info FLW 1 "Saving setup timing histogram to $path"
349
+ utl::info FLW 1 "Saving \"setup timing histogram\" to $path"
346
350
  save_histogram_image $path \
347
351
  -mode setup \
348
352
  -width 500 \
@@ -350,7 +354,7 @@ proc sc_image_timing_histograms { } {
350
354
  }
351
355
  if { [sc_cfg_tool_task_check_in_list hold var reports] } {
352
356
  set path reports/images/timing/hold.histogram.png
353
- utl::info FLW 1 "Saving hold timing histogram to $path"
357
+ utl::info FLW 1 "Saving \"hold timing histogram\" to $path"
354
358
  save_histogram_image $path \
355
359
  -mode hold \
356
360
  -width 500 \
@@ -149,5 +149,7 @@ utl::pop_metrics_stage
149
149
  ###############################
150
150
 
151
151
  utl::push_metrics_stage "sc__write__{}"
152
- source "$sc_refdir/common/write_data_physical.tcl"
152
+ write_db "outputs/${sc_topmodule}.odb"
153
+ write_def "outputs/${sc_topmodule}.def"
154
+ write_verilog -include_pwr_gnd "outputs/${sc_topmodule}.vg"
153
155
  utl::pop_metrics_stage
@@ -74,10 +74,10 @@ class WriteViewsTask(APRTask, OpenROADSTAParameter, OpenROADPSMParameter):
74
74
  for corner in self.get("var", "pex_corners"):
75
75
  self.add_output_file(ext=f"{corner}.spef")
76
76
  if self.get("var", "write_liberty"):
77
- for corner in self.project.getkeys("constraint", "timing"):
77
+ for corner in self.project.getkeys("constraint", "timing", "scenario"):
78
78
  self.add_output_file(ext=f"{corner}.lib")
79
79
  if self.get("var", "write_sdf"):
80
- for corner in self.project.getkeys("constraint", "timing"):
80
+ for corner in self.project.getkeys("constraint", "timing", "scenario"):
81
81
  self.add_output_file(ext=f"{corner}.sdf")
82
82
 
83
83
  self.add_required_key("var", "ord_abstract_lef_bloat_layers")
@@ -22,7 +22,7 @@ set sc_design [sc_top]
22
22
  # APR Parameters
23
23
  set sc_targetlibs [sc_get_asic_libraries logic]
24
24
  set sc_delaymodel [sc_cfg_get asic delaymodel]
25
- set sc_scenarios [dict keys [sc_cfg_get constraint timing]]
25
+ set sc_scenarios [dict keys [sc_cfg_get constraint timing scenario]]
26
26
 
27
27
  ###############################
28
28
  # Optional
@@ -41,7 +41,7 @@ define_corners {*}$sc_scenarios
41
41
  foreach lib "$sc_targetlibs $sc_macrolibs" {
42
42
  #Liberty
43
43
  foreach corner $sc_scenarios {
44
- foreach libcorner [sc_cfg_get constraint timing $corner libcorner] {
44
+ foreach libcorner [sc_cfg_get constraint timing scenario $corner libcorner] {
45
45
  if { [sc_cfg_exists library $lib output $libcorner $sc_delaymodel] } {
46
46
  foreach lib_file [sc_cfg_get library $lib output $libcorner $sc_delaymodel] {
47
47
  puts "Reading liberty file for ${corner} ($libcorner): ${lib_file}"
@@ -22,7 +22,7 @@ set sc_design [sc_top]
22
22
  # APR Parameters
23
23
  set sc_targetlibs [sc_get_asic_libraries logic]
24
24
  set sc_delaymodel [sc_cfg_get asic delaymodel]
25
- set sc_scenarios [dict keys [sc_cfg_get constraint timing]]
25
+ set sc_scenarios [dict keys [sc_cfg_get constraint timing scenario]]
26
26
 
27
27
  ###############################
28
28
  # Optional
@@ -41,7 +41,7 @@ define_corners {*}$sc_scenarios
41
41
  foreach lib "$sc_targetlibs $sc_macrolibs" {
42
42
  #Liberty
43
43
  foreach corner $sc_scenarios {
44
- foreach libcorner [sc_cfg_get constraint timing $corner libcorner] {
44
+ foreach libcorner [sc_cfg_get constraint timing scenario $corner libcorner] {
45
45
  if { [sc_cfg_exists library $lib output $libcorner $sc_delaymodel] } {
46
46
  foreach lib_file [sc_cfg_get library $lib output $libcorner $sc_delaymodel] {
47
47
  puts "Reading liberty file for ${corner} ($libcorner): ${lib_file}"
@@ -23,10 +23,10 @@ if { $opensta_timing_mode == "asic" } {
23
23
  set sc_logiclibs [sc_cfg_get asic asiclib]
24
24
  set sc_delaymodel [sc_cfg_get asic delaymodel]
25
25
 
26
- foreach corner [dict keys [sc_cfg_get constraint timing]] {
26
+ foreach corner [dict keys [sc_cfg_get constraint timing scenario]] {
27
27
  if {
28
28
  $sc_timing_mode == {} ||
29
- [sc_cfg_get constraint timing $corner mode] == $sc_timing_mode
29
+ [sc_cfg_get constraint timing scenario $corner mode] == $sc_timing_mode
30
30
  } {
31
31
  lappend sc_scenarios $corner
32
32
  }
@@ -56,7 +56,7 @@ if { $opensta_timing_mode == "asic" } {
56
56
  foreach corner $sc_scenarios {
57
57
  foreach lib $sc_logiclibs {
58
58
  set lib_filesets []
59
- foreach libcorner [sc_cfg_get constraint timing $corner libcorner] {
59
+ foreach libcorner [sc_cfg_get constraint timing scenario $corner libcorner] {
60
60
  if {
61
61
  [sc_cfg_exists library $lib asic \
62
62
  libcornerfileset $libcorner $sc_delaymodel]
@@ -115,15 +115,13 @@ if { [file exists "inputs/${sc_topmodule}.sdc"] } {
115
115
  }
116
116
 
117
117
  if { $sc_timing_mode != {} } {
118
- foreach corner $sc_scenarios {
119
- set sdcfileset [sc_cfg_get constraint timing $corner sdcfileset]
120
- foreach sdc [sc_cfg_get_fileset $sc_topmodulelib $sdcfileset sdc] {
121
- if { [lsearch -exact $sdc_files $sdc] == -1 } {
122
- # read step constraint if exists
123
- puts "Reading mode (${sc_timing_mode}) SDC: ${sdc}"
124
- lappend sdc_files $sdc
125
- read_sdc $sdc
126
- }
118
+ set sdcfileset [sc_cfg_get constraint timing mode $sc_timing_mode sdcfileset]
119
+ foreach sdc [sc_cfg_get_fileset $sc_topmodulelib $sdcfileset sdc] {
120
+ if { [lsearch -exact $sdc_files $sdc] == -1 } {
121
+ # read step constraint if exists
122
+ puts "Reading mode (${sc_timing_mode}) SDC: ${sdc}"
123
+ lappend sdc_files $sdc
124
+ read_sdc $sdc
127
125
  }
128
126
  }
129
127
  }
@@ -168,7 +166,7 @@ puts "Timing path groups: [sta::path_group_names]"
168
166
 
169
167
  if { $opensta_timing_mode == "asic" } {
170
168
  foreach corner $sc_scenarios {
171
- set pex_corner [sc_cfg_get constraint timing $corner pexcorner]
169
+ set pex_corner [sc_cfg_get constraint timing scenario $corner pexcorner]
172
170
 
173
171
  set spef_file "inputs/${sc_topmodule}.${pex_corner}.spef"
174
172
  if { [file exists $spef_file] } {
@@ -178,7 +176,7 @@ if { $opensta_timing_mode == "asic" } {
178
176
  }
179
177
 
180
178
  foreach corner $sc_scenarios {
181
- set pex_corner [sc_cfg_get constraint timing $corner pexcorner]
179
+ set pex_corner [sc_cfg_get constraint timing scenario $corner pexcorner]
182
180
 
183
181
  set input_sdf_file "inputs/${sc_topmodule}.${pex_corner}.sdf"
184
182
  if { [file exists $input_sdf_file] } {
@@ -2,6 +2,8 @@ import re
2
2
 
3
3
  import os.path
4
4
 
5
+ from typing import Optional
6
+
5
7
  from siliconcompiler import sc_open
6
8
 
7
9
  from siliconcompiler.tools.opensta import OpenSTATask
@@ -27,7 +29,7 @@ class TimingTaskBase(OpenSTATask):
27
29
  defvalue="tools/_common/sdc/sc_constraints.sdc",
28
30
  dataroot="siliconcompiler")
29
31
 
30
- def set_timing_mode(self, mode: str, step: str = None, index: str = None):
32
+ def set_timing_mode(self, mode: str, step: Optional[str] = None, index: Optional[str] = None):
31
33
  return self.set("var", "timing_mode", mode, step=step, index=index)
32
34
 
33
35
  def setup(self):
@@ -40,6 +42,8 @@ class TimingTaskBase(OpenSTATask):
40
42
 
41
43
  if self.get("var", "timing_mode"):
42
44
  self.add_required_key("var", "timing_mode")
45
+ if self.get("var", "timing_mode") not in self.project.constraint.timing.get_modes():
46
+ raise LookupError(f'{self.get("var", "timing_mode")} is not a defined mode')
43
47
  self.add_required_key("var", "top_n_paths")
44
48
  self.add_required_key("var", "unique_path_groups_per_clock")
45
49
  self.add_required_key("var", "opensta_generic_sdc")
@@ -149,7 +153,7 @@ class TimingTaskBase(OpenSTATask):
149
153
  self.record_metric("drvs", drv_count, source_file=[drv_report])
150
154
 
151
155
  def __report_map(self, metric):
152
- corners = self.project.getkeys('constraint', 'timing')
156
+ corners = self.project.getkeys('constraint', 'timing', 'scenario')
153
157
  mapping = {
154
158
  "power": [f"reports/power.{corner}.rpt" for corner in corners],
155
159
  "unconstrained": ["reports/unconstrained.rpt", "reports/unconstrained.topN.rpt"],
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "openroad": {
3
3
  "git-url": "https://github.com/The-OpenROAD-Project/OpenROAD.git",
4
- "git-commit": "dd56d50c413ecd215117898437c57bec68b59a87",
4
+ "git-commit": "52d1fc05168f094b574222330fc7968589eabfb4",
5
5
  "docker-cmds": [
6
6
  "# Remove OR-Tools files",
7
7
  "RUN rm -f $SC_PREFIX/Makefile $SC_PREFIX/README.md",
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "opensta": {
19
19
  "git-url": "https://github.com/parallaxsw/OpenSTA.git",
20
- "git-commit": "bd3efdc322c0677eb8e3d76f22ab297f7a6048b9",
20
+ "git-commit": "4afa443892bcba34f7c6a54b8e58ae2920dec9b5",
21
21
  "auto-update": true
22
22
  },
23
23
  "netgen": {
@@ -145,7 +145,7 @@
145
145
  },
146
146
  "yosys-slang": {
147
147
  "git-url": "https://github.com/povik/yosys-slang.git",
148
- "git-commit": "875539b8cae5a2ac7c86fee43b1e38a743ee8659",
148
+ "git-commit": "64b44616a3798f07453b14ea03e4ac8a16b77313",
149
149
  "docker-depends": "yosys",
150
150
  "auto-update": true
151
151
  },
@@ -163,7 +163,12 @@
163
163
  },
164
164
  "surfer": {
165
165
  "git-url": "https://gitlab.com/surfer-project/surfer.git",
166
- "git-commit": "v0.3.0",
166
+ "git-commit": "v0.5.0",
167
+ "auto-update": true
168
+ },
169
+ "keplerformal": {
170
+ "git-url": "https://github.com/keplertech/kepler-formal.git",
171
+ "git-commit": "ea6b0ce62f6f8fd2327e79913a07c74a3210551d",
167
172
  "auto-update": false
168
173
  }
169
174
  }
@@ -0,0 +1,72 @@
1
+ #!/bin/bash
2
+
3
+ set -ex
4
+
5
+ # Get directory of script
6
+ src_path=$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)/..
7
+
8
+ USE_SUDO_INSTALL="${USE_SUDO_INSTALL:-yes}"
9
+ if [ "${USE_SUDO_INSTALL:-yes}" = "yes" ]; then
10
+ SUDO_INSTALL=sudo
11
+ else
12
+ SUDO_INSTALL=""
13
+ fi
14
+
15
+ sudo apt-get update
16
+
17
+ sudo apt-get install -y build-essential libfl-dev
18
+
19
+ # From: https://github.com/keplertech/kepler-formal/blob/ea6b0ce62f6f8fd2327e79913a07c74a3210551d/README.md
20
+ sudo apt-get install -y g++ libboost-dev python3-dev capnproto libcapnp-dev libtbb-dev \
21
+ pkg-config bison flex doxygen libspdlog-dev libfmt-dev libboost-iostreams-dev zlib1g-dev
22
+
23
+ sudo apt-get install -y git
24
+
25
+ mkdir -p deps
26
+ cd deps
27
+
28
+ python3 -m venv .keplerformal --clear
29
+ . .keplerformal/bin/activate
30
+ python3 -m pip install cmake==3.31.6
31
+
32
+ git clone $(python3 ${src_path}/_tools.py --tool keplerformal --field git-url) keplerformal
33
+ cd keplerformal
34
+ git checkout $(python3 ${src_path}/_tools.py --tool keplerformal --field git-commit)
35
+ git submodule update --init --recursive
36
+
37
+ git apply - <<EOF
38
+ diff --git a/CMakeLists.txt b/CMakeLists.txt
39
+ index 65d0d04..a67d38f 100644
40
+ --- a/CMakeLists.txt
41
+ +++ b/CMakeLists.txt
42
+ @@ -26,9 +26,9 @@ add_subdirectory(thirdparty)
43
+
44
+ # option(ENABLE_UNIT_TESTS ON)
45
+ # if(ENABLE_UNIT_TESTS)
46
+ -include(CTest)
47
+ -enable_testing()
48
+ -add_subdirectory(test)
49
+ +# include(CTest)
50
+ +# enable_testing()
51
+ +# add_subdirectory(test)
52
+ # endif()
53
+
54
+ option(CODE_COVERAGE "Enable coverage reporting" OFF)
55
+ EOF
56
+
57
+ cmake_args=""
58
+ if [ ! -z ${PREFIX} ]; then
59
+ cmake_args="-DCMAKE_INSTALL_PREFIX=$PREFIX"
60
+ fi
61
+
62
+ mkdir -p build
63
+ cd build
64
+ cmake .. -DCMAKE_BUILD_TYPE=Release \
65
+ -DCMAKE_CXX_FLAGS_RELEASE="-Ofast -march=native -ffast-math -flto" \
66
+ -DCMAKE_EXE_LINKER_FLAGS="-flto" \
67
+ -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE \
68
+ $cmake_args
69
+ make -j$(nproc)
70
+ $SUDO_INSTALL make install
71
+
72
+ cd -
@@ -0,0 +1,72 @@
1
+ #!/bin/bash
2
+
3
+ set -ex
4
+
5
+ # Get directory of script
6
+ src_path=$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)/..
7
+
8
+ USE_SUDO_INSTALL="${USE_SUDO_INSTALL:-yes}"
9
+ if [ "${USE_SUDO_INSTALL:-yes}" = "yes" ]; then
10
+ SUDO_INSTALL=sudo
11
+ else
12
+ SUDO_INSTALL=""
13
+ fi
14
+
15
+ sudo apt-get update
16
+
17
+ sudo apt-get install -y build-essential libfl-dev
18
+
19
+ # From: https://github.com/keplertech/kepler-formal/blob/ea6b0ce62f6f8fd2327e79913a07c74a3210551d/README.md
20
+ sudo apt-get install -y g++ libboost-dev python3-dev capnproto libcapnp-dev libtbb-dev \
21
+ pkg-config bison flex doxygen libspdlog-dev libfmt-dev libboost-iostreams-dev zlib1g-dev
22
+
23
+ sudo apt-get install -y git
24
+
25
+ mkdir -p deps
26
+ cd deps
27
+
28
+ python3 -m venv .keplerformal --clear
29
+ . .keplerformal/bin/activate
30
+ python3 -m pip install cmake==3.31.6
31
+
32
+ git clone $(python3 ${src_path}/_tools.py --tool keplerformal --field git-url) keplerformal
33
+ cd keplerformal
34
+ git checkout $(python3 ${src_path}/_tools.py --tool keplerformal --field git-commit)
35
+ git submodule update --init --recursive
36
+
37
+ git apply - <<EOF
38
+ diff --git a/CMakeLists.txt b/CMakeLists.txt
39
+ index 65d0d04..a67d38f 100644
40
+ --- a/CMakeLists.txt
41
+ +++ b/CMakeLists.txt
42
+ @@ -26,9 +26,9 @@ add_subdirectory(thirdparty)
43
+
44
+ # option(ENABLE_UNIT_TESTS ON)
45
+ # if(ENABLE_UNIT_TESTS)
46
+ -include(CTest)
47
+ -enable_testing()
48
+ -add_subdirectory(test)
49
+ +# include(CTest)
50
+ +# enable_testing()
51
+ +# add_subdirectory(test)
52
+ # endif()
53
+
54
+ option(CODE_COVERAGE "Enable coverage reporting" OFF)
55
+ EOF
56
+
57
+ cmake_args=""
58
+ if [ ! -z ${PREFIX} ]; then
59
+ cmake_args="-DCMAKE_INSTALL_PREFIX=$PREFIX"
60
+ fi
61
+
62
+ mkdir -p build
63
+ cd build
64
+ cmake .. -DCMAKE_BUILD_TYPE=Release \
65
+ -DCMAKE_CXX_FLAGS_RELEASE="-Ofast -march=native -ffast-math -flto" \
66
+ -DCMAKE_EXE_LINKER_FLAGS="-flto" \
67
+ -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE \
68
+ $cmake_args
69
+ make -j$(nproc)
70
+ $SUDO_INSTALL make install
71
+
72
+ cd -
@@ -145,6 +145,7 @@ class MPManager(metaclass=_ManagerSingleton):
145
145
 
146
146
  # Settings
147
147
  self.__settings = SettingsManager(default_sc_path("settings.json"), self.__logger)
148
+ self.__transient_settings = SettingsManager(None, self.__logger)
148
149
 
149
150
  # Register cleanup function to run at exit
150
151
  atexit.register(MPManager.stop)
@@ -272,6 +273,16 @@ class MPManager(metaclass=_ManagerSingleton):
272
273
  """
273
274
  return MPManager().__settings
274
275
 
276
+ @staticmethod
277
+ def get_transient_settings() -> SettingsManager:
278
+ """
279
+ Provides access to the shared transient SettingsManager instance.
280
+
281
+ Returns:
282
+ SettingsManager: The singleton transient settings instance.
283
+ """
284
+ return MPManager().__transient_settings
285
+
275
286
  @staticmethod
276
287
  def get_dashboard() -> Board:
277
288
  """