diff --git a/liberty/LibertyReader.cc b/liberty/LibertyReader.cc index da39bca3..6298ca12 100644 --- a/liberty/LibertyReader.cc +++ b/liberty/LibertyReader.cc @@ -261,6 +261,9 @@ LibertyReader::defineVisitors() defineAttrVisitor("index_2", &LibertyReader::visitIndex2); defineAttrVisitor("index_3", &LibertyReader::visitIndex3); + defineGroupVisitor("technology", + &LibertyReader::beginTechnology, + &LibertyReader::endTechnology); defineGroupVisitor("rise_transition_degradation", &LibertyReader::beginRiseTransitionDegredation, &LibertyReader::endRiseFallTransitionDegredation); @@ -651,6 +654,7 @@ LibertyReader::beginLibrary(LibertyGroup *group) library_->units()->currentUnit()->setScale(current_scale_); library_->units()->distanceUnit()->setScale(distance_scale_); + library_->setDelayModelType(DelayModelType::cmos_linear); scale_factors_ = new ScaleFactors(""); library_->setScaleFactors(scale_factors_); } @@ -1331,6 +1335,21 @@ LibertyReader::visitSlewDerateFromLibrary(LibertyAttr *attr) //////////////////////////////////////////////////////////////// +void +LibertyReader::beginTechnology(LibertyGroup *group) +{ + if (library_) { + const char *tech = group->firstName(); + if (stringEq(tech, "fpga")) + library_->setDelayModelType(DelayModelType::cmos_linear); + } +} + +void +LibertyReader::endTechnology(LibertyGroup *) +{ +} + void LibertyReader::beginTableTemplateDelay(LibertyGroup *group) { diff --git a/liberty/LibertyReaderPvt.hh b/liberty/LibertyReaderPvt.hh index fec56d33..780cee5b 100644 --- a/liberty/LibertyReaderPvt.hh +++ b/liberty/LibertyReaderPvt.hh @@ -144,6 +144,8 @@ public: RiseFall *rf); virtual void visitSlewDerateFromLibrary(LibertyAttr *attr); + virtual void beginTechnology(LibertyGroup *group); + virtual void endTechnology(LibertyGroup *group); virtual void beginTableTemplateDelay(LibertyGroup *group); virtual void beginTableTemplateOutputCurrent(LibertyGroup *group); virtual void beginTableTemplate(LibertyGroup *group, diff --git a/util/StringUtil.cc b/util/StringUtil.cc index a20ac4a8..02c5edfc 100644 --- a/util/StringUtil.cc +++ b/util/StringUtil.cc @@ -158,7 +158,6 @@ stringPrintTmp(const char *fmt, if (tmp_length >= tmp_length1) { tmp_length1 = tmp_length + 1; - stringDelete(tmp); tmp = makeTmpString(tmp_length1); va_copy(args_copy, args); tmp_length = vsnprint(tmp, tmp_length1, fmt, args_copy);