power - leakage power
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
8fe8fdc7aa
commit
9d69dfbc4f
|
|
@ -4,6 +4,7 @@ read_verilog gcd_sky130hd.v
|
||||||
link_design gcd
|
link_design gcd
|
||||||
|
|
||||||
read_sdc gcd_sky130hd.sdc
|
read_sdc gcd_sky130hd.sdc
|
||||||
|
set_propagated_clock clk
|
||||||
read_spef gcd_sky130hd.spef
|
read_spef gcd_sky130hd.spef
|
||||||
set_power_activity -input -activity .1
|
set_power_activity -input -activity .1
|
||||||
set_power_activity -input_port reset -activity 0
|
set_power_activity -input_port reset -activity 0
|
||||||
|
|
|
||||||
|
|
@ -363,7 +363,7 @@ PropActivityVisitor::visit(Vertex *vertex)
|
||||||
Edge *edge = edge_iter.next();
|
Edge *edge = edge_iter.next();
|
||||||
if (edge->isWire()) {
|
if (edge->isWire()) {
|
||||||
Vertex *from_vertex = edge->from(graph_);
|
Vertex *from_vertex = edge->from(graph_);
|
||||||
const Pin *from_pin = from_vertex->pin();
|
const Pin *from_pin = from_vertex->pin();
|
||||||
PwrActivity &from_activity = power_->activity(from_pin);
|
PwrActivity &from_activity = power_->activity(from_pin);
|
||||||
PwrActivity to_activity(from_activity.activity(),
|
PwrActivity to_activity(from_activity.activity(),
|
||||||
from_activity.duty(),
|
from_activity.duty(),
|
||||||
|
|
@ -436,7 +436,8 @@ PropActivityVisitor::setActivityCheck(const Pin *pin,
|
||||||
float activity_delta = abs(activity.activity() - prev_activity.activity());
|
float activity_delta = abs(activity.activity() - prev_activity.activity());
|
||||||
float duty_delta = abs(activity.duty() - prev_activity.duty());
|
float duty_delta = abs(activity.duty() - prev_activity.duty());
|
||||||
if (activity_delta > change_tolerance_
|
if (activity_delta > change_tolerance_
|
||||||
|| duty_delta > change_tolerance_) {
|
|| duty_delta > change_tolerance_
|
||||||
|
|| activity.origin() != prev_activity.origin()) {
|
||||||
max_change_ = max(max_change_, activity_delta);
|
max_change_ = max(max_change_, activity_delta);
|
||||||
max_change_ = max(max_change_, duty_delta);
|
max_change_ = max(max_change_, duty_delta);
|
||||||
power_->setActivity(pin, activity);
|
power_->setActivity(pin, activity);
|
||||||
|
|
@ -1016,7 +1017,7 @@ isPositiveUnate(const LibertyCell *cell,
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void
|
void
|
||||||
Power::findLeakagePower(const Instance *,
|
Power::findLeakagePower(const Instance *inst,
|
||||||
LibertyCell *cell,
|
LibertyCell *cell,
|
||||||
const Corner *corner,
|
const Corner *corner,
|
||||||
// Return values.
|
// Return values.
|
||||||
|
|
@ -1031,21 +1032,16 @@ Power::findLeakagePower(const Instance *,
|
||||||
for (LeakagePower *leak : *corner_cell->leakagePowers()) {
|
for (LeakagePower *leak : *corner_cell->leakagePowers()) {
|
||||||
FuncExpr *when = leak->when();
|
FuncExpr *when = leak->when();
|
||||||
if (when) {
|
if (when) {
|
||||||
FuncExprPortIterator port_iter(when);
|
PwrActivity cond_activity = evalActivity(when, inst);
|
||||||
float duty = 1.0;
|
float cond_duty = cond_activity.duty();
|
||||||
while (port_iter.hasNext()) {
|
|
||||||
LibertyPort *port = port_iter.next();
|
|
||||||
if (port->direction()->isAnyInput())
|
|
||||||
duty *= port->isClock() ? 0.25 : 0.5;
|
|
||||||
}
|
|
||||||
debugPrint(debug_, "power", 2, "leakage %s %s %.3e * %.2f",
|
debugPrint(debug_, "power", 2, "leakage %s %s %.3e * %.2f",
|
||||||
cell->name(),
|
cell->name(),
|
||||||
when->asString(),
|
when->asString(),
|
||||||
leak->power(),
|
leak->power(),
|
||||||
duty);
|
cond_duty);
|
||||||
cond_leakage += leak->power() * duty;
|
cond_leakage += leak->power() * cond_duty;
|
||||||
if (leak->power() > 0.0)
|
if (leak->power() > 0.0)
|
||||||
cond_duty_sum += duty;
|
cond_duty_sum += cond_duty;
|
||||||
found_cond = true;
|
found_cond = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -1152,7 +1148,7 @@ Power::findActivity(const Pin *pin)
|
||||||
if (activity.origin() != PwrActivityOrigin::unknown)
|
if (activity.origin() != PwrActivityOrigin::unknown)
|
||||||
return activity;
|
return activity;
|
||||||
}
|
}
|
||||||
return input_activity_;
|
return PwrActivity(0.0, 0.0, PwrActivityOrigin::unknown);
|
||||||
}
|
}
|
||||||
|
|
||||||
PwrActivity
|
PwrActivity
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue