From d38cf772d91206770ac8f7bae272d067ceb201f2 Mon Sep 17 00:00:00 2001 From: Shivaram Mysore Date: Fri, 7 Aug 2026 11:41:53 -0700 Subject: [PATCH] psm: report the average IR drop under the drop__average metric design_powergrid__drop__average carried results.avg_voltage, so on a power net it reported the supply voltage rather than the drop. avg_ir_drop was already computed and used in the text report, but never reached the metric. The mistake was invisible on a ground net, where net_voltage is 0 and getSolution() sets avg_ir_drop = avg_voltage, so half of every run looked correct. On a 1.8 V power net the metric read 1.79999 where the average drop was 6.41e-06. Also adds design_powergrid__voltage__average, so the value that metric used to carry is still available and is named for what it is, alongside the existing design_powergrid__voltage__worst. Fixes #11096 Signed-off-by: Shivaram Mysore --- src/psm/src/ir_solver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/psm/src/ir_solver.cpp b/src/psm/src/ir_solver.cpp index 073bab66b59..c9f034d438f 100644 --- a/src/psm/src/ir_solver.cpp +++ b/src/psm/src/ir_solver.cpp @@ -1455,8 +1455,10 @@ void IRSolver::report(sta::Scene* corner) const logger_->metric(getMetricKey("design_powergrid__voltage__worst", corner), results.worst_voltage); - logger_->metric(getMetricKey("design_powergrid__drop__average", corner), + logger_->metric(getMetricKey("design_powergrid__voltage__average", corner), results.avg_voltage); + logger_->metric(getMetricKey("design_powergrid__drop__average", corner), + results.avg_ir_drop); logger_->metric(getMetricKey("design_powergrid__drop__worst", corner), results.worst_ir_drop); }