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.
- siliconcompiler/_metadata.py +1 -1
- siliconcompiler/constraints/__init__.py +4 -1
- siliconcompiler/constraints/asic_timing.py +230 -38
- siliconcompiler/constraints/fpga_timing.py +209 -14
- siliconcompiler/constraints/timing_mode.py +82 -0
- siliconcompiler/data/templates/tcl/manifest.tcl.j2 +0 -6
- siliconcompiler/flowgraph.py +95 -42
- siliconcompiler/flows/generate_openroad_rcx.py +2 -2
- siliconcompiler/flows/highresscreenshotflow.py +37 -0
- siliconcompiler/library.py +2 -1
- siliconcompiler/package/__init__.py +39 -45
- siliconcompiler/project.py +4 -1
- siliconcompiler/scheduler/scheduler.py +64 -35
- siliconcompiler/scheduler/schedulernode.py +5 -2
- siliconcompiler/scheduler/slurm.py +7 -6
- siliconcompiler/scheduler/taskscheduler.py +19 -16
- siliconcompiler/schema/_metadata.py +1 -1
- siliconcompiler/schema/namedschema.py +2 -4
- siliconcompiler/schema_support/cmdlineschema.py +0 -3
- siliconcompiler/schema_support/dependencyschema.py +0 -6
- siliconcompiler/schema_support/record.py +4 -3
- siliconcompiler/tool.py +58 -27
- siliconcompiler/tools/_common/tcl/sc_schema_access.tcl +0 -6
- siliconcompiler/tools/keplerformal/__init__.py +7 -0
- siliconcompiler/tools/keplerformal/lec.py +112 -0
- siliconcompiler/tools/klayout/screenshot.py +66 -1
- siliconcompiler/tools/klayout/scripts/klayout_export.py +10 -40
- siliconcompiler/tools/klayout/scripts/klayout_show.py +4 -4
- siliconcompiler/tools/klayout/scripts/klayout_utils.py +13 -1
- siliconcompiler/tools/montage/tile.py +26 -12
- siliconcompiler/tools/openroad/_apr.py +26 -10
- siliconcompiler/tools/openroad/init_floorplan.py +5 -2
- siliconcompiler/tools/openroad/power_grid_analysis.py +1 -1
- siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +49 -14
- siliconcompiler/tools/openroad/scripts/apr/sc_irdrop.tcl +6 -4
- siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +4 -4
- siliconcompiler/tools/openroad/scripts/common/procs.tcl +14 -5
- siliconcompiler/tools/openroad/scripts/common/read_liberty.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/common/reports.tcl +6 -3
- siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/common/write_data_physical.tcl +8 -0
- siliconcompiler/tools/openroad/scripts/common/write_images.tcl +16 -12
- siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +3 -1
- siliconcompiler/tools/openroad/write_data.py +2 -2
- siliconcompiler/tools/opensta/scripts/sc_check_library.tcl +2 -2
- siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl +2 -2
- siliconcompiler/tools/opensta/scripts/sc_timing.tcl +12 -14
- siliconcompiler/tools/opensta/timing.py +6 -2
- siliconcompiler/toolscripts/_tools.json +9 -4
- siliconcompiler/toolscripts/ubuntu22/install-keplerformal.sh +72 -0
- siliconcompiler/toolscripts/ubuntu24/install-keplerformal.sh +72 -0
- siliconcompiler/utils/multiprocessing.py +11 -0
- siliconcompiler/utils/settings.py +70 -49
- {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.0.dist-info}/METADATA +3 -3
- {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.0.dist-info}/RECORD +59 -53
- {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.0.dist-info}/WHEEL +0 -0
- {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.0.dist-info}/entry_points.txt +0 -0
- {siliconcompiler-0.35.4.dist-info → siliconcompiler-0.36.0.dist-info}/licenses/LICENSE +0 -0
- {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
|
|
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
|
-
|
|
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
|
-
|
|
92
|
+
puts "Reporting overdriven nets: reports/overdriven_nets.rpt"
|
|
93
|
+
tee -quiet -file reports/overdriven_nets.rpt \
|
|
92
94
|
"report_overdriven_nets -verbose"
|
|
93
|
-
|
|
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
|
|
|
@@ -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
|
|
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
|
|
127
|
+
set gif -1
|
|
128
128
|
if { [sc_check_version 21574] } {
|
|
129
|
-
set gif
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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.
|
|
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
|
"""
|