From 63df5b3058996691ea0a528d82cd5097a6809387 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Mon, 8 May 2023 15:26:10 -0700 Subject: [PATCH] SimpleRCDelayCalc -> SlewDegradeDelayCalc Signed-off-by: James Cherry --- CMakeLists.txt | 2 +- dcalc/DelayCalc.cc | 4 +- dcalc/SimpleRCDelayCalc.hh | 63 ------------- ...RCDelayCalc.cc => SlewDegradeDelayCalc.cc} | 89 +++++++++++++------ dcalc/SlewDegradeDelayCalc.hh | 26 ++++++ include/sta/ArcDelayCalc.hh | 2 +- 6 files changed, 93 insertions(+), 93 deletions(-) delete mode 100644 dcalc/SimpleRCDelayCalc.hh rename dcalc/{SimpleRCDelayCalc.cc => SlewDegradeDelayCalc.cc} (50%) create mode 100644 dcalc/SlewDegradeDelayCalc.hh 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