From 60eaa584d4ebb61d758084315bc6ad98d179565d Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sat, 2 May 2020 07:48:48 -0700 Subject: [PATCH] power cleanup --- include/sta/Power.hh | 11 ++++------- search/Power.cc | 45 ++++++++++++++------------------------------ 2 files changed, 18 insertions(+), 38 deletions(-) diff --git a/include/sta/Power.hh b/include/sta/Power.hh index cefc09cc..eba496ae 100644 --- a/include/sta/Power.hh +++ b/include/sta/Power.hh @@ -159,7 +159,7 @@ protected: const LibertyPort *to_port, const char *related_pg_pin); FuncExpr *inferedWhen(FuncExpr *expr, - const LibertyPort *from_port); + const LibertyPort *port); LibertyPort *findExprOutPort(FuncExpr *expr); void findInputDuty(const Pin *to_pin, const Instance *inst, @@ -183,12 +183,9 @@ class PowerResult public: PowerResult(); void clear(); - float internal() const { return internal_; } - void setInternal(float internal); - float switching() const { return switching_; } - void setSwitching(float switching); - float leakage() const { return leakage_; } - void setLeakage(float leakage); + float &internal() { return internal_; } + float &switching() { return switching_; } + float &leakage() { return leakage_; } float total() const; void incr(PowerResult &result); diff --git a/search/Power.cc b/search/Power.cc index 1d84bc04..84cfea50 100644 --- a/search/Power.cc +++ b/search/Power.cc @@ -587,7 +587,7 @@ Power::findInputInternalPower(const Pin *pin, LibertyPort *out_port = findExprOutPort(when); if (out_port) { FuncExpr *func = out_port->function(); - // eval cofactor of func wrt inputp + // eval cofactor of func wrt input FuncExpr *sensitize_expr = inferedWhen(func, port); if (sensitize_expr) { duty = evalActivity(sensitize_expr, inst).duty(); @@ -610,7 +610,7 @@ Power::findInputInternalPower(const Pin *pin, related_pg_pin ? related_pg_pin : "no pg_pin"); internal += port_internal; } - result.setInternal(result.internal() + internal); + result.internal() += internal; } } @@ -722,7 +722,7 @@ Power::findOutputInternalPower(const Pin *to_pin, if (infered_when) infered_when->deleteSubexprs(); } - result.setInternal(result.internal() + internal); + result.internal() += internal; } void @@ -796,37 +796,38 @@ negate(FuncExpr *expr) return FuncExpr::makeNot(expr->copy()); } +// Positive shannon cofactor of expr wrt port. FuncExpr * Power::inferedWhen(FuncExpr *expr, - const LibertyPort *from_port) + const LibertyPort *port) { switch (expr->op()) { case FuncExpr::op_port: { - if (expr->port() == from_port) + if (expr->port() == port) return FuncExpr::makeOne(); else return nullptr; } case FuncExpr::op_not: - return inferedWhen(expr->left(), from_port); + return inferedWhen(expr->left(), port); case FuncExpr::op_or: case FuncExpr::op_xor: { - if (isPortRef(expr->left(), from_port)) + if (isPortRef(expr->left(), port)) return negate(expr->right()); - if (isPortRef(expr->right(), from_port)) + if (isPortRef(expr->right(), port)) return negate(expr->left()); break; } case FuncExpr::op_and: { - if (isPortRef(expr->left(), from_port)) + if (isPortRef(expr->left(), port)) return expr->right()->copy(); - if (isPortRef(expr->right(), from_port)) + if (isPortRef(expr->right(), port)) return expr->left()->copy(); break; } case FuncExpr::op_one: case FuncExpr::op_zero: - break; + return expr; } return nullptr; } @@ -920,7 +921,7 @@ Power::findLeakagePower(const Instance *, debugPrint2(debug_, "power", 2, "leakage cell %s %.3e\n", cell->name(), leakage); - result.setLeakage(result.leakage() + leakage); + result.leakage() += leakage; } void @@ -940,7 +941,7 @@ Power::findSwitchingPower(LibertyCell *cell, activity.activity(), volt, switching); - result.setSwitching(result.switching() + switching); + result.switching() += switching; } PwrActivity @@ -1066,24 +1067,6 @@ PowerResult::total() const return internal_ + switching_ + leakage_; } -void -PowerResult::setInternal(float internal) -{ - internal_ = internal; -} - -void -PowerResult::setLeakage(float leakage) -{ - leakage_ = leakage; -} - -void -PowerResult::setSwitching(float switching) -{ - switching_ = switching; -} - void PowerResult::incr(PowerResult &result) {