Skip to content

Commit 4b4bd5f

Browse files
committed
Add final check all drivers have parasitic annotation
Signed-off-by: Martin Povišer <povik@cutebit.org>
1 parent f6d585e commit 4b4bd5f

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

flow/scripts/final_report.tcl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ if {
5353
} else {
5454
puts "IR drop analysis for ground nets is skipped because GND_NETS_VOLTAGES is undefined"
5555
}
56+
57+
# Check all drivers have parasitic annotation with exception of those with no connected loads
58+
check_parasitic_annotation
5659
} else {
5760
puts "OpenRCX is not enabled for this platform."
5861
puts "Falling back to global route-based estimates."

flow/scripts/util.tcl

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,3 +290,34 @@ proc orfs_write_sdc { output_file } {
290290
}
291291
log_cmd write_sdc -no_timestamp $output_file
292292
}
293+
294+
proc check_parasitic_annotation { } {
295+
foreach scene [sta::scenes] {
296+
set nmissing 0
297+
set example "NULL"
298+
foreach pin [get_pins *] {
299+
if { [$pin is_leaf] && [$pin is_driver] } {
300+
if { ![sta::parasitics_annotated $pin $scene] } {
301+
set has_loads false
302+
set pin_iter [$pin connected_pin_iterator]
303+
while { [$pin_iter has_next] } {
304+
set other_pin [$pin_iter next]
305+
if { [$other_pin is_leaf] && [$other_pin is_load] && $other_pin != $pin } {
306+
set has_loads true
307+
break
308+
}
309+
}
310+
$pin_iter finish
311+
if { $has_loads } {
312+
set nmissing [expr $nmissing + 1]
313+
set example $pin
314+
}
315+
}
316+
}
317+
}
318+
if { $nmissing > 0 } {
319+
error "Missing parasitic annotation in scene $scene on $nmissing \
320+
driver pins, for example [get_full_name $example]"
321+
}
322+
}
323+
}

tools/OpenROAD

0 commit comments

Comments
 (0)