From 00bc28a1c997254175f3e9971a0f9601136783f9 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Fri, 22 Jan 2021 20:32:47 -0700 Subject: [PATCH] Liberty is_level_shifter --- include/sta/Liberty.hh | 3 +++ liberty/Liberty.cc | 7 +++++++ liberty/LibertyReader.cc | 12 ++++++++++++ liberty/LibertyReaderPvt.hh | 1 + 4 files changed, 23 insertions(+) diff --git a/include/sta/Liberty.hh b/include/sta/Liberty.hh index d01c91eb..145bdf74 100644 --- a/include/sta/Liberty.hh +++ b/include/sta/Liberty.hh @@ -413,6 +413,8 @@ public: void setIsMemory(bool is_memory); bool isPad() const { return is_pad_; } void setIsPad(bool is_pad); + bool isLevelShifter() const { return is_level_shifter_; } + void setIsLevelShifter(bool is_level_shifter); bool interfaceTiming() const { return interface_timing_; } void setInterfaceTiming(bool value); bool isClockGateLatchPosedge() const; @@ -536,6 +538,7 @@ protected: bool is_macro_; bool is_memory_; bool is_pad_; + bool is_level_shifter_; bool has_internal_ports_; bool interface_timing_; ClockGateType clock_gate_type_; diff --git a/liberty/Liberty.cc b/liberty/Liberty.cc index e7d58844..0b3a3d5c 100644 --- a/liberty/Liberty.cc +++ b/liberty/Liberty.cc @@ -852,6 +852,7 @@ LibertyCell::LibertyCell(LibertyLibrary *library, is_macro_(false), is_memory_(false), is_pad_(false), + is_level_shifter_(false), has_internal_ports_(false), interface_timing_(false), clock_gate_type_(ClockGateType::none), @@ -1008,6 +1009,12 @@ LibertyCell::LibertyCell::setIsPad(bool is_pad) is_pad_ = is_pad; } +void +LibertyCell::LibertyCell::setIsLevelShifter(bool is_level_shifter) +{ + is_level_shifter_ = is_level_shifter; +} + void LibertyCell::setInterfaceTiming(bool value) { diff --git a/liberty/LibertyReader.cc b/liberty/LibertyReader.cc index 1ac77ae3..8489d654 100644 --- a/liberty/LibertyReader.cc +++ b/liberty/LibertyReader.cc @@ -289,6 +289,7 @@ LibertyReader::defineVisitors() defineAttrVisitor("is_macro", &LibertyReader::visitIsMacro); defineAttrVisitor("is_memory", &LibertyReader::visitIsMemory); defineAttrVisitor("is_pad", &LibertyReader::visitIsPad); + defineAttrVisitor("is_level_shifter", &LibertyReader::visitIsLevelShifter); defineAttrVisitor("interface_timing", &LibertyReader::visitInterfaceTiming); defineAttrVisitor("scaling_factors", &LibertyReader::visitScalingFactors); @@ -2456,6 +2457,17 @@ LibertyReader::visitIsPad(LibertyAttr *attr) } } +void +LibertyReader::visitIsLevelShifter(LibertyAttr *attr) +{ + if (cell_) { + bool is_level_shifter, exists; + getAttrBool(attr, is_level_shifter, exists); + if (exists) + cell_->setIsLevelShifter(is_level_shifter); + } +} + void LibertyReader::visitInterfaceTiming(LibertyAttr *attr) { diff --git a/liberty/LibertyReaderPvt.hh b/liberty/LibertyReaderPvt.hh index b18a3863..e45a516c 100644 --- a/liberty/LibertyReaderPvt.hh +++ b/liberty/LibertyReaderPvt.hh @@ -184,6 +184,7 @@ public: virtual void visitIsMacro(LibertyAttr *attr); virtual void visitIsMemory(LibertyAttr *attr); virtual void visitIsPad(LibertyAttr *attr); + void visitIsLevelShifter(LibertyAttr *attr); virtual void visitInterfaceTiming(LibertyAttr *attr); virtual void visitScalingFactors(LibertyAttr *attr); virtual void visitCellLeakagePower(LibertyAttr *attr);