From e0c4799a56ac9f405233cc0b8816b1e987b434b5 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Mon, 30 Nov 2020 19:25:27 -0700 Subject: [PATCH] ArcDelayCalc::reducedParasiticType() --- dcalc/ArnoldiDelayCalc.cc | 7 +++++++ dcalc/DmpDelayCalc.cc | 7 +++++++ dcalc/LumpedCapDelayCalc.cc | 6 ++++++ dcalc/LumpedCapDelayCalc.hh | 1 + dcalc/UnitDelayCalc.cc | 6 ++++++ dcalc/UnitDelayCalc.hh | 1 + include/sta/ArcDelayCalc.hh | 3 ++- include/sta/NullParasitics.hh | 2 +- include/sta/Parasitics.hh | 2 +- include/sta/ParasiticsClass.hh | 2 +- include/sta/Sta.hh | 2 +- parasitics/ConcreteParasitics.cc | 9 +++++---- parasitics/ConcreteParasitics.hh | 2 +- parasitics/NullParasitics.cc | 2 +- parasitics/Parasitics.i | 4 ++-- parasitics/SpefReader.cc | 6 +++--- parasitics/SpefReader.hh | 2 +- parasitics/SpefReaderPvt.hh | 4 ++-- search/Sta.cc | 2 +- tcl/StaTcl.i | 8 ++++---- 20 files changed, 54 insertions(+), 24 deletions(-) diff --git a/dcalc/ArnoldiDelayCalc.cc b/dcalc/ArnoldiDelayCalc.cc index 33263967..91789651 100644 --- a/dcalc/ArnoldiDelayCalc.cc +++ b/dcalc/ArnoldiDelayCalc.cc @@ -117,6 +117,7 @@ public: virtual Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap); + virtual ReducedParasiticType reducedParasiticType() const; virtual void gateDelay(const LibertyCell *drvr_cell, TimingArc *arc, const Slew &in_slew, @@ -306,6 +307,12 @@ ArnoldiDelayCalc::findParasitic(const Pin *drvr_pin, return nullptr; } +ReducedParasiticType +ArnoldiDelayCalc::reducedParasiticType() const +{ + return ReducedParasiticType::arnoldi; +} + void ArnoldiDelayCalc::inputPortDelay(const Pin *drvr_pin, float in_slew, diff --git a/dcalc/DmpDelayCalc.cc b/dcalc/DmpDelayCalc.cc index 44823aa7..d105f881 100644 --- a/dcalc/DmpDelayCalc.cc +++ b/dcalc/DmpDelayCalc.cc @@ -129,6 +129,7 @@ public: virtual Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap); + virtual ReducedParasiticType reducedParasiticType() const; virtual void inputPortDelay(const Pin *port_pin, float in_slew, const RiseFall *rf, @@ -252,6 +253,12 @@ DmpCeffTwoPoleDelayCalc::findParasitic(const Pin *drvr_pin, return nullptr; } +ReducedParasiticType +DmpCeffTwoPoleDelayCalc::reducedParasiticType() const +{ + return ReducedParasiticType::pi_pole_residue2; +} + void DmpCeffTwoPoleDelayCalc::inputPortDelay(const Pin *port_pin, float in_slew, diff --git a/dcalc/LumpedCapDelayCalc.cc b/dcalc/LumpedCapDelayCalc.cc index f4292a1a..951730d6 100644 --- a/dcalc/LumpedCapDelayCalc.cc +++ b/dcalc/LumpedCapDelayCalc.cc @@ -98,6 +98,12 @@ LumpedCapDelayCalc::findParasitic(const Pin *drvr_pin, return nullptr; } +ReducedParasiticType +LumpedCapDelayCalc::reducedParasiticType() const +{ + return ReducedParasiticType::pi_elmore; +} + void LumpedCapDelayCalc::finishDrvrPin() { diff --git a/dcalc/LumpedCapDelayCalc.hh b/dcalc/LumpedCapDelayCalc.hh index 1ea0f70c..0a5f6073 100644 --- a/dcalc/LumpedCapDelayCalc.hh +++ b/dcalc/LumpedCapDelayCalc.hh @@ -30,6 +30,7 @@ public: virtual Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap); + virtual ReducedParasiticType reducedParasiticType() const; virtual void inputPortDelay(const Pin *port_pin, float in_slew, const RiseFall *rf, diff --git a/dcalc/UnitDelayCalc.cc b/dcalc/UnitDelayCalc.cc index 8c498ced..631d16f0 100644 --- a/dcalc/UnitDelayCalc.cc +++ b/dcalc/UnitDelayCalc.cc @@ -45,6 +45,12 @@ UnitDelayCalc::findParasitic(const Pin *, return nullptr; } +ReducedParasiticType +UnitDelayCalc::reducedParasiticType() const +{ + return ReducedParasiticType::none; +} + void UnitDelayCalc::inputPortDelay(const Pin *, float, diff --git a/dcalc/UnitDelayCalc.hh b/dcalc/UnitDelayCalc.hh index 446ea1bd..2431e9e4 100644 --- a/dcalc/UnitDelayCalc.hh +++ b/dcalc/UnitDelayCalc.hh @@ -29,6 +29,7 @@ public: virtual Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap); + virtual ReducedParasiticType reducedParasiticType() const; virtual void gateDelay(const LibertyCell *drvr_cell, TimingArc *arc, const Slew &in_slew, diff --git a/include/sta/ArcDelayCalc.hh b/include/sta/ArcDelayCalc.hh index 62c1d3f4..9b6d71ad 100644 --- a/include/sta/ArcDelayCalc.hh +++ b/include/sta/ArcDelayCalc.hh @@ -22,6 +22,7 @@ #include "LibertyClass.hh" #include "NetworkClass.hh" #include "Delay.hh" +#include "ParasiticsClass.hh" #include "StaState.hh" namespace sta { @@ -54,7 +55,7 @@ public: virtual Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) = 0; - + virtual ReducedParasiticType reducedParasiticType() const = 0; // Find the wire delays and slews for an input port without a driving cell. // This call primarily initializes the load delay/slew iterator. virtual void inputPortDelay(const Pin *port_pin, diff --git a/include/sta/NullParasitics.hh b/include/sta/NullParasitics.hh index 7456111f..7c975e7f 100644 --- a/include/sta/NullParasitics.hh +++ b/include/sta/NullParasitics.hh @@ -140,7 +140,7 @@ public: // Reduce parasitic network to reduce_to model. virtual void reduceTo(Parasitic *parasitic, const Net *net, - ReduceParasiticsTo reduce_to, + ReducedParasiticType reduce_to, const OperatingConditions *op_cond, const Corner *corner, const MinMax *cnst_min_max, diff --git a/include/sta/Parasitics.hh b/include/sta/Parasitics.hh index 4ae0419e..b3003760 100644 --- a/include/sta/Parasitics.hh +++ b/include/sta/Parasitics.hh @@ -224,7 +224,7 @@ public: // Reduce parasitic network to reduce_to model. virtual void reduceTo(Parasitic *parasitic, const Net *net, - ReduceParasiticsTo reduce_to, + ReducedParasiticType reduce_to, const OperatingConditions *op_cond, const Corner *corner, const MinMax *cnst_min_max, diff --git a/include/sta/ParasiticsClass.hh b/include/sta/ParasiticsClass.hh index e6f21074..e5649f13 100644 --- a/include/sta/ParasiticsClass.hh +++ b/include/sta/ParasiticsClass.hh @@ -24,6 +24,6 @@ class ParasiticDevice; class ParasiticNode; class ParasiticAnalysisPt; -enum class ReduceParasiticsTo { pi_elmore, pi_pole_residue2, none }; +enum class ReducedParasiticType { pi_elmore, pi_pole_residue2, arnoldi, none }; } // namespace diff --git a/include/sta/Sta.hh b/include/sta/Sta.hh index 7ee14589..2bab1fd1 100644 --- a/include/sta/Sta.hh +++ b/include/sta/Sta.hh @@ -1068,7 +1068,7 @@ public: bool pin_cap_included, bool keep_coupling_caps, float coupling_cap_factor, - ReduceParasiticsTo reduce_to, + ReducedParasiticType reduce_to, bool delete_after_reduce, bool quiet); // Parasitics. diff --git a/parasitics/ConcreteParasitics.cc b/parasitics/ConcreteParasitics.cc index abc8baaa..fe76af52 100644 --- a/parasitics/ConcreteParasitics.cc +++ b/parasitics/ConcreteParasitics.cc @@ -1564,21 +1564,22 @@ ConcreteParasitics::otherNode(const ParasiticDevice *device, void ConcreteParasitics::reduceTo(Parasitic *parasitic, const Net *net, - ReduceParasiticsTo reduce_to, + ReducedParasiticType reduce_to, const OperatingConditions *op_cond, const Corner *corner, const MinMax *cnst_min_max, const ParasiticAnalysisPt *ap) { switch (reduce_to) { - case ReduceParasiticsTo::pi_elmore: + case ReducedParasiticType::pi_elmore: reduceToPiElmore(parasitic, net, op_cond, corner, cnst_min_max, ap); break; - case ReduceParasiticsTo::pi_pole_residue2: + case ReducedParasiticType::pi_pole_residue2: reduceToPiPoleResidue2(parasitic, net, op_cond, corner, cnst_min_max, ap); break; - case ReduceParasiticsTo::none: + case ReducedParasiticType::arnoldi: + case ReducedParasiticType::none: break; } } diff --git a/parasitics/ConcreteParasitics.hh b/parasitics/ConcreteParasitics.hh index 019126b9..abb17693 100644 --- a/parasitics/ConcreteParasitics.hh +++ b/parasitics/ConcreteParasitics.hh @@ -163,7 +163,7 @@ public: virtual void reduceTo(Parasitic *parasitic, const Net *net, - ReduceParasiticsTo reduce_to, + ReducedParasiticType reduce_to, const OperatingConditions *op_cond, const Corner *corner, const MinMax *cnst_min_max, diff --git a/parasitics/NullParasitics.cc b/parasitics/NullParasitics.cc index 5521a057..3ea2f0b6 100644 --- a/parasitics/NullParasitics.cc +++ b/parasitics/NullParasitics.cc @@ -382,7 +382,7 @@ NullParasitics::otherNode(const ParasiticDevice *, void NullParasitics::reduceTo(Parasitic *, const Net *, - ReduceParasiticsTo , + ReducedParasiticType , const OperatingConditions *, const Corner *, const MinMax *, diff --git a/parasitics/Parasitics.i b/parasitics/Parasitics.i index 0ca3cf54..342e83c1 100644 --- a/parasitics/Parasitics.i +++ b/parasitics/Parasitics.i @@ -24,7 +24,7 @@ using sta::Sta; using sta::cmdLinkedNetwork; using sta::Instance; using sta::MinMaxAll; -using sta::ReduceParasiticsTo; +using sta::ReducedParasiticType; using sta::RiseFall; using sta::Pin; using sta::TmpFloatSeq; @@ -41,7 +41,7 @@ read_spef_cmd(const char *filename, bool pin_cap_included, bool keep_coupling_caps, float coupling_cap_factor, - ReduceParasiticsTo reduce_to, + ReducedParasiticType reduce_to, bool delete_after_reduce, bool quiet) { diff --git a/parasitics/SpefReader.cc b/parasitics/SpefReader.cc index 7f00908e..cb0a2d49 100644 --- a/parasitics/SpefReader.cc +++ b/parasitics/SpefReader.cc @@ -49,7 +49,7 @@ readSpefFile(const char *filename, bool pin_cap_included, bool keep_coupling_caps, float coupling_cap_factor, - ReduceParasiticsTo reduce_to, + ReducedParasiticType reduce_to, bool delete_after_reduce, const OperatingConditions *op_cond, const Corner *corner, @@ -86,7 +86,7 @@ SpefReader::SpefReader(const char *filename, bool pin_cap_included, bool keep_coupling_caps, float coupling_cap_factor, - ReduceParasiticsTo reduce_to, + ReducedParasiticType reduce_to, bool delete_after_reduce, const OperatingConditions *op_cond, const Corner *corner, @@ -467,7 +467,7 @@ SpefReader::dspfFinish() // Checking "should" be done by report_annotated_parasitics. if (!quiet_) parasitics_->check(parasitic_); - if (reduce_to_ != ReduceParasiticsTo::none) { + if (reduce_to_ != ReducedParasiticType::none) { parasitics_->reduceTo(parasitic_, net_, reduce_to_, op_cond_, corner_, cnst_min_max_, ap_); if (delete_after_reduce_) diff --git a/parasitics/SpefReader.hh b/parasitics/SpefReader.hh index 75e04c0e..5a996710 100644 --- a/parasitics/SpefReader.hh +++ b/parasitics/SpefReader.hh @@ -43,7 +43,7 @@ readSpefFile(const char *filename, bool pin_cap_included, bool keep_coupling_caps, float coupling_cap_factor, - ReduceParasiticsTo reduce_to, + ReducedParasiticType reduce_to, bool delete_after_reduce, const OperatingConditions *op_cond, const Corner *corner, diff --git a/parasitics/SpefReaderPvt.hh b/parasitics/SpefReaderPvt.hh index 41a9cfd6..c109dfc3 100644 --- a/parasitics/SpefReaderPvt.hh +++ b/parasitics/SpefReaderPvt.hh @@ -54,7 +54,7 @@ public: bool pin_cap_included, bool keep_coupling_caps, float coupling_cap_factor, - ReduceParasiticsTo reduce_to, + ReducedParasiticType reduce_to, bool delete_after_reduce, const OperatingConditions *op_cond, const Corner *corner, @@ -145,7 +145,7 @@ private: bool increment_; bool pin_cap_included_; bool keep_coupling_caps_; - ReduceParasiticsTo reduce_to_; + ReducedParasiticType reduce_to_; bool delete_after_reduce_; const OperatingConditions *op_cond_; const Corner *corner_; diff --git a/search/Sta.cc b/search/Sta.cc index ad35ed9a..9f6fadf6 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -3574,7 +3574,7 @@ Sta::readSpef(const char *filename, bool pin_cap_included, bool keep_coupling_caps, float coupling_cap_factor, - ReduceParasiticsTo reduce_to, + ReducedParasiticType reduce_to, bool delete_after_reduce, bool quiet) { diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index a1bd35a8..6bbeb3cd 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -1365,15 +1365,15 @@ using namespace sta; Tcl_SetObjResult(interp, obj); } -%typemap(in) ReduceParasiticsTo { +%typemap(in) ReducedParasiticType { int length; char *arg = Tcl_GetStringFromObj($input, &length); if (stringEq(arg, "pi_elmore")) - $1 = ReduceParasiticsTo::pi_elmore; + $1 = ReducedParasiticType::pi_elmore; else if (stringEq(arg, "pi_pole_residue2")) - $1 = ReduceParasiticsTo::pi_pole_residue2; + $1 = ReducedParasiticType::pi_pole_residue2; else if (stringEq(arg, "none")) - $1 = ReduceParasiticsTo::none; + $1 = ReducedParasiticType::none; else { tclError(interp, "Error: %s pi_elmore, pi_pole_residue2, or none.", arg); return TCL_ERROR;