power ideal clock slews

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2021-10-28 08:38:23 -07:00
parent 28ce2c1d45
commit 28bb1f0eec
2 changed files with 19 additions and 5 deletions

View File

@ -651,9 +651,7 @@ Power::findInputInternalPower(const Pin *pin,
float energy = 0.0;
int rf_count = 0;
for (RiseFall *rf : RiseFall::range()) {
float slew = clk_network_->isIdealClock(pin)
? clk_network_->idealClkSlew(pin, rf, MinMax::max())
: delayAsFloat(graph_->slew(vertex, rf, dcalc_ap->index()));
float slew = getSlew(vertex, rf, corner);
if (!delayInf(slew)) {
float table_energy = pwr->power(rf, pvt, slew, load_cap);
energy += table_energy;
@ -692,6 +690,19 @@ Power::findInputInternalPower(const Pin *pin,
}
}
float
Power::getSlew(Vertex *vertex,
const RiseFall *rf,
const Corner *corner)
{
const DcalcAnalysisPt *dcalc_ap = corner->findDcalcAnalysisPt(MinMax::max());
const Pin *pin = vertex->pin();
if (clk_network_->isIdealClock(pin))
return clk_network_->idealClkSlew(pin, rf, MinMax::max());
else
return delayAsFloat(graph_->slew(vertex, rf, dcalc_ap->index()));
}
LibertyPort *
Power::findExprOutPort(FuncExpr *expr)
{
@ -796,8 +807,7 @@ Power::findOutputInternalPower(const Pin *to_pin,
// Use unateness to find from_rf.
RiseFall *from_rf = positive_unate ? to_rf : to_rf->opposite();
float slew = from_vertex
? delayAsFloat(graph_->slew(from_vertex, from_rf,
dcalc_ap->index()))
? getSlew(from_vertex, from_rf, corner)
: 0.0;
if (!delayInf(slew)) {
float table_energy = pwr->power(to_rf, pvt, slew, load_cap);

View File

@ -31,6 +31,7 @@ class Corner;
class DcalcAnalysisPt;
class PropActivityVisitor;
class BfsFwdIterator;
class Vertex;
typedef std::pair<const Instance*, LibertyPort*> SeqPin;
@ -134,6 +135,9 @@ protected:
const Corner *corner,
// Return values.
PowerResult &result);
float getSlew(Vertex *vertex,
const RiseFall *rf,
const Corner *corner);
const Clock *findInstClk(const Instance *inst);
const Clock *findClk(const Pin *to_pin);
PwrActivity findClkedActivity(const Pin *pin,