liberty memory management
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
33e480a6c1
commit
7cb71fe766
|
|
@ -56,25 +56,3 @@ LeakagePower::~LeakagePower()
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
>>>>>>>
|
|
||||||
|
|
||||||
namespace sta {
|
|
||||||
|
|
||||||
LeakagePower::LeakagePower(LibertyCell *cell,
|
|
||||||
LibertyPort *related_pg_port,
|
|
||||||
FuncExpr *when,
|
|
||||||
float power) :
|
|
||||||
cell_(cell),
|
|
||||||
related_pg_port_(related_pg_port),
|
|
||||||
when_(when),
|
|
||||||
power_(power)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
LeakagePower::~LeakagePower()
|
|
||||||
{
|
|
||||||
if (when_)
|
|
||||||
when_->deleteSubexprs();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
|
||||||
|
|
@ -2233,23 +2233,12 @@ void
|
||||||
LibertyReader::makeLeakagePowers()
|
LibertyReader::makeLeakagePowers()
|
||||||
{
|
{
|
||||||
for (LeakagePowerGroup *power_group : leakage_powers_) {
|
for (LeakagePowerGroup *power_group : leakage_powers_) {
|
||||||
<<<<<<<
|
|
||||||
=======
|
|
||||||
LibertyPort *related_pg_pin =
|
LibertyPort *related_pg_pin =
|
||||||
cell_->findLibertyPort(power_group->relatedPgPin().c_str());
|
cell_->findLibertyPort(power_group->relatedPgPin().c_str());
|
||||||
cell_->makeLeakagePower(related_pg_pin, power_group->when(), power_group->power());
|
cell_->makeLeakagePower(related_pg_pin, power_group->when(), power_group->power());
|
||||||
delete power_group;
|
delete power_group;
|
||||||
}
|
}
|
||||||
leakage_powers_.clear();
|
leakage_powers_.clear();
|
||||||
>>>>>>>
|
|
||||||
LibertyPort *related_pg_pin =
|
|
||||||
cell_->findLibertyPort(power_group->relatedPgPin().c_str());
|
|
||||||
LeakagePower *leakage = new LeakagePower(cell_, related_pg_pin, power_group->when(),
|
|
||||||
power_group->power());
|
|
||||||
cell_->addLeakagePower(leakage);
|
|
||||||
delete power_group;
|
|
||||||
}
|
|
||||||
leakage_powers_.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Record a reference to a function that will be parsed at the end of
|
// Record a reference to a function that will be parsed at the end of
|
||||||
|
|
@ -6092,8 +6081,6 @@ LeakagePowerGroup::LeakagePowerGroup(int line) :
|
||||||
|
|
||||||
void
|
void
|
||||||
LeakagePowerGroup::setRelatedPgPin(std::string pin_name)
|
LeakagePowerGroup::setRelatedPgPin(std::string pin_name)
|
||||||
<<<<<<<
|
|
||||||
=======
|
|
||||||
{
|
{
|
||||||
related_pg_pin_ = std::move(pin_name);
|
related_pg_pin_ = std::move(pin_name);
|
||||||
}
|
}
|
||||||
|
|
@ -6104,23 +6091,6 @@ LeakagePowerGroup::setWhen(FuncExpr *when)
|
||||||
when_ = when;
|
when_ = when;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
LeakagePowerGroup::setPower(float power)
|
|
||||||
>>>>>>>
|
|
||||||
{
|
|
||||||
<<<<<<<
|
|
||||||
related_pg_pin_ = std::move(pin_name);
|
|
||||||
=======
|
|
||||||
power_ = power;
|
|
||||||
>>>>>>>
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
LeakagePowerGroup::setWhen(FuncExpr *when)
|
|
||||||
{
|
|
||||||
when_ = when;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
LeakagePowerGroup::setPower(float power)
|
LeakagePowerGroup::setPower(float power)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -912,23 +912,6 @@ class LeakagePowerGroup
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LeakagePowerGroup(int line);
|
LeakagePowerGroup(int line);
|
||||||
<<<<<<<
|
|
||||||
=======
|
|
||||||
const std::string &relatedPgPin() const { return related_pg_pin_; }
|
|
||||||
void setRelatedPgPin(std::string pin_name);
|
|
||||||
FuncExpr *when() const { return when_; }
|
|
||||||
void setWhen(FuncExpr *when);
|
|
||||||
float power() const { return power_; }
|
|
||||||
void setPower(float power);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
std::string related_pg_pin_;
|
|
||||||
FuncExpr *when_;
|
|
||||||
float power_;
|
|
||||||
int line_;
|
|
||||||
};
|
|
||||||
|
|
||||||
>>>>>>>
|
|
||||||
const std::string &relatedPgPin() const { return related_pg_pin_; }
|
const std::string &relatedPgPin() const { return related_pg_pin_; }
|
||||||
void setRelatedPgPin(std::string pin_name);
|
void setRelatedPgPin(std::string pin_name);
|
||||||
FuncExpr *when() const { return when_; }
|
FuncExpr *when() const { return when_; }
|
||||||
|
|
|
||||||
|
|
@ -1493,45 +1493,35 @@ Power::findLeakagePower(const Instance *inst,
|
||||||
float uncond_leakage = 0.0;
|
float uncond_leakage = 0.0;
|
||||||
bool found_uncond = false;
|
bool found_uncond = false;
|
||||||
float cond_duty_sum = 0.0;
|
float cond_duty_sum = 0.0;
|
||||||
<<<<<<<
|
for (const LeakagePower &leak : scene_cell->leakagePowers()) {
|
||||||
for (LeakagePower *leak : *scene_cell->leakagePowers()) {
|
LibertyPort *pg_port = leak.relatedPgPort();
|
||||||
LibertyPort *pg_port = leak->relatedPgPort();
|
|
||||||
if (pg_port == nullptr
|
if (pg_port == nullptr
|
||||||
|| pg_port->pwrGndType() == PwrGndType::primary_power) {
|
|| pg_port->pwrGndType() == PwrGndType::primary_power) {
|
||||||
FuncExpr *when = leak->when();
|
FuncExpr *when = leak.when();
|
||||||
=======
|
if (when) {
|
||||||
for (const LeakagePower &leak : scene_cell->leakagePowers()) {
|
PwrActivity cond_activity = evalActivity(when, inst);
|
||||||
FuncExpr *when = leak.when();
|
float cond_duty = cond_activity.duty();
|
||||||
>>>>>>>
|
|
||||||
if (when) {
|
|
||||||
PwrActivity cond_activity = evalActivity(when, inst);
|
|
||||||
float cond_duty = cond_activity.duty();
|
|
||||||
debugPrint(debug_, "power", 2, "leakage %s %s %s %.3e * %.2f",
|
debugPrint(debug_, "power", 2, "leakage %s %s %s %.3e * %.2f",
|
||||||
cell->name(),
|
cell->name(),
|
||||||
leak->relatedPgPort()->name(),
|
leak.relatedPgPort()->name(),
|
||||||
when->to_string().c_str(),
|
when->to_string().c_str(),
|
||||||
leak.power(),
|
leak.power(),
|
||||||
cond_duty);
|
cond_duty);
|
||||||
cond_leakage += leak.power() * cond_duty;
|
cond_leakage += leak.power() * cond_duty;
|
||||||
if (leak.power() > 0.0)
|
if (leak.power() > 0.0)
|
||||||
cond_duty_sum += cond_duty;
|
cond_duty_sum += cond_duty;
|
||||||
found_cond = true;
|
found_cond = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
debugPrint(debug_, "power", 2, "leakage %s %s -- %.3e",
|
debugPrint(debug_, "power", 2, "leakage %s %s -- %.3e",
|
||||||
cell->name(),
|
cell->name(),
|
||||||
<<<<<<<
|
leak.relatedPgPort()->name(),
|
||||||
leak->relatedPgPort()->name(),
|
leak.power());
|
||||||
leak->power());
|
uncond_leakage += leak.power();
|
||||||
uncond_leakage += leak->power();
|
found_uncond = true;
|
||||||
=======
|
}
|
||||||
leak.power());
|
|
||||||
uncond_leakage += leak.power();
|
|
||||||
>>>>>>>
|
|
||||||
found_uncond = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
float leakage = 0.0;
|
float leakage = 0.0;
|
||||||
float cell_leakage;
|
float cell_leakage;
|
||||||
bool cell_leakage_exists;
|
bool cell_leakage_exists;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue