From cbf6370597c7f3e791f83c8f302b2b247aac415d Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 18 Aug 2022 14:18:14 -0700 Subject: [PATCH] power activity propagtion from annootated reg pins Signed-off-by: James Cherry --- search/Power.cc | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/search/Power.cc b/search/Power.cc index 6a8281ef..f3283bc7 100644 --- a/search/Power.cc +++ b/search/Power.cc @@ -330,10 +330,16 @@ PropActivityVisitor::visit(Vertex *vertex) Pin *pin = vertex->pin(); debugPrint(debug_, "power_activity", 3, "visit %s", vertex->name(network_)); - if (power_->hasUserActivity(pin)) - power_->setActivity(pin, power_->userActivity(pin)); + bool input_without_activity = false; + if (power_->hasUserActivity(pin)) { + PwrActivity &activity = power_->userActivity(pin); + debugPrint(debug_, "power_activity", 3, "set %s %.2e %.2f", + vertex->name(network_), + activity.activity(), + activity.duty()); + power_->setActivity(pin, activity); + } else { - bool input_without_activity = false; if (network_->isLoad(pin)) { VertexInEdgeIterator edge_iter(vertex, graph_); if (edge_iter.hasNext()) { @@ -350,14 +356,6 @@ PropActivityVisitor::visit(Vertex *vertex) power_->setActivity(pin, to_activity); } } - Instance *inst = network_->instance(pin); - LibertyCell *cell = network_->libertyCell(inst); - if (cell && cell->hasSequentials()) { - debugPrint(debug_, "power_activity", 3, "pending reg %s", - network_->pathName(inst)); - visited_regs_->insert(inst); - found_reg_without_activity_ = input_without_activity; - } } if (network_->isDriver(pin)) { LibertyPort *port = network_->libertyPort(pin); @@ -375,6 +373,16 @@ PropActivityVisitor::visit(Vertex *vertex) } } } + if (network_->isLoad(pin)) { + Instance *inst = network_->instance(pin); + LibertyCell *cell = network_->libertyCell(inst); + if (cell && cell->hasSequentials()) { + debugPrint(debug_, "power_activity", 3, "pending reg %s", + network_->pathName(inst)); + visited_regs_->insert(inst); + found_reg_without_activity_ |= input_without_activity; + } + } bfs_->enqueueAdjacentVertices(vertex); }