liberty is_memory_cell

This commit is contained in:
James Cherry 2020-06-09 20:02:59 -07:00
parent 3b77a15847
commit 4c0225acc3
5 changed files with 25 additions and 1 deletions

View File

@ -405,6 +405,8 @@ public:
void setDontUse(bool dont_use); void setDontUse(bool dont_use);
bool isMacro() const { return is_macro_; } bool isMacro() const { return is_macro_; }
void setIsMacro(bool is_macro); void setIsMacro(bool is_macro);
bool isMemory() const { return is_memory_; }
void setIsMemory(bool is_memory);
bool isPad() const { return is_pad_; } bool isPad() const { return is_pad_; }
void setIsPad(bool is_pad); void setIsPad(bool is_pad);
bool interfaceTiming() const { return interface_timing_; } bool interfaceTiming() const { return interface_timing_; }
@ -525,6 +527,7 @@ protected:
float area_; float area_;
bool dont_use_; bool dont_use_;
bool is_macro_; bool is_macro_;
bool is_memory_;
bool is_pad_; bool is_pad_;
bool has_internal_ports_; bool has_internal_ports_;
bool interface_timing_; bool interface_timing_;

View File

@ -850,6 +850,7 @@ LibertyCell::LibertyCell(LibertyLibrary *library,
area_(0.0), area_(0.0),
dont_use_(false), dont_use_(false),
is_macro_(false), is_macro_(false),
is_memory_(false),
is_pad_(false), is_pad_(false),
has_internal_ports_(false), has_internal_ports_(false),
interface_timing_(false), interface_timing_(false),
@ -995,6 +996,12 @@ LibertyCell::setIsMacro(bool is_macro)
is_macro_ = is_macro; is_macro_ = is_macro;
} }
void
LibertyCell::setIsMemory(bool is_memory)
{
is_memory_ = is_memory;
}
void void
LibertyCell::LibertyCell::setIsPad(bool is_pad) LibertyCell::LibertyCell::setIsPad(bool is_pad)
{ {

View File

@ -286,6 +286,7 @@ LibertyReader::defineVisitors()
defineAttrVisitor("area", &LibertyReader::visitArea); defineAttrVisitor("area", &LibertyReader::visitArea);
defineAttrVisitor("dont_use", &LibertyReader::visitDontUse); defineAttrVisitor("dont_use", &LibertyReader::visitDontUse);
defineAttrVisitor("is_macro", &LibertyReader::visitIsMacro); defineAttrVisitor("is_macro", &LibertyReader::visitIsMacro);
defineAttrVisitor("is_memory", &LibertyReader::visitIsMemory);
defineAttrVisitor("is_pad", &LibertyReader::visitIsPad); defineAttrVisitor("is_pad", &LibertyReader::visitIsPad);
defineAttrVisitor("interface_timing", &LibertyReader::visitInterfaceTiming); defineAttrVisitor("interface_timing", &LibertyReader::visitInterfaceTiming);
defineAttrVisitor("scaling_factors", &LibertyReader::visitScalingFactors); defineAttrVisitor("scaling_factors", &LibertyReader::visitScalingFactors);
@ -2426,6 +2427,17 @@ LibertyReader::visitIsMacro(LibertyAttr *attr)
} }
} }
void
LibertyReader::visitIsMemory(LibertyAttr *attr)
{
if (cell_) {
bool is_memory, exists;
getAttrBool(attr, is_memory, exists);
if (exists)
cell_->setIsMemory(is_memory);
}
}
void void
LibertyReader::visitIsPad(LibertyAttr *attr) LibertyReader::visitIsPad(LibertyAttr *attr)
{ {

View File

@ -181,6 +181,7 @@ public:
virtual void visitArea(LibertyAttr *attr); virtual void visitArea(LibertyAttr *attr);
virtual void visitDontUse(LibertyAttr *attr); virtual void visitDontUse(LibertyAttr *attr);
virtual void visitIsMacro(LibertyAttr *attr); virtual void visitIsMacro(LibertyAttr *attr);
virtual void visitIsMemory(LibertyAttr *attr);
virtual void visitIsPad(LibertyAttr *attr); virtual void visitIsPad(LibertyAttr *attr);
virtual void visitInterfaceTiming(LibertyAttr *attr); virtual void visitInterfaceTiming(LibertyAttr *attr);
virtual void visitScalingFactors(LibertyAttr *attr); virtual void visitScalingFactors(LibertyAttr *attr);

View File

@ -154,7 +154,8 @@ Power::power(const Corner *corner,
if (cell) { if (cell) {
PowerResult inst_power; PowerResult inst_power;
power(inst, corner, inst_power); power(inst, corner, inst_power);
if (cell->isMacro()) if (cell->isMacro()
|| cell->isMemory())
macro.incr(inst_power); macro.incr(inst_power);
else if (cell->isPad()) else if (cell->isPad())
pad.incr(inst_power); pad.incr(inst_power);