From fa849908d7f8d84b7202876b8e517efae13ab354 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Mon, 8 Jul 2019 11:50:41 -0700 Subject: [PATCH] set_cmd_units --- CMakeLists.txt | 1 + doc/OpenSTA.odt | Bin 75458 -> 76181 bytes liberty/EquivCells.cc | 14 +---- liberty/LibertyReader.cc | 17 ++++-- liberty/LibertyReaderPvt.hh | 4 +- tcl/Sdc.tcl | 103 +++++++++++++++++++++++++++--------- tcl/StaTcl.i | 46 ++++++++++++++++ util/Hash.cc | 33 ++++++++++++ util/Hash.hh | 4 ++ 9 files changed, 180 insertions(+), 42 deletions(-) create mode 100644 util/Hash.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d84e9b5..6a4c4a50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -200,6 +200,7 @@ set(STA_SOURCE util/Debug.cc util/Error.cc util/Fuzzy.cc + util/Hash.cc util/Machine.cc util/MinMax.cc util/PatternMatch.cc diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index cb48d45fffd42491e3dea5ab024fb2e4f76a2094..80786bdd40c69aad739ff96299c20a9c2b2b58cd 100644 GIT binary patch delta 46506 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

$q#9~-yFB*e7?(K)_s1Zg-p@f1{O#A1RX~5p+ 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 Y0D%1;Ht+9}5}Zr}q=lWMdRGJfAK>O}gw?GwQZ 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

k_w=Kt{}QF+f(H&9|`0ekw9B7nDk`So)0y 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%0Ao&efTUEG1;oZ;Jxz!dGs)^v*Un@IVEk5E3=- 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%0D-)0N-(X#7tuzU!wZ>eXH0_Ol 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. #include "Machine.hh" +#include "Hash.hh" #include "PortDirection.hh" #include "Transition.hh" #include "MinMax.hh" @@ -40,8 +41,6 @@ static unsigned hashFuncExpr(const FuncExpr *expr); static unsigned hashPort(const LibertyPort *port); -static unsigned -hashString(const char *str); static float cellDriveResistance(const LibertyCell *cell) @@ -228,17 +227,6 @@ hashFuncExpr(const FuncExpr *expr) } } -static unsigned -hashString(const char *str) -{ - unsigned hash = 0; - size_t length = strlen(str); - for (size_t i = 0; i < length; i++) { - hash = str[i] + (hash << 2); - } - return hash; -} - bool equivCells(const LibertyCell *cell1, const LibertyCell *cell2) diff --git a/liberty/LibertyReader.cc b/liberty/LibertyReader.cc index 7ae3c6ae..289dd39e 100644 --- a/liberty/LibertyReader.cc +++ b/liberty/LibertyReader.cc @@ -172,6 +172,7 @@ LibertyReader::defineVisitors() defineAttrVisitor("voltage_unit", &LibertyReader::visitVoltageUnit); defineAttrVisitor("current_unit", &LibertyReader::visitCurrentUnit); defineAttrVisitor("leakage_power_unit", &LibertyReader::visitPowerUnit); + defineAttrVisitor("distance_unit", &LibertyReader::visitDistanceUnit); defineAttrVisitor("delay_model", &LibertyReader::visitDelayModel); defineAttrVisitor("bus_naming_style", &LibertyReader::visitBusStyle); defineAttrVisitor("voltage_map", &LibertyReader::visitVoltageMap); @@ -547,17 +548,20 @@ LibertyReader::beginLibrary(LibertyGroup *group) // 1v default volt_scale_ = 1; // Default is 1mA. - curr_scale_ = 1E-3F; + current_scale_ = 1E-3F; // Default is 1; power_scale_ = 1; // Default is fJ. setEnergyScale(); + // Default is 1 micron. + distance_scale_ = 1e-6; library_->units()->timeUnit()->setScale(time_scale_); library_->units()->capacitanceUnit()->setScale(cap_scale_); library_->units()->resistanceUnit()->setScale(res_scale_); library_->units()->voltageUnit()->setScale(volt_scale_); - library_->units()->currentUnit()->setScale(curr_scale_); + library_->units()->currentUnit()->setScale(current_scale_); + library_->units()->distanceUnit()->setScale(distance_scale_); library_->setDelayModelType(DelayModelType::cmos_linear); @@ -667,7 +671,7 @@ void LibertyReader::visitCurrentUnit(LibertyAttr *attr) { if (library_) - parseUnits(attr, "A", curr_scale_, library_->units()->currentUnit()); + parseUnits(attr, "A", current_scale_, library_->units()->currentUnit()); } void @@ -685,6 +689,13 @@ LibertyReader::visitPowerUnit(LibertyAttr *attr) parseUnits(attr, "W", power_scale_, library_->units()->powerUnit()); } +void +LibertyReader::visitDistanceUnit(LibertyAttr *attr) +{ + if (library_) + parseUnits(attr, "m", distance_scale_, library_->units()->distanceUnit()); +} + void LibertyReader::parseUnits(LibertyAttr *attr, const char *unit_suffix, diff --git a/liberty/LibertyReaderPvt.hh b/liberty/LibertyReaderPvt.hh index ecdc42ac..cb273492 100644 --- a/liberty/LibertyReaderPvt.hh +++ b/liberty/LibertyReaderPvt.hh @@ -81,6 +81,7 @@ public: virtual void visitVoltageUnit(LibertyAttr *attr); virtual void visitCurrentUnit(LibertyAttr *attr); virtual void visitPowerUnit(LibertyAttr *attr); + virtual void visitDistanceUnit(LibertyAttr *attr); virtual void parseUnits(LibertyAttr *attr, const char *suffix, float &scale_var, @@ -562,9 +563,10 @@ protected: float cap_scale_; float res_scale_; float volt_scale_; - float curr_scale_; + float current_scale_; float power_scale_; float energy_scale_; + float distance_scale_; bool have_resistance_unit_; private: diff --git a/tcl/Sdc.tcl b/tcl/Sdc.tcl index c9ac24c0..ad0312f6 100644 --- a/tcl/Sdc.tcl +++ b/tcl/Sdc.tcl @@ -191,22 +191,23 @@ proc check_path_divider { divider } { define_cmd_args "set_units" \ {[-capacitance cap_unit] [-resistance res_unit] [-time time_unit]\ - [-voltage voltage_unit] [-current current_unit] [-power power_unit]} + [-voltage voltage_unit] [-current current_unit] [-power power_unit]\ + [-distance distance_unit]} -# Note that this does NOT actually set the units. -# It merely checks that the library units are the same as the -# units in the set_units command. +# Note that the set_units command does NOT actually set the units. +# It merely checks that the current units are the same as the +# units in the set_units command. Blame SNPS for this brain damage. proc set_units { args } { parse_key_args "set_units" args \ - keys {-capacitance -resistance -time -voltage -current -power} flags {} - if { [llength $args] != 0 } { - cmd_usage_error "set_units" - } + keys {-capacitance -resistance -time -voltage -current -power -distance} \ + flags {} + check_argc_eq0 "set_units" $args check_unit "capacitance" -capacitance "f" keys check_unit "time" -time "s" keys check_unit "voltage" -voltage "v" keys check_unit "current" -current "A" keys check_unit "resistance" -resistance "ohm" keys + check_unit "distance" -distance "m" keys } proc check_unit { unit key unit_name key_var } { @@ -219,23 +220,8 @@ proc check_unit { unit key unit_name key_var } { set prefix [string index $value 0] set suffix [string range $value 1 end] if { [string equal -nocase $suffix $unit_name] } { - if { [string equal $prefix "M"] } { - check_unit_scale $unit 1E+6 - } elseif { [string equal $prefix "k"] } { - check_unit_scale $unit 1E+3 - } elseif { [string equal $prefix "m"] } { - check_unit_scale $unit 1E-3 - } elseif { [string equal $prefix "u"] } { - check_unit_scale $unit 1E-6 - } elseif { [string equal $prefix "n"] } { - check_unit_scale $unit 1E-9 - } elseif { [string equal $prefix "p"] } { - check_unit_scale $unit 1E-12 - } elseif { [string equal $prefix "f"] } { - check_unit_scale $unit 1E-15 - } else { - sta_error "unknown $unit prefix '$prefix'." - } + set scale [unit_prefix_scale $unit $prefix] + check_unit_scale $unit 1.0 $scale } else { sta_error "unknown unit $unit '$suffix'." } @@ -243,6 +229,26 @@ proc check_unit { unit key unit_name key_var } { } } +proc unit_prefix_scale { unit prefix } { + if { [string equal $prefix "M"] } { + return 1E+6 + } elseif { [string equal $prefix "k"] } { + return 1E+3 + } elseif { [string equal $prefix "m"] } { + return 1E-3 + } elseif { [string equal $prefix "u"] } { + return 1E-6 + } elseif { [string equal $prefix "n"] } { + return 1E-9 + } elseif { [string equal $prefix "p"] } { + return 1E-12 + } elseif { [string equal $prefix "f"] } { + return 1E-15 + } else { + sta_error "unknown $unit prefix '$prefix'." + } +} + proc check_unit_scale { unit scale } { set unit_scale [unit_scale $unit] if { ![fuzzy_equal $scale $unit_scale] } { @@ -250,6 +256,53 @@ proc check_unit_scale { unit scale } { } } +################################################################ + +define_cmd_args "set_cmd_units" \ + {[-capacitance cap_unit] [-resistance res_unit] [-time time_unit]\ + [-voltage voltage_unit] [-current current_unit] [-power power_unit]\ + [-distance distance_unit]} + +proc set_cmd_units { args } { + parse_key_args "set_cmd_units" args \ + keys {-capacitance -resistance -time -voltage -current -power \ + -distance -digits -suffix} \ + flags {} + + check_argc_eq0 "set_cmd_units" $args + set_unit_values "capacitance" -capacitance "f" keys + set_unit_values "time" -time "s" keys + set_unit_values "voltage" -voltage "v" keys + set_unit_values "current" -current "A" keys + set_unit_values "resistance" -resistance "ohm" keys + set_unit_values "distance" -distance "m" keys +} + +proc set_unit_values { unit key unit_name key_var } { + upvar 1 $key_var keys + if { [info exists keys($key)] } { + set value $keys($key) + if { [string equal -nocase $value $unit_name] } { + set_cmd_unit_scale $unit 1.0 + } else { + set prefix [string index $value 0] + set suffix [string range $value 1 end] + if { [string equal -nocase $suffix $unit_name] } { + set scale [unit_prefix_scale $unit $prefix] + set_cmd_unit_scale $unit $scale + } else { + sta_error "unknown $unit unit '$suffix'." + } + } + if [info exists keys(-digits)] { + set_cmd_unit_digits $unit $keys(-digits) + } + if [info exists keys(-suffix)] { + set_cmd_unit_suffix $unit $keys(-suffix) + } + } +} + ################################################################ # # Object Access Commands diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index 37085132..d4f9a29c 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -3808,6 +3808,8 @@ format_power(const char *value, return Sta::sta()->units()->powerUnit()->asString(value1, digits); } +//////////////////////////////////////////////////////////////// + // Unit converstion from sta unit to user interface and visa versa. double time_ui_sta(double value) @@ -3881,6 +3883,50 @@ power_sta_ui(double value) return value / Sta::sta()->units()->powerUnit()->scale(); } +double +distance_ui_sta(double value) +{ + return value * Sta::sta()->units()->distanceUnit()->scale(); +} + +double +distance_sta_ui(double value) +{ + return value / Sta::sta()->units()->distanceUnit()->scale(); +} + +//////////////////////////////////////////////////////////////// + +void +set_cmd_unit_scale(const char *unit_name, + float scale) +{ + Unit *unit = Sta::sta()->units()->find(unit_name); + if (unit) + unit->setScale(scale); +} + +void +set_cmd_unit_digits(const char *unit_name, + int digits) +{ + Unit *unit = Sta::sta()->units()->find(unit_name); + if (unit) + unit->setDigits(digits); +} + +void +set_cmd_unit_suffix(const char *unit_name, + const char *suffix) +{ + Unit *unit = Sta::sta()->units()->find(unit_name); + if (unit) { + unit->setSuffix(suffix); + } +} + +//////////////////////////////////////////////////////////////// + VertexIterator * vertex_iterator() { diff --git a/util/Hash.cc b/util/Hash.cc new file mode 100644 index 00000000..78b54013 --- /dev/null +++ b/util/Hash.cc @@ -0,0 +1,33 @@ +// OpenSTA, Static Timing Analyzer +// Copyright (c) 2019, Parallax Software, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#include +#include "Machine.hh" +#include "Hash.hh" + +namespace sta { + +Hash +hashString(const char *str) +{ + unsigned hash = hash_init_value; + size_t length = strlen(str); + for (size_t i = 0; i < length; i++) + hash = ((hash << 5) + hash) ^ str[i]; + return hash; +} + +} // namespace diff --git a/util/Hash.hh b/util/Hash.hh index ffb13b7e..f1c702fd 100644 --- a/util/Hash.hh +++ b/util/Hash.hh @@ -48,5 +48,9 @@ nextMersenne(size_t n) return (n + 1) * 2 - 1; } +// Sadly necessary until c++ std::hash works for char *. +Hash +hashString(const char *str); + } // namespace #endif