leakage power

This commit is contained in:
James Cherry 2020-03-30 20:30:14 -07:00
parent 248bd95b6e
commit b246217bad
1 changed files with 14 additions and 12 deletions

View File

@ -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);
} }