report_power -instance hierarchical

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2023-01-19 19:01:54 -07:00
parent 695b0bed2f
commit 4b009e50dc
4 changed files with 29 additions and 0 deletions

Binary file not shown.

Binary file not shown.

View File

@ -236,6 +236,11 @@ PowerResult
Power::power(const Instance *inst,
const Corner *corner)
{
if (network_->isHierarchical(inst)) {
PowerResult result;
powerInside(inst, corner, result);
return result;
}
LibertyCell *cell = network_->libertyCell(inst);
if (cell) {
ensureActivities();
@ -244,6 +249,27 @@ Power::power(const Instance *inst,
return PowerResult();
}
void
Power::powerInside(const Instance *hinst,
const Corner *corner,
PowerResult &result)
{
InstanceChildIterator *child_iter = network_->childIterator(hinst);
while (child_iter->hasNext()) {
Instance *child = child_iter->next();
if (network_->isHierarchical(child))
powerInside(child, corner, result);
else {
LibertyCell *cell = network_->libertyCell(child);
if (cell) {
PowerResult inst_power = power(child, cell, corner);
result.incr(inst_power);
}
}
}
delete child_iter;
}
////////////////////////////////////////////////////////////////
class ActivitySrchPred : public SearchPredNonLatch2

View File

@ -87,6 +87,9 @@ public:
PwrActivity findClkedActivity(const Pin *pin);
protected:
void powerInside(const Instance *hinst,
const Corner *corner,
PowerResult &result);
void ensureActivities();
bool hasUserActivity(const Pin *pin);
PwrActivity &userActivity(const Pin *pin);