OpenSTA/dcalc/DmpCeff.cc

1713 lines
45 KiB
C++
Raw Normal View History

2018-09-28 17:54:21 +02:00
// OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc.
2018-09-28 17:54:21 +02:00
//
// 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
2018-09-28 17:54:21 +02:00
// 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 <https://www.gnu.org/licenses/>.
//
// The origin of this software must not be misrepresented; you must not
// claim that you wrote the original software.
//
// Altered source versions must be plainly marked as such, and must not be
// misrepresented as being the original software.
//
// This notice may not be removed or altered from any source distribution.
2018-09-28 17:54:21 +02:00
// "Performance Computation for Precharacterized CMOS Gates with RC Loads",
// Florentin Dartu, Noel Menezes and Lawrence Pileggi, IEEE Transactions
// on Computer-Aided Design of Integrated Circuits and Systems, Vol 15, No 5,
// May 1996, pg 544-553.
//
// The only real change from the paper is that Vl, the measured low
// slew voltage is matched instead of y20 in eqn 12.
2020-04-05 23:53:44 +02:00
#include "DmpCeff.hh"
2020-04-05 20:35:51 +02:00
#include <algorithm>
#include <cmath>
#include <functional>
2020-04-05 20:35:51 +02:00
2020-04-05 23:53:44 +02:00
#include "Report.hh"
#include "Debug.hh"
#include "Units.hh"
#include "TimingArc.hh"
#include "TableModel.hh"
#include "Liberty.hh"
#include "Network.hh"
#include "Sdc.hh"
#include "Parasitics.hh"
#include "ArcDelayCalc.hh"
#include "FindRoot.hh"
#include "Variables.hh"
2018-09-28 17:54:21 +02:00
namespace sta {
// Tolerance (as a scale of value) for driver parameters (Ceff, delta t, t0).
static const double driver_param_tol = .01;
// Waveform threshold crossing time tolerance (1.0 = 100%).
static const double vth_time_tol = .01;
// A small number used by luDecomp.
static const double tiny_double = 1.0e-20;
// Max iterations for findRoot.
static const int find_root_max_iter = 20;
// Indices of Newton-Raphson parameter vector.
2019-03-13 01:25:53 +01:00
enum DmpParam { t0, dt, ceff };
2018-09-28 17:54:21 +02:00
static const char *dmp_param_index_strings[] = {"t0", "dt", "Ceff"};
// Indices of Newton-Raphson function value vector.
2019-03-13 01:25:53 +01:00
enum DmpFunc { y20, y50, ipi };
2018-09-28 17:54:21 +02:00
static const char *dmp_func_index_strings[] = {"y20", "y50", "Ipi"};
static double
exp2(double x);
2020-11-04 22:39:36 +01:00
class DmpError : public Exception
{
public:
DmpError(const char *what);
virtual ~DmpError() {}
virtual const char *what() const noexcept { return what_; }
private:
const char *what_;
};
2018-09-28 17:54:21 +02:00
static double
gateModelRd(const LibertyCell *cell,
const GateTableModel *gate_model,
const RiseFall *rf,
double in_slew,
double c2,
double c1,
const Pvt *pvt,
bool pocv_enabled);
2020-11-04 22:39:36 +01:00
static void
2018-09-28 17:54:21 +02:00
newtonRaphson(const int max_iter,
double x[],
const int n,
const double x_tol,
// eval(state) is called to fill fvec and fjac.
std::function<void ()> eval,
// Temporaries supplied by caller.
double *fvec,
double **fjac,
int *index,
double *p,
double *scale);
2018-09-28 17:54:21 +02:00
static void
luSolve(double **a,
const int size,
const int *index,
double b[]);
2020-11-04 22:39:36 +01:00
static void
2018-09-28 17:54:21 +02:00
luDecomp(double **a,
const int size,
int *index,
double *scale);
2018-09-28 17:54:21 +02:00
////////////////////////////////////////////////////////////////
// Base class for Dartu/Menezes/Pileggi algorithm.
// Derived classes handle different cases of zero values in the Pi model.
class DmpAlg : public StaState
{
public:
DmpAlg(int nr_order, StaState *sta);
virtual ~DmpAlg();
virtual const char *name() = 0;
// Set driver model and pi model parameters for delay calculation.
virtual void init(const LibertyLibrary *library,
const LibertyCell *drvr_cell,
const Pvt *pvt,
const GateTableModel *gate_model,
const RiseFall *rf,
double rd,
double in_slew,
double c2,
double rpi,
double c1);
virtual void gateDelaySlew(// Return values.
double &delay,
double &slew) = 0;
2018-09-28 17:54:21 +02:00
virtual void loadDelaySlew(const Pin *load_pin,
double elmore,
// Return values.
ArcDelay &delay,
Slew &slew);
2018-09-28 17:54:21 +02:00
double ceff() { return ceff_; }
// Given x_ as a vector of input parameters, fill fvec_ with the
// equations evaluated at x_ and fjac_ with the jabobian evaluated at x_.
2020-11-04 22:39:36 +01:00
virtual void evalDmpEqns() = 0;
2018-09-28 17:54:21 +02:00
// Output response to vs(t) ramp driving pi model load.
void Vo(double t,
// Return values.
double &vo,
double &dol_dt);
2018-09-28 17:54:21 +02:00
// Load responce to driver waveform.
void Vl(double t,
// Return values.
double &vl,
double &dvl_dt);
2018-09-28 17:54:21 +02:00
protected:
// Find driver parameters t0, delta_t, Ceff.
2020-11-04 22:39:36 +01:00
void findDriverParams(double ceff);
2018-09-28 17:54:21 +02:00
void gateCapDelaySlew(double cl,
// Return values.
double &delay,
double &slew);
2018-09-28 17:54:21 +02:00
void gateDelays(double ceff,
// Return values.
double &t_vth,
double &t_vl,
double &slew);
2018-09-28 17:54:21 +02:00
// Partial derivatives of y(t) (jacobian).
void dy(double t,
double t0,
double dt,
double cl,
// Return values.
double &dydt0,
double &dyddt,
double &dydcl);
2018-09-28 17:54:21 +02:00
double y0dt(double t,
double cl);
2018-09-28 17:54:21 +02:00
double y0dcl(double t,
double cl);
2018-09-28 17:54:21 +02:00
void showX();
void showFvec();
void showJacobian();
void findDriverDelaySlew(// Return values.
double &delay,
double &slew);
double findVoCrossing(double vth,
double lower_bound,
double upper_bound);
2018-09-28 17:54:21 +02:00
void showVo();
double findVlCrossing(double vth,
double lower_bound,
double upper_bound);
2018-09-28 17:54:21 +02:00
void showVl();
void fail(const char *reason);
// Output response to vs(t) ramp driving capacitive load.
double y(double t,
double t0,
double dt,
double cl);
2018-09-28 17:54:21 +02:00
// Output response to unit ramp driving capacitive load.
double y0(double t,
double cl);
2018-09-28 17:54:21 +02:00
// Output response to unit ramp driving pi model load.
virtual void V0(double t,
// Return values.
double &vo,
double &dvo_dt) = 0;
2018-09-28 17:54:21 +02:00
// Upper bound on time that vo crosses vh.
virtual double voCrossingUpperBound() = 0;
// Load responce to driver unit ramp.
virtual void Vl0(double t,
// Return values.
double &vl,
double &dvl_dt) = 0;
2018-09-28 17:54:21 +02:00
// Upper bound on time that vl crosses vh.
double vlCrossingUpperBound();
// Inputs to the delay calculator.
const LibertyCell *drvr_cell_;
const LibertyLibrary *drvr_library_;
const Pvt *pvt_;
const GateTableModel *gate_model_;
double in_slew_;
2020-10-31 22:05:28 +01:00
double c2_;
double rpi_;
double c1_;
2018-09-28 17:54:21 +02:00
double rd_;
// Logic threshold (percentage of supply voltage).
double vth_;
// Slew lower limit (percentage of supply voltage).
double vl_;
// Slew upper limit (percentage of supply voltage).
double vh_;
// Table slews are scaled by slew_derate to get
// measured slews from vl to vh.
double slew_derate_;
// Driver parameters calculated by this algorithm.
double t0_;
double dt_;
double ceff_;
// Driver parameter Newton-Raphson state.
int nr_order_;
static constexpr int max_nr_order_ = 3;
double x_[max_nr_order_];
double fvec_[max_nr_order_];
double fjac_storage_[max_nr_order_ * max_nr_order_];
double *fjac_[max_nr_order_];
double scale_[max_nr_order_];
double p_[max_nr_order_ ];
int index_[max_nr_order_];
2018-09-28 17:54:21 +02:00
// Driver slew used to check load delay.
double drvr_slew_;
2018-09-28 17:54:21 +02:00
double vo_delay_;
// True if the driver parameters are valid for finding the load delays.
bool driver_valid_;
// Load rspf elmore delay.
double elmore_;
double p3_;
};
DmpAlg::DmpAlg(int nr_order,
StaState *sta):
2018-09-28 17:54:21 +02:00
StaState(sta),
2020-10-31 22:05:28 +01:00
c2_(0.0),
rpi_(0.0),
2020-11-10 04:48:22 +01:00
c1_(0.0),
2018-09-28 17:54:21 +02:00
nr_order_(nr_order)
{
for (int i = 0; i < nr_order_; i++)
// Only use the upper left block of the matrix
fjac_[i] = fjac_storage_ + i * max_nr_order_;
2018-09-28 17:54:21 +02:00
}
DmpAlg::~DmpAlg() = default;
2018-09-28 17:54:21 +02:00
void
DmpAlg::init(const LibertyLibrary *drvr_library,
const LibertyCell *drvr_cell,
const Pvt *pvt,
const GateTableModel *gate_model,
const RiseFall *rf,
double rd,
double in_slew,
// Pi model.
double c2,
double rpi,
double c1)
2018-09-28 17:54:21 +02:00
{
drvr_library_ = drvr_library;
drvr_cell_ = drvr_cell;
pvt_ = pvt;
gate_model_ = gate_model;
rd_ = rd;
in_slew_ = in_slew;
2020-10-31 22:05:28 +01:00
c2_ = c2;
rpi_ = rpi;
c1_ = c1;
2018-09-28 17:54:21 +02:00
driver_valid_ = false;
2019-11-11 23:30:19 +01:00
vth_ = drvr_library->outputThreshold(rf);
vl_ = drvr_library->slewLowerThreshold(rf);
vh_ = drvr_library->slewUpperThreshold(rf);
2018-09-28 17:54:21 +02:00
slew_derate_ = drvr_library->slewDerateFromLibrary();
}
// Find Ceff, delta_t and t0 for the driver.
2020-11-04 22:39:36 +01:00
void
2020-11-03 02:14:48 +01:00
DmpAlg::findDriverParams(double ceff)
2018-09-28 17:54:21 +02:00
{
2021-01-06 05:04:12 +01:00
if (nr_order_ == 3)
x_[DmpParam::ceff] = ceff;
2018-09-28 17:54:21 +02:00
double t_vth, t_vl, slew;
gateDelays(ceff, t_vth, t_vl, slew);
2020-11-07 22:28:47 +01:00
// Scale slew to 0-100%
2018-09-28 17:54:21 +02:00
double dt = slew / (vh_ - vl_);
double t0 = t_vth + std::log(1.0 - vth_) * rd_ * ceff - vth_ * dt;
2019-03-13 01:25:53 +01:00
x_[DmpParam::dt] = dt;
x_[DmpParam::t0] = t0;
newtonRaphson(100, x_, nr_order_, driver_param_tol,
[this] () { evalDmpEqns(); },
fvec_, fjac_, index_, p_, scale_);
2020-11-04 22:39:36 +01:00
t0_ = x_[DmpParam::t0];
dt_ = x_[DmpParam::dt];
2021-01-01 20:46:51 +01:00
debugPrint(debug_, "dmp_ceff", 3, " t0 = %s dt = %s ceff = %s",
units_->timeUnit()->asString(t0_),
units_->timeUnit()->asString(dt_),
units_->capacitanceUnit()->asString(x_[DmpParam::ceff]));
2020-11-04 22:39:36 +01:00
if (debug_->check("dmp_ceff", 4))
showVo();
2018-09-28 17:54:21 +02:00
}
void
DmpAlg::gateCapDelaySlew(double ceff,
// Return values.
double &delay,
double &slew)
2018-09-28 17:54:21 +02:00
{
2018-11-26 18:15:52 +01:00
ArcDelay model_delay;
Slew model_slew;
gate_model_->gateDelay(pvt_, in_slew_, ceff,
variables_->pocvEnabled(),
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
model_delay, model_slew);
2018-11-26 18:15:52 +01:00
delay = delayAsFloat(model_delay);
slew = delayAsFloat(model_slew);
2018-09-28 17:54:21 +02:00
}
void
DmpAlg::gateDelays(double ceff,
// Return values.
double &t_vth,
double &t_vl,
double &slew)
2018-09-28 17:54:21 +02:00
{
2020-11-07 22:28:47 +01:00
double table_slew;
gateCapDelaySlew(ceff, t_vth, table_slew);
// Convert reported/table slew to measured slew.
slew = table_slew * slew_derate_;
2018-09-28 17:54:21 +02:00
t_vl = t_vth - slew * (vth_ - vl_) / (vh_ - vl_);
}
double
DmpAlg::y(double t,
double t0,
double dt,
double cl)
2018-09-28 17:54:21 +02:00
{
double t1 = t - t0;
if (t1 <= 0.0)
return 0.0;
else if (t1 <= dt)
return y0(t1, cl) / dt;
else
return (y0(t1, cl) - y0(t1 - dt, cl)) / dt;
}
double
DmpAlg::y0(double t,
double cl)
2018-09-28 17:54:21 +02:00
{
return t - rd_ * cl * (1.0 - exp2(-t / (rd_ * cl)));
2018-09-28 17:54:21 +02:00
}
void
DmpAlg::dy(double t,
double t0,
double dt,
double cl,
// Return values.
double &dydt0,
double &dyddt,
double &dydcl)
2018-09-28 17:54:21 +02:00
{
double t1 = t - t0;
if (t1 <= 0.0)
dydt0 = dyddt = dydcl = 0.0;
2020-11-04 22:39:36 +01:00
else if (t1 <= dt) {
2018-09-28 17:54:21 +02:00
dydt0 = -y0dt(t1, cl) / dt;
dyddt = -y0(t1, cl) / (dt * dt);
dydcl = y0dcl(t1, cl) / dt;
}
else {
dydt0 = -(y0dt(t1, cl) - y0dt(t1 - dt, cl)) / dt;
dyddt = -(y0(t1, cl) + y0(t1 - dt, cl)) / (dt * dt)
+ y0dt(t1 - dt, cl) / dt;
dydcl = (y0dcl(t1, cl) - y0dcl(t1 - dt, cl)) / dt;
}
}
double
DmpAlg::y0dt(double t,
double cl)
2018-09-28 17:54:21 +02:00
{
return 1.0 - exp2(-t / (rd_ * cl));
2018-09-28 17:54:21 +02:00
}
double
DmpAlg::y0dcl(double t,
double cl)
2018-09-28 17:54:21 +02:00
{
return rd_ * ((1.0 + t / (rd_ * cl)) * exp2(-t / (rd_ * cl)) - 1);
2018-09-28 17:54:21 +02:00
}
void
DmpAlg::showX()
{
for (int i = 0; i < nr_order_; i++)
2020-12-29 19:33:22 +01:00
report_->reportLine("%4s %12.3e", dmp_param_index_strings[i], x_[i]);
2018-09-28 17:54:21 +02:00
}
void
DmpAlg::showFvec()
{
for (int i = 0; i < nr_order_; i++)
2020-12-29 19:33:22 +01:00
report_->reportLine("%4s %12.3e", dmp_func_index_strings[i], fvec_[i]);
2018-09-28 17:54:21 +02:00
}
void
DmpAlg::showJacobian()
{
std::string line = " ";
2018-09-28 17:54:21 +02:00
for (int j = 0; j < nr_order_; j++)
2020-12-29 19:33:22 +01:00
line += stdstrPrint("%12s", dmp_param_index_strings[j]);
2021-01-05 03:14:04 +01:00
report_->reportLineString(line);
2020-12-29 19:33:22 +01:00
line.clear();
2018-09-28 17:54:21 +02:00
for (int i = 0; i < nr_order_; i++) {
2020-12-29 19:33:22 +01:00
line += stdstrPrint("%4s ", dmp_func_index_strings[i]);
2018-09-28 17:54:21 +02:00
for (int j = 0; j < nr_order_; j++)
2020-12-29 19:33:22 +01:00
line += stdstrPrint("%12.3e ", fjac_[i][j]);
2021-01-05 03:14:04 +01:00
report_->reportLineString(line);
2018-09-28 17:54:21 +02:00
}
}
2020-11-04 22:39:36 +01:00
void
DmpAlg::findDriverDelaySlew(// Return values.
double &delay,
double &slew)
2018-09-28 17:54:21 +02:00
{
double t_upper = voCrossingUpperBound();
delay = findVoCrossing(vth_, t0_, t_upper);
double tl = findVoCrossing(vl_, t0_, delay);
double th = findVoCrossing(vh_, delay, t_upper);
2020-11-07 22:28:47 +01:00
// Convert measured slew to table slew.
2020-11-03 02:14:48 +01:00
slew = (th - tl) / slew_derate_;
2018-09-28 17:54:21 +02:00
}
// Find t such that vo(t)=v.
2020-11-03 02:14:48 +01:00
double
DmpAlg::findVoCrossing(double vth,
double t_lower,
double t_upper)
{
FindRootFunc vo_func = [&] (double t,
double &y,
double &dy) {
double vo, vo_dt;
Vo(t, vo, vo_dt);
y = vo - vth;
dy = vo_dt;
};
bool fail;
double t_vth = findRoot(vo_func, t_lower, t_upper, vth_time_tol,
find_root_max_iter, fail);
if (fail)
throw DmpError("find Vo crossing failed");
return t_vth;
2018-09-28 17:54:21 +02:00
}
void
DmpAlg::Vo(double t,
// Return values.
double &vo,
double &dvo_dt)
2018-09-28 17:54:21 +02:00
{
double t1 = t - t0_;
if (t1 <= 0.0) {
vo = 0.0;
dvo_dt = 0.0;
}
else if (t1 <= dt_) {
double v0, dv0_dt;
V0(t1, v0, dv0_dt);
2018-09-28 17:54:21 +02:00
vo = v0 / dt_;
dvo_dt = dv0_dt / dt_;
}
else {
double v0, dv0_dt;
V0(t1, v0, dv0_dt);
double v0_dt, dv0_dt_dt;
V0(t1 - dt_, v0_dt, dv0_dt_dt);
vo = (v0 - v0_dt) / dt_;
dvo_dt = (dv0_dt - dv0_dt_dt) / dt_;
}
2018-09-28 17:54:21 +02:00
}
void
DmpAlg::showVo()
{
2020-12-29 19:33:22 +01:00
report_->reportLine(" t vo(t)");
2018-09-28 17:54:21 +02:00
double ub = voCrossingUpperBound();
for (double t = t0_; t < t0_ + ub; t += dt_ / 10.0) {
double vo, dvo_dt;
Vo(t, vo, dvo_dt);
report_->reportLine(" %g %g", t, vo);
}
2018-09-28 17:54:21 +02:00
}
void
DmpAlg::loadDelaySlew(const Pin *,
double elmore,
ArcDelay &delay,
Slew &slew)
2018-09-28 17:54:21 +02:00
{
2020-11-04 22:39:36 +01:00
if (!driver_valid_
|| elmore == 0.0
// Elmore delay is small compared to driver slew.
|| elmore < drvr_slew_ * 1e-3) {
2020-11-04 21:20:21 +01:00
delay = elmore;
slew = drvr_slew_;
2018-09-28 17:54:21 +02:00
}
else {
// Use the driver thresholds and rely on thresholdAdjust to
// convert the delay and slew to the load's thresholds.
2020-11-04 22:39:36 +01:00
try {
if (debug_->check("dmp_ceff", 4))
showVl();
2020-11-04 22:39:36 +01:00
elmore_ = elmore;
p3_ = 1.0 / elmore;
double t_lower = t0_;
double t_upper = vlCrossingUpperBound();
double load_delay = findVlCrossing(vth_, t_lower, t_upper);
double tl = findVlCrossing(vl_, t_lower, load_delay);
double th = findVlCrossing(vh_, load_delay, t_upper);
2018-09-28 17:54:21 +02:00
// Measure delay from Vo, the load dependent source excitation.
double delay1 = load_delay - vo_delay_;
2020-11-07 22:28:47 +01:00
// Convert measured slew to reported/table slew.
2018-09-28 17:54:21 +02:00
double slew1 = (th - tl) / slew_derate_;
if (delay1 < 0.0) {
// Only report a problem if the difference is significant.
if (-delay1 > vth_time_tol * vo_delay_)
fail("load delay less than zero");
// Use elmore delay.
delay1 = elmore;
2018-09-28 17:54:21 +02:00
}
if (slew1 < drvr_slew_) {
// Only report a problem if the difference is significant.
if ((drvr_slew_ - slew1) > vth_time_tol * drvr_slew_)
fail("load slew less than driver slew");
slew1 = drvr_slew_;
2018-09-28 17:54:21 +02:00
}
2020-11-04 21:20:21 +01:00
delay = delay1;
slew = slew1;
2018-09-28 17:54:21 +02:00
}
2020-11-04 22:39:36 +01:00
catch (DmpError &error) {
fail(error.what());
2020-11-04 21:20:21 +01:00
delay = elmore_;
slew = drvr_slew_;
2018-09-28 17:54:21 +02:00
}
}
}
// Find t such that vl(t)=v.
2020-11-04 22:39:36 +01:00
double
DmpAlg::findVlCrossing(double vth,
double t_lower,
double t_upper)
{
FindRootFunc vl_func = [&] (double t,
double &y,
double &dy) {
double vl, vl_dt;
Vl(t, vl, vl_dt);
y = vl - vth;
dy = vl_dt;
};
bool fail;
double t_vth = findRoot(vl_func, t_lower, t_upper, vth_time_tol,
find_root_max_iter, fail);
if (fail)
throw DmpError("find Vl crossing failed");
return t_vth;
2018-09-28 17:54:21 +02:00
}
double
DmpAlg::vlCrossingUpperBound()
{
return voCrossingUpperBound() + elmore_ * 2.0;
2018-09-28 17:54:21 +02:00
}
void
DmpAlg::Vl(double t,
// Return values.
double &vl,
double &dvl_dt)
2018-09-28 17:54:21 +02:00
{
double t1 = t - t0_;
if (t1 <= 0.0) {
vl = 0.0;
dvl_dt = 0.0;
}
else if (t1 <= dt_) {
double vl0, dvl0_dt;
Vl0(t1, vl0, dvl0_dt);
vl = vl0 / dt_;
dvl_dt = dvl0_dt / dt_;
}
else {
double vl0, dvl0_dt;
Vl0(t1, vl0, dvl0_dt);
2018-09-28 17:54:21 +02:00
double vl0_dt, dvl0_dt_dt;
Vl0(t1 - dt_, vl0_dt, dvl0_dt_dt);
vl = (vl0 - vl0_dt) / dt_;
dvl_dt = (dvl0_dt - dvl0_dt_dt) / dt_;
}
2018-09-28 17:54:21 +02:00
}
void
DmpAlg::showVl()
{
2020-12-29 19:33:22 +01:00
report_->reportLine(" t vl(t)");
2018-09-28 17:54:21 +02:00
double ub = vlCrossingUpperBound();
for (double t = t0_; t < t0_ + ub * 2.0; t += ub / 10.0) {
double vl, dvl_dt;
Vl(t, vl, dvl_dt);
report_->reportLine(" %g %g", t, vl);
}
2018-09-28 17:54:21 +02:00
}
void
DmpAlg::fail(const char *reason)
{
// Report failures with a unique debug flag.
if (debug_->check("dmp_ceff", 1) || debug_->check("dcalc_error", 1))
2020-12-29 19:33:22 +01:00
report_->reportLine("delay_calc: DMP failed - %s c2=%s rpi=%s c1=%s rd=%s",
reason,
units_->capacitanceUnit()->asString(c2_),
units_->resistanceUnit()->asString(rpi_),
units_->capacitanceUnit()->asString(c1_),
units_->resistanceUnit()->asString(rd_));
2018-09-28 17:54:21 +02:00
}
////////////////////////////////////////////////////////////////
// Capacitive load.
class DmpCap : public DmpAlg
{
public:
DmpCap(StaState *sta);
const char *name() override { return "cap"; }
void init(const LibertyLibrary *library,
const LibertyCell *drvr_cell,
const Pvt *pvt,
const GateTableModel *gate_model,
const RiseFall *rf,
double rd,
double in_slew,
double c2,
double rpi,
double c1) override;
void gateDelaySlew(// Return values.
double &delay,
double &slew) override;
void loadDelaySlew(const Pin *,
double elmore,
// Return values.
ArcDelay &delay,
Slew &slew) override;
void evalDmpEqns() override;
double voCrossingUpperBound() override;
2018-09-28 17:54:21 +02:00
private:
void V0(double t,
// Return values.
double &vo,
double &dvo_dt) override;
void Vl0(double t,
// Return values.
double &vl,
double &dvl_dt) override;
2018-09-28 17:54:21 +02:00
};
DmpCap::DmpCap(StaState *sta):
DmpAlg(1, sta)
{
}
void
DmpCap::init(const LibertyLibrary *drvr_library,
const LibertyCell *drvr_cell,
const Pvt *pvt,
const GateTableModel *gate_model,
const RiseFall *rf,
double rd,
double in_slew,
double c2,
double rpi,
double c1)
2018-09-28 17:54:21 +02:00
{
2021-03-13 01:36:13 +01:00
debugPrint(debug_, "dmp_ceff", 3, "Using DMP cap");
2019-11-11 23:30:19 +01:00
DmpAlg::init(drvr_library, drvr_cell, pvt, gate_model, rf,
rd, in_slew, c2, rpi, c1);
2018-09-28 17:54:21 +02:00
ceff_ = c1 + c2;
}
void
DmpCap::gateDelaySlew(// Return values.
double &delay,
double &slew)
2018-09-28 17:54:21 +02:00
{
2021-01-01 20:46:51 +01:00
debugPrint(debug_, "dmp_ceff", 3, " ceff = %s",
units_->capacitanceUnit()->asString(ceff_));
2018-09-28 17:54:21 +02:00
gateCapDelaySlew(ceff_, delay, slew);
drvr_slew_ = slew;
2018-09-28 17:54:21 +02:00
}
void
DmpCap::loadDelaySlew(const Pin *,
double elmore,
ArcDelay &delay,
Slew &slew)
2018-09-28 17:54:21 +02:00
{
2020-11-04 19:05:47 +01:00
delay = elmore;
slew = drvr_slew_;
2018-09-28 17:54:21 +02:00
}
2020-11-04 22:39:36 +01:00
void
2018-09-28 17:54:21 +02:00
DmpCap::evalDmpEqns()
{
}
void
DmpCap::V0(double,
// Return values.
double &vo,
double &dvo_dt)
2018-09-28 17:54:21 +02:00
{
vo = 0.0;
dvo_dt = 0.0;
2018-09-28 17:54:21 +02:00
}
double
DmpCap::voCrossingUpperBound()
{
return 0.0;
}
void
DmpCap::Vl0(double ,
// Return values.
double &vl,
double &dvl_dt)
2018-09-28 17:54:21 +02:00
{
vl = 0.0;
dvl_dt = 0.0;
2018-09-28 17:54:21 +02:00
}
////////////////////////////////////////////////////////////////
// No non-zero pi model parameters, two poles, one zero
class DmpPi : public DmpAlg
{
public:
DmpPi(StaState *sta);
const char *name() override { return "Pi"; }
void init(const LibertyLibrary *library,
const LibertyCell *drvr_cell,
const Pvt *pvt,
const GateTableModel *gate_model,
const RiseFall *rf,
double rd,
double in_slew,
double c2,
double rpi,
double c1) override;
void gateDelaySlew(// Return values.
double &delay,
double &slew) override;
void evalDmpEqns() override;
double voCrossingUpperBound() override;
2018-09-28 17:54:21 +02:00
private:
2020-11-04 22:39:36 +01:00
void findDriverParamsPi();
2018-09-28 17:54:21 +02:00
double ipiIceff(double t0,
double dt,
double ceff_time,
double ceff);
void V0(double t,
// Return values.
double &vo,
double &dvo_dt) override;
void Vl0(double t,
// Return values.
double &vl,
double &dvl_dt) override;
2018-09-28 17:54:21 +02:00
// Poles/zero.
double p1_;
double p2_;
double z1_;
// Residues.
double k0_;
double k1_;
double k2_;
double k3_;
double k4_;
// Ipi coefficients.
double A_;
double B_;
double D_;
};
DmpPi::DmpPi(StaState *sta) :
DmpAlg(3, sta),
p1_(0.0),
p2_(0.0),
z1_(0.0),
k0_(0.0),
k1_(0.0),
k2_(0.0),
k3_(0.0),
k4_(0.0),
A_(0.0),
B_(0.0),
D_(0.0)
{
}
void
DmpPi::init(const LibertyLibrary *drvr_library,
const LibertyCell *drvr_cell,
const Pvt *pvt,
const GateTableModel *gate_model,
const RiseFall *rf,
double rd,
double in_slew,
double c2,
double rpi,
double c1)
2018-09-28 17:54:21 +02:00
{
2021-03-13 01:36:13 +01:00
debugPrint(debug_, "dmp_ceff", 3, "Using DMP Pi");
2019-11-11 23:30:19 +01:00
DmpAlg::init(drvr_library, drvr_cell, pvt, gate_model, rf, rd,
in_slew, c2, rpi, c1);
2018-09-28 17:54:21 +02:00
// Find poles/zeros.
z1_ = 1.0 / (rpi_ * c1_);
k0_ = 1.0 / (rd_ * c2_);
double a = rpi_ * rd_ * c1_ * c2_;
double b = rd_ * (c1_ + c2_) + rpi_ * c1_;
double sqrt_ = std::sqrt(b * b - 4 * a);
2018-09-28 17:54:21 +02:00
p1_ = (b + sqrt_) / (2 * a);
p2_ = (b - sqrt_) / (2 * a);
double p1p2 = (p1_ * p2_);
k2_ = z1_ / p1p2;
k1_ = (1.0 - k2_ * (p1_ + p2_)) / p1p2;
k4_ = (k1_ * p1_ + k2_) / (p2_ - p1_);
k3_ = -k1_ - k4_;
double z_ = (c1_ + c2_) / (rpi_ * c1_ * c2_);
A_ = z_ / p1p2;
B_ = (z_ - p1_) / (p1_ * (p1_ - p2_));
D_ = (z_ - p2_) / (p2_ * (p2_ - p1_));
}
void
DmpPi::gateDelaySlew(// Return values.
double &delay,
double &slew)
2018-09-28 17:54:21 +02:00
{
2020-11-08 18:12:48 +01:00
driver_valid_ = false;
2020-11-04 22:39:36 +01:00
try {
findDriverParamsPi();
2019-03-13 01:25:53 +01:00
ceff_ = x_[DmpParam::ceff];
2020-11-08 18:12:48 +01:00
double table_delay, table_slew;
gateCapDelaySlew(ceff_, table_delay, table_slew);
delay = table_delay;
//slew = table_slew;
2020-11-04 22:39:36 +01:00
try {
2020-11-08 18:12:48 +01:00
double vo_delay, vo_slew;
findDriverDelaySlew(vo_delay, vo_slew);
driver_valid_ = true;
// Save Vo delay to measure load wire delay waveform.
vo_delay_ = vo_delay;
//delay = vo_delay;
2020-11-07 22:28:47 +01:00
slew = vo_slew;
2020-11-04 22:39:36 +01:00
}
catch (DmpError &error) {
fail(error.what());
2020-11-03 02:14:48 +01:00
// Fall back to table slew.
2018-09-28 17:54:21 +02:00
slew = table_slew;
2020-11-03 02:14:48 +01:00
}
2018-09-28 17:54:21 +02:00
}
2020-11-04 22:39:36 +01:00
catch (DmpError &error) {
fail(error.what());
// Driver calculation failed - use Ceff=c1+c2.
ceff_ = c1_ + c2_;
gateCapDelaySlew(ceff_, delay, slew);
}
drvr_slew_ = slew;
2018-09-28 17:54:21 +02:00
}
2020-11-04 22:39:36 +01:00
void
2018-09-28 17:54:21 +02:00
DmpPi::findDriverParamsPi()
{
2020-11-04 22:39:36 +01:00
try {
findDriverParams(c2_ + c1_);
}
catch (DmpError &) {
findDriverParams(c2_);
}
2018-09-28 17:54:21 +02:00
}
// Given x_ as a vector of input parameters, fill fvec_ with the
// equations evaluated at x_ and fjac_ with the jacobian evaluated at x_.
2020-11-04 22:39:36 +01:00
void
2018-09-28 17:54:21 +02:00
DmpPi::evalDmpEqns()
{
2019-03-13 01:25:53 +01:00
double t0 = x_[DmpParam::t0];
double dt = x_[DmpParam::dt];
double ceff = x_[DmpParam::ceff];
2018-09-28 17:54:21 +02:00
2020-11-04 22:39:36 +01:00
if (ceff < 0.0)
throw DmpError("eqn eval failed: ceff < 0");
if (ceff > (c1_ + c2_))
throw DmpError("eqn eval failed: ceff > c2 + c1");
2018-09-28 17:54:21 +02:00
double t_vth, t_vl, slew;
gateDelays(ceff, t_vth, t_vl, slew);
if (slew == 0.0)
throw DmpError("eqn eval failed: slew = 0");
2018-09-28 17:54:21 +02:00
double ceff_time = slew / (vh_ - vl_);
if (ceff_time > 1.4 * dt)
ceff_time = 1.4 * dt;
if (dt <= 0.0)
2020-11-04 22:39:36 +01:00
throw DmpError("eqn eval failed: dt < 0");
2018-09-28 17:54:21 +02:00
double exp_p1_dt = exp2(-p1_ * dt);
double exp_p2_dt = exp2(-p2_ * dt);
double exp_dt_rd_ceff = exp2(-dt / (rd_ * ceff));
2018-09-28 17:54:21 +02:00
2020-11-08 18:12:48 +01:00
double y50 = y(t_vth, t0, dt, ceff);
// Match Vl.
double y20 = y(t_vl, t0, dt, ceff);
2019-03-13 01:25:53 +01:00
fvec_[DmpFunc::ipi] = ipiIceff(t0, dt, ceff_time, ceff);
2020-11-08 18:12:48 +01:00
fvec_[DmpFunc::y50] = y50 - vth_;
fvec_[DmpFunc::y20] = y20 - vl_;
2019-03-13 01:25:53 +01:00
fjac_[DmpFunc::ipi][DmpParam::t0] = 0.0;
fjac_[DmpFunc::ipi][DmpParam::dt] =
2018-09-28 17:54:21 +02:00
(-A_ * dt + B_ * dt * exp_p1_dt - (2 * B_ / p1_) * (1.0 - exp_p1_dt)
+ D_ * dt * exp_p2_dt - (2 * D_ / p2_) * (1.0 - exp_p2_dt)
+ rd_ * ceff * (dt + dt * exp_dt_rd_ceff
- 2 * rd_ * ceff * (1.0 - exp_dt_rd_ceff)))
2018-09-28 17:54:21 +02:00
/ (rd_ * dt * dt * dt);
2019-03-13 01:25:53 +01:00
fjac_[DmpFunc::ipi][DmpParam::ceff] =
(2 * rd_ * ceff - dt - (2 * rd_ * ceff + dt) * exp2(-dt / (rd_ * ceff)))
2018-09-28 17:54:21 +02:00
/ (dt * dt);
dy(t_vl, t0, dt, ceff,
2019-03-13 01:25:53 +01:00
fjac_[DmpFunc::y20][DmpParam::t0],
fjac_[DmpFunc::y20][DmpParam::dt],
fjac_[DmpFunc::y20][DmpParam::ceff]);
2018-09-28 17:54:21 +02:00
dy(t_vth, t0, dt, ceff,
2019-03-13 01:25:53 +01:00
fjac_[DmpFunc::y50][DmpParam::t0],
fjac_[DmpFunc::y50][DmpParam::dt],
fjac_[DmpFunc::y50][DmpParam::ceff]);
2018-09-28 17:54:21 +02:00
2020-11-03 20:35:13 +01:00
if (debug_->check("dmp_ceff", 4)) {
2018-09-28 17:54:21 +02:00
showX();
showFvec();
showJacobian();
2020-12-29 19:33:22 +01:00
report_->reportLine(".................");
2018-09-28 17:54:21 +02:00
}
}
// Eqn 13, Eqn 14.
double
DmpPi::ipiIceff(double, double dt,
double ceff_time,
double ceff)
2018-09-28 17:54:21 +02:00
{
double exp_p1_dt = exp2(-p1_ * ceff_time);
double exp_p2_dt = exp2(-p2_ * ceff_time);
double exp_dt_rd_ceff = exp2(-ceff_time / (rd_ * ceff));
2018-09-28 17:54:21 +02:00
double ipi = (A_ * ceff_time + (B_ / p1_) * (1.0 - exp_p1_dt)
+ (D_ / p2_) * (1.0 - exp_p2_dt))
2018-09-28 17:54:21 +02:00
/ (rd_ * ceff_time * dt);
double iceff = (rd_ * ceff * ceff_time - (rd_ * ceff) * (rd_ * ceff)
* (1.0 - exp_dt_rd_ceff))
2018-09-28 17:54:21 +02:00
/ (rd_ * ceff_time * dt);
return ipi - iceff;
}
void
DmpPi::V0(double t,
// Return values.
double &vo,
double &dvo_dt)
2018-09-28 17:54:21 +02:00
{
double exp_p1 = exp2(-p1_ * t);
double exp_p2 = exp2(-p2_ * t);
vo = k0_ * (k1_ + k2_ * t + k3_ * exp_p1 + k4_ * exp_p2);
dvo_dt = k0_ * (k2_ - k3_ * p1_ * exp_p1 - k4_ * p2_ * exp_p2);
2018-09-28 17:54:21 +02:00
}
void
DmpPi::Vl0(double t,
// Return values.
double &vl,
double &dvl_dt)
2018-09-28 17:54:21 +02:00
{
double D1 = k0_ * (k1_ - k2_ / p3_);
double D3 = -p3_ * k0_ * k3_ / (p1_ - p3_);
double D4 = -p3_ * k0_ * k4_ / (p2_ - p3_);
double D5 = k0_ * (k2_ / p3_ - k1_ + p3_ * k3_ / (p1_ - p3_)
+ p3_ * k4_ / (p2_ - p3_));
double exp_p1 = exp2(-p1_ * t);
double exp_p2 = exp2(-p2_ * t);
double exp_p3 = exp2(-p3_ * t);
vl = D1 + t + D3 * exp_p1 + D4 * exp_p2 + D5 * exp_p3;
dvl_dt = 1.0 - D3 * p1_ * exp_p1 - D4 * p2_ * exp_p2
- D5 * p3_ * exp_p3;
2018-09-28 17:54:21 +02:00
}
double
DmpPi::voCrossingUpperBound()
{
return t0_ + dt_ + (c1_ + c2_) * (rd_ + rpi_) * 2.0;
}
////////////////////////////////////////////////////////////////
// Capacitive load, so Ceff is known.
// Solve for t0, delta t.
class DmpOnePole : public DmpAlg
{
public:
DmpOnePole(StaState *sta);
void evalDmpEqns() override;
double voCrossingUpperBound() override;
2018-09-28 17:54:21 +02:00
};
DmpOnePole::DmpOnePole(StaState *sta) :
DmpAlg(2, sta)
{
}
2020-11-04 22:39:36 +01:00
void
2018-09-28 17:54:21 +02:00
DmpOnePole::evalDmpEqns()
{
2019-03-13 01:25:53 +01:00
double t0 = x_[DmpParam::t0];
double dt = x_[DmpParam::dt];
2018-09-28 17:54:21 +02:00
2020-11-07 22:28:47 +01:00
double t_vth, t_vl, ignore1, ignore2;
gateDelays(ceff_, t_vth, t_vl, ignore1);
2018-09-28 17:54:21 +02:00
if (dt <= 0.0)
2019-03-13 01:25:53 +01:00
dt = x_[DmpParam::dt] = (t_vl - t_vth) / 100;
2018-09-28 17:54:21 +02:00
2019-03-13 01:25:53 +01:00
fvec_[DmpFunc::y50] = y(t_vth, t0, dt, ceff_) - vth_;
fvec_[DmpFunc::y20] = y(t_vl, t0, dt, ceff_) - vl_;
2018-09-28 17:54:21 +02:00
2020-11-03 20:35:13 +01:00
if (debug_->check("dmp_ceff", 4)) {
2018-09-28 17:54:21 +02:00
showX();
showFvec();
}
dy(t_vl, t0, dt, ceff_,
2019-03-13 01:25:53 +01:00
fjac_[DmpFunc::y20][DmpParam::t0],
fjac_[DmpFunc::y20][DmpParam::dt],
2020-11-07 22:28:47 +01:00
ignore2);
2018-09-28 17:54:21 +02:00
dy(t_vth, t0, dt, ceff_,
2019-03-13 01:25:53 +01:00
fjac_[DmpFunc::y50][DmpParam::t0],
fjac_[DmpFunc::y50][DmpParam::dt],
2020-11-07 22:28:47 +01:00
ignore2);
2018-09-28 17:54:21 +02:00
2020-11-03 20:35:13 +01:00
if (debug_->check("dmp_ceff", 4)) {
2018-09-28 17:54:21 +02:00
showJacobian();
2020-12-29 19:33:22 +01:00
report_->reportLine(".................");
2018-09-28 17:54:21 +02:00
}
}
double
DmpOnePole::voCrossingUpperBound()
{
return t0_ + dt_ + ceff_ * rd_ * 2.0;
}
////////////////////////////////////////////////////////////////
// C2 = 0, one pole, one zero.
class DmpZeroC2 : public DmpOnePole
{
public:
DmpZeroC2(StaState *sta);
const char *name() override { return "c2=0"; }
void init(const LibertyLibrary *drvr_library,
const LibertyCell *drvr_cell,
const Pvt *pvt,
const GateTableModel *gate_model,
const RiseFall *rf,
double rd,
double in_slew,
double c2,
double rpi,
double c1) override;
void gateDelaySlew(// Return values.
double &delay,
double &slew) override;
2018-09-28 17:54:21 +02:00
private:
void V0(double t,
// Return values.
double &vo,
double &dvo_dt) override;
void Vl0(double t,
// Return values.
double &vl,
double &dvl_dt) override;
double voCrossingUpperBound() override;
2018-09-28 17:54:21 +02:00
// Pole/zero.
double p1_;
double z1_;
// Residues.
double k0_;
double k1_;
double k2_;
double k3_;
};
DmpZeroC2::DmpZeroC2(StaState *sta) :
DmpOnePole(sta),
p1_(0.0),
z1_(0.0),
k0_(0.0),
k1_(0.0),
k2_(0.0),
k3_(0.0)
{
}
void
DmpZeroC2::init(const LibertyLibrary *drvr_library,
const LibertyCell *drvr_cell,
const Pvt *pvt,
const GateTableModel *gate_model,
const RiseFall *rf,
double rd,
double in_slew,
double c2,
double rpi,
double c1)
2018-09-28 17:54:21 +02:00
{
2021-03-13 01:36:13 +01:00
debugPrint(debug_, "dmp_ceff", 3, "Using DMP C2=0");
2019-11-11 23:30:19 +01:00
DmpAlg::init(drvr_library, drvr_cell, pvt, gate_model, rf, rd,
in_slew, c2, rpi, c1);
2020-10-31 22:05:28 +01:00
ceff_ = c1;
2018-09-28 17:54:21 +02:00
z1_ = 1.0 / (rpi_ * c1_);
p1_ = 1.0 / (c1_ * (rd_ + rpi_));
k0_ = p1_ / z1_;
k2_ = 1.0 / k0_;
k1_ = (p1_ - z1_) / (p1_ * p1_);
k3_ = -k1_;
}
void
DmpZeroC2::gateDelaySlew(// Return values.
double &delay,
double &slew)
2018-09-28 17:54:21 +02:00
{
2020-11-04 23:33:11 +01:00
try {
findDriverParams(c1_);
ceff_ = c1_;
findDriverDelaySlew(delay, slew);
2020-11-08 18:12:48 +01:00
driver_valid_ = true;
vo_delay_ = delay;
2020-11-04 23:33:11 +01:00
}
catch (DmpError &error) {
fail(error.what());
2020-11-03 02:14:48 +01:00
// Fall back to table slew.
2020-11-04 23:33:11 +01:00
driver_valid_ = false;
ceff_ = c1_;
2018-09-28 17:54:21 +02:00
gateCapDelaySlew(ceff_, delay, slew);
2020-11-03 02:14:48 +01:00
}
drvr_slew_ = slew;
2018-09-28 17:54:21 +02:00
}
void
DmpZeroC2::V0(double t,
// Return values.
double &vo,
double &dvo_dt)
2018-09-28 17:54:21 +02:00
{
double exp_p1 = exp2(-p1_ * t);
vo = k0_ * (k1_ + k2_ * t + k3_ * exp_p1);
dvo_dt = k0_ * (k2_ - k3_ * p1_ * exp_p1);
2018-09-28 17:54:21 +02:00
}
void
DmpZeroC2::Vl0(double t,
// Return values.
double &vl,
double &dvl_dt)
2018-09-28 17:54:21 +02:00
{
double D1 = k0_ * (k1_ - k2_ / p3_);
double D3 = -p3_ * k0_ * k3_ / (p1_ - p3_);
double D5 = k0_ * (k2_ / p3_ - k1_ + p3_ * k3_ / (p1_ - p3_));
double exp_p1 = exp2(-p1_ * t);
double exp_p3 = exp2(-p3_ * t);
vl = D1 + t + D3 * exp_p1 + D5 * exp_p3;
dvl_dt = 1.0 - D3 * p1_ * exp_p1 - D5 * p3_ * exp_p3;
2018-09-28 17:54:21 +02:00
}
double
DmpZeroC2::voCrossingUpperBound()
{
return t0_ + dt_ + c1_ * (rd_ + rpi_) * 2.0;
}
////////////////////////////////////////////////////////////////
// Newton-Raphson iteration to find zeros of a function.
// x_tol is percentage that all changes in x must be less than (1.0 = 100%).
// Eval(state) is called to fill fvec and fjac (returns false if fails).
2020-11-03 02:14:48 +01:00
// Return error msg on failure.
2020-11-04 22:39:36 +01:00
static void
2018-09-28 17:54:21 +02:00
newtonRaphson(const int max_iter,
double x[],
const int size,
const double x_tol,
std::function<void ()> eval,
// Temporaries supplied by caller.
double *fvec,
double **fjac,
int *index,
double *p,
double *scale)
2018-09-28 17:54:21 +02:00
{
for (int k = 0; k < max_iter; k++) {
eval();
2018-09-28 17:54:21 +02:00
for (int i = 0; i < size; i++)
// Right-hand side of linear equations.
p[i] = -fvec[i];
2020-11-04 22:39:36 +01:00
luDecomp(fjac, size, index, scale);
luSolve(fjac, size, index, p);
bool all_under_x_tol = true;
for (int i = 0; i < size; i++) {
if (std::abs(p[i]) > std::abs(x[i]) * x_tol)
all_under_x_tol = false;
2020-11-04 22:39:36 +01:00
x[i] += p[i];
2018-09-28 17:54:21 +02:00
}
2020-11-04 22:39:36 +01:00
if (all_under_x_tol)
return;
2018-09-28 17:54:21 +02:00
}
2020-11-04 22:39:36 +01:00
throw DmpError("Newton-Raphson max iterations exceeded");
2018-09-28 17:54:21 +02:00
}
// luDecomp, luSolve based on MatClass from C. R. Birchenhall,
// University of Manchester
// ftp://ftp.mcc.ac.uk/pub/matclass/libmat.tar.Z
// Crout's Method of LU decomposition of square matrix, with implicit
// partial pivoting. A is overwritten. U is explicit in the upper
// triangle and L is in multiplier form in the subdiagionals i.e. subdiag
// a[i,j] is the multiplier used to eliminate the [i,j] term.
//
// Replaces a[0..size-1][0..size-1] by the LU decomposition.
// index[0..size-1] is an output vector of the row permutations.
2020-11-03 02:14:48 +01:00
// Return error msg on failure.
2020-11-04 22:39:36 +01:00
void
2018-09-28 17:54:21 +02:00
luDecomp(double **a,
const int size,
int *index,
// Temporary supplied by caller.
// scale stores the implicit scaling of each row.
double *scale)
2018-09-28 17:54:21 +02:00
{
// Find implicit scaling factors.
for (int i = 0; i < size; i++) {
double big = 0.0;
for (int j = 0; j < size; j++) {
double temp = std::abs(a[i][j]);
2018-09-28 17:54:21 +02:00
if (temp > big)
big = temp;
2018-09-28 17:54:21 +02:00
}
2020-11-03 02:14:48 +01:00
if (big == 0.0)
2020-11-04 22:39:36 +01:00
throw DmpError("LU decomposition: no non-zero row element");
2018-09-28 17:54:21 +02:00
scale[i] = 1.0 / big;
}
int size_1 = size - 1;
for (int j = 0; j < size; j++) {
// Run down jth column from top to diag, to form the elements of U.
for (int i = 0; i < j; i++) {
double sum = a[i][j];
for (int k = 0; k < i; k++)
sum -= a[i][k] * a[k][j];
2018-09-28 17:54:21 +02:00
a[i][j] = sum;
}
// Run down jth subdiag to form the residuals after the elimination
// of the first j-1 subdiags. These residuals diviyded by the
2018-09-28 17:54:21 +02:00
// appropriate diagonal term will become the multipliers in the
// elimination of the jth. subdiag. Find index of largest scaled
// term in imax.
double big = 0.0;
int imax = 0;
for (int i = j; i < size; i++) {
double sum = a[i][j];
for (int k = 0; k < j; k++)
sum -= a[i][k] * a[k][j];
2018-09-28 17:54:21 +02:00
a[i][j] = sum;
double dum = scale[i] * std::abs(sum);
2018-09-28 17:54:21 +02:00
if (dum >= big) {
big = dum;
imax = i;
2018-09-28 17:54:21 +02:00
}
}
// Permute current row with imax.
if (j != imax) {
// Yes, do so...
for (int k = 0; k < size; k++) {
double dum = a[imax][k];
a[imax][k] = a[j][k];
a[j][k] = dum;
2018-09-28 17:54:21 +02:00
}
scale[imax] = scale[j];
}
index[j] = imax;
// If diag term is not zero divide subdiag to form multipliers.
if (a[j][j] == 0.0)
a[j][j] = tiny_double;
if (j != size_1) {
double pivot = 1.0 / a[j][j];
for (int i = j + 1; i < size; i++)
a[i][j] *= pivot;
2018-09-28 17:54:21 +02:00
}
}
}
// Solves the set of size linear equations a*x=b, assuming A is LU form
// but assume b has not been transformed.
// a[0..size-1] is LU decomposition
// Returns the solution vector x in b.
// a and index are not modified.
void
luSolve(double **a,
const int size,
const int *index,
double b[])
2018-09-28 17:54:21 +02:00
{
// Transform b allowing for leading zeros.
int non_zero = -1;
for (int i = 0; i < size; i++) {
int iperm = index[i];
double sum = b[iperm];
b[iperm] = b[i];
if (non_zero != -1) {
for (int j = non_zero; j <= i - 1; j++)
sum -= a[i][j] * b[j];
2018-09-28 17:54:21 +02:00
}
else {
if (sum != 0.0)
non_zero = i;
2018-09-28 17:54:21 +02:00
}
b[i] = sum;
}
// Backsubstitution.
for (int i = size - 1; i >= 0; i--) {
double sum = b[i];
for (int j = i + 1; j < size; j++)
sum -= a[i][j] * b[j];
b[i] = sum / a[i][i];
}
}
#if 0
// Solve:
// x + y = 5
// x - y = 1
// x = 3
// y = 2
void
testLuDecomp1()
{
double a0[2] = {1, 1};
double a1[2] = {1, -1};
double *a[2] = {a0, a1};
int index[2];
double b[2] = {5, 1};
double scale[2];
luDecomp(a, 2, index, scale);
luSolve(a, 2, index, b);
printf("x = %f y= %f\n", b[0], b[1]);
}
// Solve
// x + 2y = 3
// 3x - 4y = 19
// x = 5
// y = -1
void
testLuDecomp2()
{
double a0[2] = {1, 2};
double a1[2] = {3, -4};
double *a[2] = {a0, a1};
int index[2];
double b[2] = {3, 19};
double scale[2];
luDecomp(a, 2, index, scale);
luSolve(a, 2, index, b);
printf("x = %f y= %f\n", b[0], b[1]);
}
#endif
////////////////////////////////////////////////////////////////
bool DmpCeffDelayCalc::unsuppored_model_warned_ = false;
DmpCeffDelayCalc::DmpCeffDelayCalc(StaState *sta) :
DelayCalc reorg commit 410ed56c2c2d0d7afb0e84d0c65d5ff75234e9e3 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Nov 19 08:44:13 2023 -0700 ArcDelayCalcBase -> DelayCalcBase Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 1fdfebe2838c47f6c1866c8a10b14df6439506e0 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Nov 19 08:25:36 2023 -0700 LumpedCapDelayCalc::inputPortDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 3a5e1d01aaff240b2f71d006d620ccd6a70bce6d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 16:32:32 2023 -0700 gateDelayInit cleanup Signed-off-by: James Cherry <cherry@parallaxsw.com> commit d0133319126ae4a488a7b31679fbf6507c7f6266 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 15:36:12 2023 -0700 mv RCDelayCalc to ArcDelayCalcBase Signed-off-by: James Cherry <cherry@parallaxsw.com> commit fd028e6ba5e092243a84685eb1756a8e4e4bad76 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 14:32:53 2023 -0700 ArcDelayCalcBase Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0ce9cf4c766f7419b998b40aed5af14df97249f1 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 10:57:41 2023 -0700 ParallelArcDelayCalc -> ParallelDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7fa7db6b252f1450fa5b546f5d33d8cb8a94d4bb Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 08:45:01 2023 -0700 parallelGateDelay args Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6b85756774ce049c0f5f123f6d60ebbcd62cdd2b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 19:55:20 2023 -0700 TimingModel cell_ Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e536d6b0ca0d01e2ad8bd609ad20f9a02497d8f5 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 18:07:11 2023 -0700 TimingModel cell_ Signed-off-by: James Cherry <cherry@parallaxsw.com> commit d2d622da4206e06d176e4ae741334fde8df35007 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 17:21:15 2023 -0700 rm drvr_cell from arc dcalc funcs Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 522961e8f58bc1a0f0530a0a5218086280a2bcb0 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 16:24:34 2023 -0700 tr -> rf Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 29aa0ed40345611b9e3a898342ecc17f6355396f Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 13:17:44 2023 -0700 GraphDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 934d9f19c52c62925b23ae9b457f14d25e818f1a Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 12:52:55 2023 -0700 ParallelArcDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit d5687d9482ad0f572b017f0ef806ba8e6ff8b6fa Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 12:16:05 2023 -0700 ParallelArcDelayCalc pvt Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0de501e5bf2329364b572d1360c18d5aedf3b841 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 10:46:22 2023 -0700 ParallelArcDelayCalc::findMultiDrvrGateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit d7457b9e335ed5fa583798e0512914aab6524fcc Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 10:19:01 2023 -0700 mv multi_drvr_slew_factor_ to ParallelArcDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit afec4daa2ab6dd61a2450f1ac8a8cad1ef015a29 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 08:02:40 2023 -0700 MultiDrvrNet::net_caps vector Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b450b3a35616ffc8d85610158a91c5d9483b6958 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 07:46:43 2023 -0700 sic Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 65767403b3b2ab4e6f7552625accf9aa4766628a Author: James Cherry <cherry@parallaxsw.com> Date: Tue Nov 14 17:49:22 2023 -0700 Sta::connectedCap simplify Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 85bdb8f3362413e7b05f49447a0383140cbb924f Author: James Cherry <cherry@parallaxsw.com> Date: Tue Nov 14 16:43:38 2023 -0700 ParallelArcDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 4feea3ba2277d53697b644d79832e309ce98058a Author: James Cherry <cherry@parallaxsw.com> Date: Tue Nov 14 15:10:18 2023 -0700 mv parallel dcalc to arc delay calc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 915ed28a2c05acce6569c7933366ef94da8bfaeb Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 13 17:47:14 2023 -0700 rm MultiDrvrNet::delays_valid_ Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2384eb4e5bdca1410c4bf5e23f35bfb49f013e74 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 13 16:02:57 2023 -0700 mkae MultiDrvrNets on the fly Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2023-11-19 18:04:45 +01:00
LumpedCapDelayCalc(sta),
2018-09-28 17:54:21 +02:00
dmp_cap_(new DmpCap(sta)),
dmp_pi_(new DmpPi(sta)),
dmp_zero_c2_(new DmpZeroC2(sta)),
2019-03-13 01:25:53 +01:00
dmp_alg_(nullptr)
2018-09-28 17:54:21 +02:00
{
}
DmpCeffDelayCalc::~DmpCeffDelayCalc()
{
delete dmp_cap_;
delete dmp_pi_;
delete dmp_zero_c2_;
}
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
ArcDcalcResult
DmpCeffDelayCalc::gateDelay(const Pin *drvr_pin,
const TimingArc *arc,
const Slew &in_slew,
float load_cap,
const Parasitic *parasitic,
const LoadPinIndexMap &load_pin_index_map,
const Scene *scene,
const MinMax *min_max)
2018-09-28 17:54:21 +02:00
{
parasitics_ = scene->parasitics(min_max);
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
const RiseFall *rf = arc->toEdge()->asRiseFall();
DelayCalc reorg commit 410ed56c2c2d0d7afb0e84d0c65d5ff75234e9e3 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Nov 19 08:44:13 2023 -0700 ArcDelayCalcBase -> DelayCalcBase Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 1fdfebe2838c47f6c1866c8a10b14df6439506e0 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Nov 19 08:25:36 2023 -0700 LumpedCapDelayCalc::inputPortDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 3a5e1d01aaff240b2f71d006d620ccd6a70bce6d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 16:32:32 2023 -0700 gateDelayInit cleanup Signed-off-by: James Cherry <cherry@parallaxsw.com> commit d0133319126ae4a488a7b31679fbf6507c7f6266 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 15:36:12 2023 -0700 mv RCDelayCalc to ArcDelayCalcBase Signed-off-by: James Cherry <cherry@parallaxsw.com> commit fd028e6ba5e092243a84685eb1756a8e4e4bad76 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 14:32:53 2023 -0700 ArcDelayCalcBase Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0ce9cf4c766f7419b998b40aed5af14df97249f1 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 10:57:41 2023 -0700 ParallelArcDelayCalc -> ParallelDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7fa7db6b252f1450fa5b546f5d33d8cb8a94d4bb Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 08:45:01 2023 -0700 parallelGateDelay args Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6b85756774ce049c0f5f123f6d60ebbcd62cdd2b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 19:55:20 2023 -0700 TimingModel cell_ Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e536d6b0ca0d01e2ad8bd609ad20f9a02497d8f5 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 18:07:11 2023 -0700 TimingModel cell_ Signed-off-by: James Cherry <cherry@parallaxsw.com> commit d2d622da4206e06d176e4ae741334fde8df35007 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 17:21:15 2023 -0700 rm drvr_cell from arc dcalc funcs Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 522961e8f58bc1a0f0530a0a5218086280a2bcb0 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 16:24:34 2023 -0700 tr -> rf Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 29aa0ed40345611b9e3a898342ecc17f6355396f Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 13:17:44 2023 -0700 GraphDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 934d9f19c52c62925b23ae9b457f14d25e818f1a Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 12:52:55 2023 -0700 ParallelArcDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit d5687d9482ad0f572b017f0ef806ba8e6ff8b6fa Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 12:16:05 2023 -0700 ParallelArcDelayCalc pvt Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0de501e5bf2329364b572d1360c18d5aedf3b841 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 10:46:22 2023 -0700 ParallelArcDelayCalc::findMultiDrvrGateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit d7457b9e335ed5fa583798e0512914aab6524fcc Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 10:19:01 2023 -0700 mv multi_drvr_slew_factor_ to ParallelArcDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit afec4daa2ab6dd61a2450f1ac8a8cad1ef015a29 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 08:02:40 2023 -0700 MultiDrvrNet::net_caps vector Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b450b3a35616ffc8d85610158a91c5d9483b6958 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 07:46:43 2023 -0700 sic Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 65767403b3b2ab4e6f7552625accf9aa4766628a Author: James Cherry <cherry@parallaxsw.com> Date: Tue Nov 14 17:49:22 2023 -0700 Sta::connectedCap simplify Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 85bdb8f3362413e7b05f49447a0383140cbb924f Author: James Cherry <cherry@parallaxsw.com> Date: Tue Nov 14 16:43:38 2023 -0700 ParallelArcDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 4feea3ba2277d53697b644d79832e309ce98058a Author: James Cherry <cherry@parallaxsw.com> Date: Tue Nov 14 15:10:18 2023 -0700 mv parallel dcalc to arc delay calc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 915ed28a2c05acce6569c7933366ef94da8bfaeb Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 13 17:47:14 2023 -0700 rm MultiDrvrNet::delays_valid_ Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2384eb4e5bdca1410c4bf5e23f35bfb49f013e74 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 13 16:02:57 2023 -0700 mkae MultiDrvrNets on the fly Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2023-11-19 18:04:45 +01:00
const LibertyCell *drvr_cell = arc->from()->libertyCell();
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
const LibertyLibrary *drvr_library = drvr_cell->libertyLibrary();
DelayCalc reorg commit 410ed56c2c2d0d7afb0e84d0c65d5ff75234e9e3 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Nov 19 08:44:13 2023 -0700 ArcDelayCalcBase -> DelayCalcBase Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 1fdfebe2838c47f6c1866c8a10b14df6439506e0 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Nov 19 08:25:36 2023 -0700 LumpedCapDelayCalc::inputPortDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 3a5e1d01aaff240b2f71d006d620ccd6a70bce6d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 16:32:32 2023 -0700 gateDelayInit cleanup Signed-off-by: James Cherry <cherry@parallaxsw.com> commit d0133319126ae4a488a7b31679fbf6507c7f6266 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 15:36:12 2023 -0700 mv RCDelayCalc to ArcDelayCalcBase Signed-off-by: James Cherry <cherry@parallaxsw.com> commit fd028e6ba5e092243a84685eb1756a8e4e4bad76 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 14:32:53 2023 -0700 ArcDelayCalcBase Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0ce9cf4c766f7419b998b40aed5af14df97249f1 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 10:57:41 2023 -0700 ParallelArcDelayCalc -> ParallelDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7fa7db6b252f1450fa5b546f5d33d8cb8a94d4bb Author: James Cherry <cherry@parallaxsw.com> Date: Fri Nov 17 08:45:01 2023 -0700 parallelGateDelay args Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6b85756774ce049c0f5f123f6d60ebbcd62cdd2b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 19:55:20 2023 -0700 TimingModel cell_ Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e536d6b0ca0d01e2ad8bd609ad20f9a02497d8f5 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 18:07:11 2023 -0700 TimingModel cell_ Signed-off-by: James Cherry <cherry@parallaxsw.com> commit d2d622da4206e06d176e4ae741334fde8df35007 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 17:21:15 2023 -0700 rm drvr_cell from arc dcalc funcs Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 522961e8f58bc1a0f0530a0a5218086280a2bcb0 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 16:24:34 2023 -0700 tr -> rf Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 29aa0ed40345611b9e3a898342ecc17f6355396f Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 13:17:44 2023 -0700 GraphDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 934d9f19c52c62925b23ae9b457f14d25e818f1a Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 12:52:55 2023 -0700 ParallelArcDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit d5687d9482ad0f572b017f0ef806ba8e6ff8b6fa Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 12:16:05 2023 -0700 ParallelArcDelayCalc pvt Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0de501e5bf2329364b572d1360c18d5aedf3b841 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 10:46:22 2023 -0700 ParallelArcDelayCalc::findMultiDrvrGateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit d7457b9e335ed5fa583798e0512914aab6524fcc Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 10:19:01 2023 -0700 mv multi_drvr_slew_factor_ to ParallelArcDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit afec4daa2ab6dd61a2450f1ac8a8cad1ef015a29 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 08:02:40 2023 -0700 MultiDrvrNet::net_caps vector Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b450b3a35616ffc8d85610158a91c5d9483b6958 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 16 07:46:43 2023 -0700 sic Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 65767403b3b2ab4e6f7552625accf9aa4766628a Author: James Cherry <cherry@parallaxsw.com> Date: Tue Nov 14 17:49:22 2023 -0700 Sta::connectedCap simplify Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 85bdb8f3362413e7b05f49447a0383140cbb924f Author: James Cherry <cherry@parallaxsw.com> Date: Tue Nov 14 16:43:38 2023 -0700 ParallelArcDelayCalc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 4feea3ba2277d53697b644d79832e309ce98058a Author: James Cherry <cherry@parallaxsw.com> Date: Tue Nov 14 15:10:18 2023 -0700 mv parallel dcalc to arc delay calc Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 915ed28a2c05acce6569c7933366ef94da8bfaeb Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 13 17:47:14 2023 -0700 rm MultiDrvrNet::delays_valid_ Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2384eb4e5bdca1410c4bf5e23f35bfb49f013e74 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 13 16:02:57 2023 -0700 mkae MultiDrvrNets on the fly Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2023-11-19 18:04:45 +01:00
GateTableModel *table_model = arc->gateTableModel(scene, min_max);
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
if (table_model && parasitic) {
2018-09-28 17:54:21 +02:00
float in_slew1 = delayAsFloat(in_slew);
float c2, rpi, c1;
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
parasitics_->piModel(parasitic, c2, rpi, c1);
if (std::isnan(c2) || std::isnan(c1) || std::isnan(rpi))
report_->error(1040, "parasitic Pi model has NaNs.");
setCeffAlgorithm(drvr_library, drvr_cell, pinPvt(drvr_pin, scene, min_max),
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
table_model, rf, in_slew1, c2, rpi, c1);
double gate_delay, drvr_slew;
gateDelaySlew(gate_delay, drvr_slew);
ArcDcalcResult dcalc_result(load_pin_index_map.size());
dcalc_result.setGateDelay(gate_delay);
dcalc_result.setDrvrSlew(drvr_slew);
for (const auto &[load_pin, load_idx] : load_pin_index_map) {
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
ArcDelay wire_delay;
Slew load_slew;
loadDelaySlew(load_pin, drvr_slew, rf, drvr_library, parasitic,
wire_delay, load_slew);
dcalc_result.setWireDelay(load_idx, wire_delay);
dcalc_result.setLoadSlew(load_idx, load_slew);
}
return dcalc_result;
2018-09-28 17:54:21 +02:00
}
else {
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
ArcDcalcResult dcalc_result =
LumpedCapDelayCalc::gateDelay(drvr_pin, arc, in_slew, load_cap, parasitic,
load_pin_index_map, scene, min_max);
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
if (parasitic
&& !unsuppored_model_warned_) {
2018-09-28 17:54:21 +02:00
unsuppored_model_warned_ = true;
report_->warn(1041, "cell %s delay model not supported on SPF parasitics by DMP delay calculator",
drvr_cell->name());
2018-09-28 17:54:21 +02:00
}
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
return dcalc_result;
2018-09-28 17:54:21 +02:00
}
}
void
DmpCeffDelayCalc::setCeffAlgorithm(const LibertyLibrary *drvr_library,
const LibertyCell *drvr_cell,
const Pvt *pvt,
const GateTableModel *gate_model,
const RiseFall *rf,
double in_slew,
double c2,
double rpi,
double c1)
2018-09-28 17:54:21 +02:00
{
2020-11-04 19:05:47 +01:00
double rd = 0.0;
if (gate_model) {
2020-11-08 20:44:00 +01:00
rd = gateModelRd(drvr_cell, gate_model, rf, in_slew, c2, c1,
pvt, variables_->pocvEnabled());
2020-11-04 19:05:47 +01:00
// Zero Rd means the table is constant and thus independent of load cap.
if (rd < 1e-2
// Rpi is small compared to Rd, which makes the load capacitive.
|| rpi < rd * 1e-3
// c1/Rpi can be ignored.
|| (c1 == 0.0 || c1 < c2 * 1e-3 || rpi == 0.0))
2020-11-04 19:05:47 +01:00
dmp_alg_ = dmp_cap_;
else if (c2 < c1 * 1e-3)
dmp_alg_ = dmp_zero_c2_;
else
// The full monty.
dmp_alg_ = dmp_pi_;
}
2018-09-28 17:54:21 +02:00
else
2020-11-04 19:05:47 +01:00
dmp_alg_ = dmp_cap_;
2018-09-28 17:54:21 +02:00
dmp_alg_->init(drvr_library, drvr_cell, pvt, gate_model,
rf, rd, in_slew, c2, rpi, c1);
2021-01-01 20:46:51 +01:00
debugPrint(debug_, "dmp_ceff", 3,
" DMP in_slew = %s c2 = %s rpi = %s c1 = %s Rd = %s (%s alg)",
units_->timeUnit()->asString(in_slew),
units_->capacitanceUnit()->asString(c2),
units_->resistanceUnit()->asString(rpi),
units_->capacitanceUnit()->asString(c1),
units_->resistanceUnit()->asString(rd),
dmp_alg_->name());
2018-09-28 17:54:21 +02:00
}
std::string
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
DmpCeffDelayCalc::reportGateDelay(const Pin *drvr_pin,
const TimingArc *arc,
const Slew &in_slew,
float load_cap,
const Parasitic *parasitic,
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
const LoadPinIndexMap &load_pin_index_map,
const Scene *scene,
const MinMax *min_max,
int digits)
2018-09-28 17:54:21 +02:00
{
ArcDcalcResult dcalc_result = gateDelay(drvr_pin, arc, in_slew, load_cap,
parasitic, load_pin_index_map, scene, min_max);
GateTableModel *model = arc->gateTableModel(scene, min_max);
2018-09-28 17:54:21 +02:00
float c_eff = 0.0;
std::string result;
const LibertyCell *drvr_cell = arc->to()->libertyCell();
const LibertyLibrary *drvr_library = drvr_cell->libertyLibrary();
const Units *units = drvr_library->units();
const Unit *cap_unit = units->capacitanceUnit();
const Unit *res_unit = units->resistanceUnit();
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
if (parasitic && dmp_alg_) {
Parasitics *parasitics = scene->parasitics(min_max);
2019-02-18 19:56:38 +01:00
c_eff = dmp_alg_->ceff();
2018-09-28 17:54:21 +02:00
float c2, rpi, c1;
parasitics->piModel(parasitic, c2, rpi, c1);
result += "Pi model C2=";
result += cap_unit->asString(c2, digits);
result += " Rpi=";
result += res_unit->asString(rpi, digits);
result += " C1=";
result += cap_unit->asString(c1, digits);
result += ", Ceff=";
result += cap_unit->asString(c_eff, digits);
result += '\n';
2018-09-28 17:54:21 +02:00
}
else
c_eff = load_cap;
if (model) {
const Unit *time_unit = units->timeUnit();
2018-09-28 17:54:21 +02:00
float in_slew1 = delayAsFloat(in_slew);
result += model->reportGateDelay(pinPvt(drvr_pin, scene, min_max),
in_slew1, c_eff,
variables_->pocvEnabled(), digits);
result += "Driver waveform slew = ";
float drvr_slew = delayAsFloat(dcalc_result.drvrSlew());
result += time_unit->asString(drvr_slew, digits);
result += '\n';
2018-09-28 17:54:21 +02:00
}
return result;
2018-09-28 17:54:21 +02:00
}
static double
gateModelRd(const LibertyCell *cell,
const GateTableModel *gate_model,
const RiseFall *rf,
double in_slew,
double c2,
double c1,
const Pvt *pvt,
bool pocv_enabled)
2018-09-28 17:54:21 +02:00
{
2020-11-08 20:44:00 +01:00
float cap1 = c1 + c2;
2020-11-04 18:30:42 +01:00
float cap2 = cap1 + 1e-15;
2018-11-26 18:15:52 +01:00
ArcDelay d1, d2;
Slew s1, s2;
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
gate_model->gateDelay(pvt, in_slew, cap1, pocv_enabled, d1, s1);
gate_model->gateDelay(pvt, in_slew, cap2, pocv_enabled, d2, s2);
2020-11-08 20:44:00 +01:00
double vth = cell->libertyLibrary()->outputThreshold(rf);
float rd = -std::log(vth) * std::abs(delayAsFloat(d1) - delayAsFloat(d2)) / (cap2 - cap1);
2020-11-04 18:30:42 +01:00
return rd;
2018-09-28 17:54:21 +02:00
}
void
DmpCeffDelayCalc::gateDelaySlew(// Return values.
double &delay,
double &slew)
2018-09-28 17:54:21 +02:00
{
dmp_alg_->gateDelaySlew(delay, slew);
}
void
ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry <cherry@parallaxsw.com> commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry <cherry@parallaxsw.com> commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry <cherry@parallaxsw.com> Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry <cherry@parallaxsw.com> commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry <cherry@parallaxsw.com> Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry <cherry@parallaxsw.com> Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
2024-01-07 21:44:04 +01:00
DmpCeffDelayCalc::loadDelaySlewElmore(const Pin *load_pin,
double elmore,
ArcDelay &delay,
Slew &slew)
2018-09-28 17:54:21 +02:00
{
if (dmp_alg_)
dmp_alg_->loadDelaySlew(load_pin, elmore, delay, slew);
}
// Notify algorithm components.
void
DmpCeffDelayCalc::copyState(const StaState *sta)
{
StaState::copyState(sta);
dmp_cap_->copyState(sta);
dmp_pi_->copyState(sta);
dmp_zero_c2_->copyState(sta);
}
2020-11-04 22:39:36 +01:00
DmpError::DmpError(const char *what) :
what_(what)
{
//printf("DmpError %s\n", what);
}
// This saves about 2.5% in overall run time on designs with SPEF.
// https://codingforspeed.com/using-faster-exponential-approximation
static double
exp2(double x)
{
if (x < -12.0)
// exp(-12) = 6.1e-6
return 0.0;
else {
double y = 1.0 + x / 4096.0;
y *= y;
y *= y;
y *= y;
y *= y;
y *= y;
y *= y;
y *= y;
y *= y;
y *= y;
y *= y;
y *= y;
y *= y;
return y;
}
}
2018-09-28 17:54:21 +02:00
} // namespace