leakage power
This commit is contained in:
parent
248bd95b6e
commit
b246217bad
|
|
@ -737,11 +737,11 @@ Power::findLeakagePower(const Instance *,
|
||||||
FuncExpr *when = leak->when();
|
FuncExpr *when = leak->when();
|
||||||
if (when) {
|
if (when) {
|
||||||
FuncExprPortIterator port_iter(when);
|
FuncExprPortIterator port_iter(when);
|
||||||
float duty = 2.0;
|
float duty = 1.0;
|
||||||
while (port_iter.hasNext()) {
|
while (port_iter.hasNext()) {
|
||||||
auto port = port_iter.next();
|
auto port = port_iter.next();
|
||||||
if (port->direction()->isAnyInput())
|
if (port->direction()->isAnyInput())
|
||||||
duty *= .5;
|
duty *= port->isClock() ? 0.25 : 0.5;
|
||||||
}
|
}
|
||||||
debugPrint4(debug_, "power", 2, "leakage %s %s %.3e * %.2f\n",
|
debugPrint4(debug_, "power", 2, "leakage %s %s %.3e * %.2f\n",
|
||||||
cell->name(),
|
cell->name(),
|
||||||
|
|
@ -760,21 +760,23 @@ Power::findLeakagePower(const Instance *,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
float leakage = 0.0;
|
float leakage = 0.0;
|
||||||
float leak;
|
float cell_leakage;
|
||||||
bool exists;
|
bool cell_leakage_exists;
|
||||||
cell->leakagePower(leak, exists);
|
cell->leakagePower(cell_leakage, cell_leakage_exists);
|
||||||
if (exists) {
|
if (cell_leakage_exists)
|
||||||
// Prefer cell_leakage_power until propagated activities exist.
|
|
||||||
debugPrint2(debug_, "power", 2, "leakage cell %s %.3e\n",
|
debugPrint2(debug_, "power", 2, "leakage cell %s %.3e\n",
|
||||||
cell->name(),
|
cell->name(),
|
||||||
leak);
|
cell_leakage);
|
||||||
leakage = leak;
|
|
||||||
}
|
|
||||||
// Ignore default leakages unless there are no conditional leakage groups.
|
// Ignore default leakages unless there are no conditional leakage groups.
|
||||||
else if (found_cond)
|
if (found_cond)
|
||||||
leakage = cond_leakage;
|
leakage = cond_leakage;
|
||||||
else if (found_default)
|
else if (found_default)
|
||||||
leakage = default_leakage;
|
leakage = default_leakage;
|
||||||
|
else if (cell_leakage_exists)
|
||||||
|
leakage = cell_leakage;
|
||||||
|
debugPrint2(debug_, "power", 2, "leakage cell %s %.3e\n",
|
||||||
|
cell->name(),
|
||||||
|
leakage);
|
||||||
result.setLeakage(result.leakage() + leakage);
|
result.setLeakage(result.leakage() + leakage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue