From 828616fc1251dcfff554f30ed5bf84aa3a8ae3fe Mon Sep 17 00:00:00 2001 From: James Cherry Date: Fri, 28 Jun 2024 10:04:45 -0700 Subject: [PATCH] ArcDelayCalc::reduceSupported() Signed-off-by: James Cherry --- dcalc/CcsCeffDelayCalc.hh | 2 +- dcalc/CcsSimDelayCalc.hh | 1 + dcalc/DmpCeff.hh | 1 + dcalc/LumpedCapDelayCalc.hh | 1 + dcalc/UnitDelayCalc.hh | 1 + include/sta/ArcDelayCalc.hh | 1 + parasitics/SpefReader.cc | 6 ++++++ 7 files changed, 12 insertions(+), 1 deletion(-) diff --git a/dcalc/CcsCeffDelayCalc.hh b/dcalc/CcsCeffDelayCalc.hh index 924cbd5a..1be5eab2 100644 --- a/dcalc/CcsCeffDelayCalc.hh +++ b/dcalc/CcsCeffDelayCalc.hh @@ -36,7 +36,7 @@ public: virtual ~CcsCeffDelayCalc(); ArcDelayCalc *copy() override; const char *name() const override { return "ccs_ceff"; } - + bool reduceSupported() const override { return true; } ArcDcalcResult gateDelay(const Pin *drvr_pin, const TimingArc *arc, const Slew &in_slew, diff --git a/dcalc/CcsSimDelayCalc.hh b/dcalc/CcsSimDelayCalc.hh index da4cf51a..97b27d16 100644 --- a/dcalc/CcsSimDelayCalc.hh +++ b/dcalc/CcsSimDelayCalc.hh @@ -59,6 +59,7 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; + bool reduceSupported() const override { return false; } Parasitic *reduceParasitic(const Parasitic *parasitic_network, const Pin *drvr_pin, const RiseFall *rf, diff --git a/dcalc/DmpCeff.hh b/dcalc/DmpCeff.hh index fadc0140..8ee9eb3d 100644 --- a/dcalc/DmpCeff.hh +++ b/dcalc/DmpCeff.hh @@ -34,6 +34,7 @@ class DmpCeffDelayCalc : public LumpedCapDelayCalc public: DmpCeffDelayCalc(StaState *sta); virtual ~DmpCeffDelayCalc(); + bool reduceSupported() const override { return true; } ArcDcalcResult gateDelay(const Pin *drvr_pin, const TimingArc *arc, const Slew &in_slew, diff --git a/dcalc/LumpedCapDelayCalc.hh b/dcalc/LumpedCapDelayCalc.hh index 331d2e81..06239341 100644 --- a/dcalc/LumpedCapDelayCalc.hh +++ b/dcalc/LumpedCapDelayCalc.hh @@ -31,6 +31,7 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; + bool reduceSupported() const override { return true; } Parasitic *reduceParasitic(const Parasitic *parasitic_network, const Pin *drvr_pin, const RiseFall *rf, diff --git a/dcalc/UnitDelayCalc.hh b/dcalc/UnitDelayCalc.hh index 04fae163..d9ed73f8 100644 --- a/dcalc/UnitDelayCalc.hh +++ b/dcalc/UnitDelayCalc.hh @@ -30,6 +30,7 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; + bool reduceSupported() const override { return false; } Parasitic *reduceParasitic(const Parasitic *parasitic_network, const Pin *drvr_pin, const RiseFall *rf, diff --git a/include/sta/ArcDelayCalc.hh b/include/sta/ArcDelayCalc.hh index b5179afd..159495ea 100644 --- a/include/sta/ArcDelayCalc.hh +++ b/include/sta/ArcDelayCalc.hh @@ -166,6 +166,7 @@ public: virtual Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) = 0; + virtual bool reduceSupported() const = 0; // Reduce parasitic_network to a representation acceptable to the delay calculator. virtual Parasitic *reduceParasitic(const Parasitic *parasitic_network, const Pin *drvr_pin, diff --git a/parasitics/SpefReader.cc b/parasitics/SpefReader.cc index 761b5f48..2c9c05a6 100644 --- a/parasitics/SpefReader.cc +++ b/parasitics/SpefReader.cc @@ -55,6 +55,12 @@ readSpefFile(const char *filename, StaState *sta) { bool success = false; + const ArcDelayCalc *arc_delay_calc = sta->arcDelayCalc(); + if (reduce && !arc_delay_calc->reduceSupported()) { + sta->report()->warn(1658, "Delay calculator %s does not support reduction.", + arc_delay_calc->name()); + reduce = false; + } // Use zlib to uncompress gzip'd files automagically. gzFile stream = gzopen(filename, "rb"); if (stream) {