Skip to content

Commit

Permalink
make: gui_ prerendering
Browse files Browse the repository at this point in the history
less click and wait when the GUI opens for large designs

clock tree prerendering is still missing, because there is
no way yet to disable the clock tree rendering from .tcl after
the clock tree has been rendered.

Some progress added so that the user can tell what it is
that is taking time. Also added a final gui::unminimize
log item so the user knows when the GUI should have
unminimized(which it doesn't on Ubuntu 24.04 with Wayland
yet, known issue filed).

make gui_route
[deleted]
estimate_parasitics -global_routing
Populating timing paths...OK
Prerendering Placement heatmap...
Prerendering Routing heatmap...
Prerendering RUDY heatmap...
Prerendering Power heatmap...
gui::select_chart "Endpoint Slack"
gui::update_timing_report
gui::unminimize

The-OpenROAD-Project/OpenROAD#6074

Signed-off-by: Øyvind Harboe <[email protected]>
  • Loading branch information
oharboe committed Dec 6, 2024
1 parent 4e29c44 commit 0e63d2b
Showing 1 changed file with 63 additions and 1 deletion.
64 changes: 63 additions & 1 deletion flow/scripts/open.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,74 @@ proc read_timing {input_file} {
if {[env_var_equals GUI_TIMING 1]} {
puts "GUI_TIMING=1 reading timing, takes a little while for large designs..."
read_timing $input_file

gui::save_display_controls

set height [[[ord::get_db_block] getBBox] getDY]
set height [ord::dbu_to_microns $height]
set resolution [expr $height / 1000]

# FIXME reenable when there is a way to disable the rendered clock tree
#
# foreach clock [get_clocks *] {
# if { [llength [get_property $clock sources]] > 0 } {
# set clock_name [get_name $clock]
# save_clocktree_image -clock $clock_name \
# -width 100 -height 100 \
# $::env(OBJECTS_DIR)/dummy.png
# break
# }
# }

# FIXME IRDrop heatmap should be added, but it has to be skipped
# when there is no IRDrop heatmap to be rendered.

set block [ord::get_db_block]
set insts [$block getInsts]
set placed 1
foreach inst $insts {
set status [$inst getPlacementStatus]
# status is not in the list of PLACED, LOCKED
if {[lsearch {PLACED LOCKED} $status] == -1} {
set placed 0
break
}
}

set have_routes [expr {$placed && [grt::have_routes]}]

foreach heatmap {Placement Routing RUDY Power} {
if {[string equal $heatmap Routing] && !$have_routes} {
# Skipping $heatmap heatmap, no routes available
continue
}
if {[string equal $heatmap IRDrop] &&
(![env_var_exists_and_non_empty PWR_NETS_VOLTAGES] ||
![grt::have_routes])} {
# Skipping $heatmap heatmap, no PWR_NETS_VOLTAGES available
continue
}
if {[lsearch {RUDY Placement} $heatmap] != -1 && !$placed} {
# Skipping $heatmap heatmap, not all instances are placed
continue
}
puts "Prerendering $heatmap heatmap..."
gui::set_heatmap $heatmap rebuild 1
gui::dump_heatmap $heatmap $::env(REPORTS_DIR)/dummy.png
}

log_cmd gui::select_chart "Endpoint Slack"
log_cmd gui::update_timing_report

gui::clear_highlights -1
gui::clear_selections
gui::restore_display_controls
}

fast_route

if {[env_var_equals GUI_SHOW 1]} {
# Show the GUI when it is ready; it is unresponsive(with modal requesters
# saying it is unresponsive) until everything is loaded
gui::unminimize
log_cmd gui::unminimize
}

0 comments on commit 0e63d2b

Please sign in to comment.