Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2023-02-25 08:32:52 -07:00
parent 5fbe059b61
commit 830a8dbbfc
2 changed files with 13 additions and 15 deletions

View File

@ -265,8 +265,8 @@ protected:
double *p_; double *p_;
int *index_; int *index_;
// Gate slew used to check load delay. // Driver slew used to check load delay.
double gate_slew_; double drvr_slew_;
double vo_delay_; double vo_delay_;
// True if the driver parameters are valid for finding the load delays. // True if the driver parameters are valid for finding the load delays.
bool driver_valid_; bool driver_valid_;
@ -565,9 +565,9 @@ DmpAlg::loadDelaySlew(const Pin *,
if (!driver_valid_ if (!driver_valid_
|| elmore == 0.0 || elmore == 0.0
// Elmore delay is small compared to driver slew. // Elmore delay is small compared to driver slew.
|| elmore < gate_slew_ * 1e-3) { || elmore < drvr_slew_ * 1e-3) {
delay = elmore; delay = elmore;
slew = gate_slew_; slew = drvr_slew_;
} }
else { else {
// Use the driver thresholds and rely on thresholdAdjust to // Use the driver thresholds and rely on thresholdAdjust to
@ -591,18 +591,18 @@ DmpAlg::loadDelaySlew(const Pin *,
// Use elmore delay. // Use elmore delay.
delay1 = elmore; delay1 = elmore;
} }
if (slew1 < gate_slew_) { if (slew1 < drvr_slew_) {
// Only report a problem if the difference is significant. // Only report a problem if the difference is significant.
if ((gate_slew_ - slew1) > vth_time_tol * gate_slew_) if ((drvr_slew_ - slew1) > vth_time_tol * drvr_slew_)
fail("load slew less than driver slew"); fail("load slew less than driver slew");
slew1 = gate_slew_; slew1 = drvr_slew_;
} }
delay = delay1; delay = delay1;
slew = slew1; slew = slew1;
} }
catch (DmpError &error) { catch (DmpError &error) {
delay = elmore_; delay = elmore_;
slew = gate_slew_; slew = drvr_slew_;
} }
} }
} }
@ -746,7 +746,7 @@ DmpCap::gateDelaySlew(double &delay,
debugPrint(debug_, "dmp_ceff", 3, " ceff = %s", debugPrint(debug_, "dmp_ceff", 3, " ceff = %s",
units_->capacitanceUnit()->asString(ceff_)); units_->capacitanceUnit()->asString(ceff_));
gateCapDelaySlew(ceff_, delay, slew); gateCapDelaySlew(ceff_, delay, slew);
gate_slew_ = slew; drvr_slew_ = slew;
} }
void void
@ -756,7 +756,7 @@ DmpCap::loadDelaySlew(const Pin *,
Slew &slew) Slew &slew)
{ {
delay = elmore; delay = elmore;
slew = gate_slew_; slew = drvr_slew_;
} }
void void
@ -932,7 +932,7 @@ DmpPi::gateDelaySlew(double &delay,
ceff_ = c1_ + c2_; ceff_ = c1_ + c2_;
gateCapDelaySlew(ceff_, delay, slew); gateCapDelaySlew(ceff_, delay, slew);
} }
gate_slew_ = slew; drvr_slew_ = slew;
} }
void void
@ -1223,7 +1223,7 @@ DmpZeroC2::gateDelaySlew(double &delay,
ceff_ = c1_; ceff_ = c1_;
gateCapDelaySlew(ceff_, delay, slew); gateCapDelaySlew(ceff_, delay, slew);
} }
gate_slew_ = slew; drvr_slew_ = slew;
} }
double double

View File

@ -3962,10 +3962,8 @@ Sta::findElmore(Pin *drvr_pin,
Corner *corner = cmd_corner_; Corner *corner = cmd_corner_;
const ParasiticAnalysisPt *ap = corner->findParasiticAnalysisPt(min_max); const ParasiticAnalysisPt *ap = corner->findParasiticAnalysisPt(min_max);
Parasitic *pi_elmore = parasitics_->findPiElmore(drvr_pin, rf, ap); Parasitic *pi_elmore = parasitics_->findPiElmore(drvr_pin, rf, ap);
if (pi_elmore) { if (pi_elmore)
exists = false;
parasitics_->findElmore(pi_elmore, load_pin, elmore, exists); parasitics_->findElmore(pi_elmore, load_pin, elmore, exists);
}
else else
exists = false; exists = false;
} }