From fa70c6cf2b50a8fb247a768ec246f295f2da009e Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sat, 12 Jul 2025 17:26:09 -0700 Subject: [PATCH] read_spef incremental rm min/max reduced parasitics Signed-off-by: James Cherry --- liberty/Liberty.tcl | 2 ++ parasitics/ConcreteParasitics.cc | 16 +++++++++++++++- parasitics/ConcreteParasitics.hh | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/liberty/Liberty.tcl b/liberty/Liberty.tcl index 0103d3f5..d4ac84a1 100644 --- a/liberty/Liberty.tcl +++ b/liberty/Liberty.tcl @@ -65,6 +65,8 @@ proc_redirect report_lib_cell { } proc report_lib_cell_ { cell corner } { + global sta_report_default_digits + set lib [$cell liberty_library] report_line "Cell [get_name $cell]" report_line "Library [get_name $lib]" diff --git a/parasitics/ConcreteParasitics.cc b/parasitics/ConcreteParasitics.cc index 0d71d4ec..f36a5470 100644 --- a/parasitics/ConcreteParasitics.cc +++ b/parasitics/ConcreteParasitics.cc @@ -820,6 +820,20 @@ ConcreteParasitics::deleteParasitics(const Pin *drvr_pin, } } +void +ConcreteParasitics::deleteParasitics(const Pin *drvr_pin) +{ + ConcreteParasitic **parasitics = drvr_parasitic_map_[drvr_pin]; + if (parasitics) { + int ap_count = corners_->parasiticAnalysisPtCount(); + int ap_rf_count = ap_count * RiseFall::index_count; + for (int i = 0; i < ap_rf_count; i++) { + delete parasitics[i]; + parasitics[i] = nullptr; + } + } +} + void ConcreteParasitics::deleteParasitics(const Net *net, const ParasiticAnalysisPt *ap) @@ -1244,7 +1258,7 @@ ConcreteParasitics::makeParasiticNetwork(const Net *net, delete parasitic; if (net) { for (const Pin *drvr_pin : *network_->drivers(net)) - deleteParasitics(drvr_pin, ap); + deleteParasitics(drvr_pin); } } parasitic = new ConcreteParasiticNetwork(net, includes_pin_caps, network_); diff --git a/parasitics/ConcreteParasitics.hh b/parasitics/ConcreteParasitics.hh index 0c0b91af..ae0f9bc9 100644 --- a/parasitics/ConcreteParasitics.hh +++ b/parasitics/ConcreteParasitics.hh @@ -53,6 +53,7 @@ public: const ParasiticAnalysisPt *ap) override; void deleteParasitics(const Pin *drvr_pin, const ParasiticAnalysisPt *ap) override; + void deleteParasitics(const Pin *drvr_pin); bool isReducedParasiticNetwork(const Parasitic *parasitic) const override; void setIsReducedParasiticNetwork(Parasitic *parasitic,