From f953347c3941c28ae2c87198437631a2b9ebc5ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Povi=C5=A1er?= Date: Wed, 11 Mar 2026 14:37:40 +0100 Subject: [PATCH] Add final check all drivers have parasitic annotation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin PoviĊĦer --- flow/scripts/final_report.tcl | 3 +++ flow/scripts/util.tcl | 31 +++++++++++++++++++++++++++++++ tools/OpenROAD | 2 +- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/flow/scripts/final_report.tcl b/flow/scripts/final_report.tcl index 928e92bf2b..2567aa1433 100644 --- a/flow/scripts/final_report.tcl +++ b/flow/scripts/final_report.tcl @@ -53,6 +53,9 @@ if { } else { puts "IR drop analysis for ground nets is skipped because GND_NETS_VOLTAGES is undefined" } + + # Check all drivers have parasitic annotation with exception of those with no connected loads + check_parasitic_annotation } else { puts "OpenRCX is not enabled for this platform." puts "Falling back to global route-based estimates." diff --git a/flow/scripts/util.tcl b/flow/scripts/util.tcl index af92dbe0c2..53a0148e45 100644 --- a/flow/scripts/util.tcl +++ b/flow/scripts/util.tcl @@ -290,3 +290,34 @@ proc orfs_write_sdc { output_file } { } log_cmd write_sdc -no_timestamp $output_file } + +proc check_parasitic_annotation { } { + foreach scene [sta::scenes] { + set nmissing 0 + set example "NULL" + foreach pin [get_pins *] { + if { [$pin is_leaf] && [$pin is_driver] } { + if { ![sta::parasitics_annotated $pin $scene] } { + set has_loads false + set pin_iter [$pin connected_pin_iterator] + while { [$pin_iter has_next] } { + set other_pin [$pin_iter next] + if { [$other_pin is_leaf] && [$other_pin is_load] && $other_pin != $pin } { + set has_loads true + break + } + } + $pin_iter finish + if { $has_loads } { + set nmissing [expr $nmissing + 1] + set example $pin + } + } + } + } + if { $nmissing > 0 } { + error "Missing parasitic annotation in scene $scene on $nmissing \ + driver pins, for example [get_full_name $example]" + } + } +} diff --git a/tools/OpenROAD b/tools/OpenROAD index fe1aa0f9d0..6718108ced 160000 --- a/tools/OpenROAD +++ b/tools/OpenROAD @@ -1 +1 @@ -Subproject commit fe1aa0f9d0254fac87b82c886c04ee1544e46885 +Subproject commit 6718108ced511e3aa5057ac7a52c95c299f3abe4