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);
bool isMacro() const { return is_macro_; }
void setIsMacro(bool is_macro);
bool isMemory() const { return is_memory_; }
void setIsMemory(bool is_memory);
bool isPad() const { return is_pad_; }
void setIsPad(bool is_pad);
bool interfaceTiming() const { return interface_timing_; }
@ -525,6 +527,7 @@ protected:
float area_;
bool dont_use_;
bool is_macro_;
bool is_memory_;
bool is_pad_;
bool has_internal_ports_;
bool interface_timing_;

View File

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

View File

@ -286,6 +286,7 @@ LibertyReader::defineVisitors()
defineAttrVisitor("area", &LibertyReader::visitArea);
defineAttrVisitor("dont_use", &LibertyReader::visitDontUse);
defineAttrVisitor("is_macro", &LibertyReader::visitIsMacro);
defineAttrVisitor("is_memory", &LibertyReader::visitIsMemory);
defineAttrVisitor("is_pad", &LibertyReader::visitIsPad);
defineAttrVisitor("interface_timing", &LibertyReader::visitInterfaceTiming);
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
LibertyReader::visitIsPad(LibertyAttr *attr)
{

View File

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

View File

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