parent
ffec2a1db0
commit
4f013dabd7
|
|
@ -24,6 +24,7 @@
|
|||
#include "DcalcAnalysisPt.hh"
|
||||
#include "GraphDelayCalc.hh"
|
||||
#include "DmpCeff.hh"
|
||||
#include "Network.hh"
|
||||
|
||||
namespace sta {
|
||||
|
||||
|
|
@ -302,7 +303,7 @@ DmpCeffTwoPoleDelayCalc::loadDelay(const Pin *load_pin,
|
|||
ArcDelay &wire_delay,
|
||||
Slew &load_slew)
|
||||
{
|
||||
// NEED to handle PiElmore parasitic.
|
||||
// Should handle PiElmore parasitic.
|
||||
ArcDelay wire_delay1 = 0.0;
|
||||
Slew load_slew1 = drvr_slew_;
|
||||
Parasitic *pole_residue = 0;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ public:
|
|||
// Return values.
|
||||
ArcDelay &gate_delay,
|
||||
Slew &drvr_slew) override;
|
||||
void setMultiDrvrSlewFactor(float) override;
|
||||
void setMultiDrvrSlewFactor(float factor) override;
|
||||
float ceff(const LibertyCell *drvr_cell,
|
||||
const TimingArc *arc,
|
||||
const Slew &in_slew,
|
||||
|
|
|
|||
|
|
@ -62,16 +62,10 @@ RCDelayCalc::dspfWireDelaySlew(const Pin *,
|
|||
ArcDelay &wire_delay,
|
||||
Slew &load_slew)
|
||||
{
|
||||
float vth = .5;
|
||||
float vl = .2;
|
||||
float vh = .8;
|
||||
float slew_derate = 1.0;
|
||||
if (drvr_library_) {
|
||||
vth = drvr_library_->inputThreshold(drvr_rf_);
|
||||
vl = drvr_library_->slewLowerThreshold(drvr_rf_);
|
||||
vh = drvr_library_->slewUpperThreshold(drvr_rf_);
|
||||
slew_derate = drvr_library_->slewDerateFromLibrary();
|
||||
}
|
||||
float vth = drvr_library_->inputThreshold(drvr_rf_);
|
||||
float vl = drvr_library_->slewLowerThreshold(drvr_rf_);
|
||||
float vh = drvr_library_->slewUpperThreshold(drvr_rf_);
|
||||
float slew_derate = drvr_library_->slewDerateFromLibrary();
|
||||
wire_delay = static_cast<float>(-elmore * log(1.0 - vth));
|
||||
load_slew = (drvr_slew_ + elmore * log((1.0 - vl) / (1.0 - vh))
|
||||
/ slew_derate) * multi_drvr_slew_factor_;
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ class DcalcAnalysisPt;
|
|||
// DmpCeffDelayCalc
|
||||
// DmpCeffElmoreDelayCalc
|
||||
// DmpCeffTwoPoleDelayCalc
|
||||
// ArnoldiDelayCalc
|
||||
|
||||
// Abstract class to interface to a delay calculator primitive.
|
||||
class ArcDelayCalc : public StaState
|
||||
|
|
|
|||
|
|
@ -1717,13 +1717,11 @@ OutputWaveforms::voltageTimes(size_t wave_index,
|
|||
float prev_current = currents->value(0);
|
||||
float voltage = 0.0;
|
||||
volts.push_back(voltage);
|
||||
bool always_rise = true;
|
||||
bool invert = (always_rise && rf_ == RiseFall::fall());
|
||||
for (size_t i = 1; i < time_axis->size(); i++) {
|
||||
float time = time_axis->axisValue(i);
|
||||
float current = currents->value(i);
|
||||
float dv = (current + prev_current) / 2.0 * (time - prev_time) / cap;
|
||||
voltage += invert ? -dv : dv;
|
||||
voltage += dv;
|
||||
volts.push_back(voltage);
|
||||
prev_time = time;
|
||||
prev_current = current;
|
||||
|
|
|
|||
Loading…
Reference in New Issue