diff --git a/CMakeLists.txt b/CMakeLists.txt
index 49218a63..0e5353c0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -73,7 +73,7 @@ set(STA_SOURCE
dcalc/LumpedCapDelayCalc.cc
dcalc/NetCaps.cc
dcalc/RCDelayCalc.cc
- dcalc/SimpleRCDelayCalc.cc
+ dcalc/SlewDegradeDelayCalc.cc
dcalc/UnitDelayCalc.cc
graph/DelayFloat.cc
diff --git a/dcalc/DelayCalc.cc b/dcalc/DelayCalc.cc
index f0a89735..2c5c1ba0 100644
--- a/dcalc/DelayCalc.cc
+++ b/dcalc/DelayCalc.cc
@@ -20,7 +20,7 @@
#include "StringUtil.hh"
#include "UnitDelayCalc.hh"
#include "LumpedCapDelayCalc.hh"
-#include "SimpleRCDelayCalc.hh"
+#include "SlewDegradeDelayCalc.hh"
#include "DmpDelayCalc.hh"
#include "ArnoldiDelayCalc.hh"
@@ -35,7 +35,7 @@ registerDelayCalcs()
{
registerDelayCalc("unit", makeUnitDelayCalc);
registerDelayCalc("lumped_cap", makeLumpedCapDelayCalc);
- registerDelayCalc("simple_rc", makeSimpleRCDelayCalc);
+ registerDelayCalc("slew_degrade", makeSlewDegradeDelayCalc);
registerDelayCalc("dmp_ceff_elmore", makeDmpCeffElmoreDelayCalc);
registerDelayCalc("dmp_ceff_two_pole", makeDmpCeffTwoPoleDelayCalc);
registerDelayCalc("arnoldi", makeArnoldiDelayCalc);
diff --git a/dcalc/SimpleRCDelayCalc.hh b/dcalc/SimpleRCDelayCalc.hh
deleted file mode 100644
index aa2f4452..00000000
--- a/dcalc/SimpleRCDelayCalc.hh
+++ /dev/null
@@ -1,63 +0,0 @@
-// OpenSTA, Static Timing Analyzer
-// Copyright (c) 2023, Parallax Software, Inc.
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
-
-#pragma once
-
-#include "RCDelayCalc.hh"
-
-namespace sta {
-
-// Liberty table model lumped capacitance arc delay calculator.
-// Effective capacitance is the pi model total capacitance (C1+C2).
-// Wire delays are elmore delays.
-// Driver slews are degraded to loads by rise/fall transition_degradation
-// tables.
-class SimpleRCDelayCalc : public RCDelayCalc
-{
-public:
- SimpleRCDelayCalc(StaState *sta);
- virtual ArcDelayCalc *copy();
- virtual void inputPortDelay(const Pin *port_pin,
- float in_slew,
- const RiseFall *rf,
- const Parasitic *parasitic,
- const DcalcAnalysisPt *dcalc_ap);
- virtual void gateDelay(const LibertyCell *drvr_cell,
- const TimingArc *arc,
- const Slew &in_slew,
- float load_cap,
- const Parasitic *drvr_parasitic,
- float related_out_cap,
- const Pvt *pvt,
- const DcalcAnalysisPt *dcalc_ap,
- // Return values.
- ArcDelay &gate_delay,
- Slew &drvr_slew);
- virtual void loadDelay(const Pin *load_pin,
- ArcDelay &wire_delay,
- Slew &load_slew);
-
- using RCDelayCalc::gateDelay;
- using RCDelayCalc::reportGateDelay;
-
-private:
- const Pvt *pvt_;
-};
-
-ArcDelayCalc *
-makeSimpleRCDelayCalc(StaState *sta);
-
-} // namespace
diff --git a/dcalc/SimpleRCDelayCalc.cc b/dcalc/SlewDegradeDelayCalc.cc
similarity index 50%
rename from dcalc/SimpleRCDelayCalc.cc
rename to dcalc/SlewDegradeDelayCalc.cc
index 394e10e5..1e61ebe0 100644
--- a/dcalc/SimpleRCDelayCalc.cc
+++ b/dcalc/SlewDegradeDelayCalc.cc
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-#include "SimpleRCDelayCalc.hh"
+#include "SlewDegradeDelayCalc.hh"
#include "TimingArc.hh"
#include "Liberty.hh"
@@ -25,46 +25,83 @@
namespace sta {
-ArcDelayCalc *
-makeSimpleRCDelayCalc(StaState *sta)
+// Liberty table model lumped capacitance arc delay calculator.
+// Effective capacitance is the pi model total capacitance (C1+C2).
+// Wire delays are elmore delays.
+// Driver slews are degraded to loads by rise/fall transition_degradation
+// tables.
+class SlewDegradeDelayCalc : public RCDelayCalc
{
- return new SimpleRCDelayCalc(sta);
+public:
+ SlewDegradeDelayCalc(StaState *sta);
+ virtual ArcDelayCalc *copy();
+ virtual void inputPortDelay(const Pin *port_pin,
+ float in_slew,
+ const RiseFall *rf,
+ const Parasitic *parasitic,
+ const DcalcAnalysisPt *dcalc_ap);
+ virtual void gateDelay(const LibertyCell *drvr_cell,
+ const TimingArc *arc,
+ const Slew &in_slew,
+ float load_cap,
+ const Parasitic *drvr_parasitic,
+ float related_out_cap,
+ const Pvt *pvt,
+ const DcalcAnalysisPt *dcalc_ap,
+ // Return values.
+ ArcDelay &gate_delay,
+ Slew &drvr_slew);
+ virtual void loadDelay(const Pin *load_pin,
+ ArcDelay &wire_delay,
+ Slew &load_slew);
+
+ using RCDelayCalc::gateDelay;
+ using RCDelayCalc::reportGateDelay;
+
+private:
+ const Pvt *pvt_;
+};
+
+ArcDelayCalc *
+makeSlewDegradeDelayCalc(StaState *sta)
+{
+ return new SlewDegradeDelayCalc(sta);
}
-SimpleRCDelayCalc::SimpleRCDelayCalc(StaState *sta) :
+SlewDegradeDelayCalc::SlewDegradeDelayCalc(StaState *sta) :
RCDelayCalc(sta)
{
}
ArcDelayCalc *
-SimpleRCDelayCalc::copy()
+SlewDegradeDelayCalc::copy()
{
- return new SimpleRCDelayCalc(this);
+ return new SlewDegradeDelayCalc(this);
}
void
-SimpleRCDelayCalc::inputPortDelay(const Pin *port_pin,
- float in_slew,
- const RiseFall *rf,
- const Parasitic *parasitic,
- const DcalcAnalysisPt *dcalc_ap)
+SlewDegradeDelayCalc::inputPortDelay(const Pin *port_pin,
+ float in_slew,
+ const RiseFall *rf,
+ const Parasitic *parasitic,
+ const DcalcAnalysisPt *dcalc_ap)
{
pvt_ = dcalc_ap->operatingConditions();
RCDelayCalc::inputPortDelay(port_pin, in_slew, rf, parasitic, dcalc_ap);
}
void
-SimpleRCDelayCalc::gateDelay(const LibertyCell *drvr_cell,
- const TimingArc *arc,
- const Slew &in_slew,
- float load_cap,
- const Parasitic *drvr_parasitic,
- float related_out_cap,
- const Pvt *pvt,
- const DcalcAnalysisPt *dcalc_ap,
- // Return values.
- ArcDelay &gate_delay,
- Slew &drvr_slew)
+SlewDegradeDelayCalc::gateDelay(const LibertyCell *drvr_cell,
+ const TimingArc *arc,
+ const Slew &in_slew,
+ float load_cap,
+ const Parasitic *drvr_parasitic,
+ float related_out_cap,
+ const Pvt *pvt,
+ const DcalcAnalysisPt *dcalc_ap,
+ // Return values.
+ ArcDelay &gate_delay,
+ Slew &drvr_slew)
{
input_port_ = false;
drvr_parasitic_ = drvr_parasitic;
@@ -79,9 +116,9 @@ SimpleRCDelayCalc::gateDelay(const LibertyCell *drvr_cell,
}
void
-SimpleRCDelayCalc::loadDelay(const Pin *load_pin,
- ArcDelay &wire_delay,
- Slew &load_slew)
+SlewDegradeDelayCalc::loadDelay(const Pin *load_pin,
+ ArcDelay &wire_delay,
+ Slew &load_slew)
{
ArcDelay wire_delay1 = 0.0;
Slew load_slew1 = drvr_slew_;
diff --git a/dcalc/SlewDegradeDelayCalc.hh b/dcalc/SlewDegradeDelayCalc.hh
new file mode 100644
index 00000000..97b39c5f
--- /dev/null
+++ b/dcalc/SlewDegradeDelayCalc.hh
@@ -0,0 +1,26 @@
+// OpenSTA, Static Timing Analyzer
+// Copyright (c) 2023, Parallax Software, Inc.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+#pragma once
+
+#include "RCDelayCalc.hh"
+
+namespace sta {
+
+ArcDelayCalc *
+makeSlewDegradeDelayCalc(StaState *sta);
+
+} // namespace
diff --git a/include/sta/ArcDelayCalc.hh b/include/sta/ArcDelayCalc.hh
index 045557bb..420f5951 100644
--- a/include/sta/ArcDelayCalc.hh
+++ b/include/sta/ArcDelayCalc.hh
@@ -36,7 +36,7 @@ class DcalcAnalysisPt;
// UnitDelayCalc
// LumpedCapDelayCalc
// RCDelayCalc
-// SimpleRCDelayCalc
+// SlewDegradeDelayCalc
// DmpCeffDelayCalc
// DmpCeffElmoreDelayCalc
// DmpCeffTwoPoleDelayCalc