From bfb849d3d72d462951a6257753ed2bf7d89c2649 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 3 Apr 2022 20:40:49 -0700 Subject: [PATCH] max_slew/fanout/capacitance_check_slack in user units Signed-off-by: James Cherry --- include/sta/Units.hh | 4 ++++ liberty/Units.cc | 12 ++++++++++++ search/CheckFanoutLimits.cc | 6 +++--- search/CheckFanoutLimits.hh | 8 ++++---- search/Sta.cc | 2 +- tcl/StaTcl.i | 38 ++++++++++++++++++++----------------- 6 files changed, 45 insertions(+), 25 deletions(-) diff --git a/include/sta/Units.hh b/include/sta/Units.hh index a16ccf76..27a14ad6 100644 --- a/include/sta/Units.hh +++ b/include/sta/Units.hh @@ -26,6 +26,10 @@ public: Unit(float scale, const char *suffix, int digits); + // Convert from sta units to user interface units. + double staToUser(double value); + // Convert from user interface units to sta units. + double userToSta(double value); void operator=(const Unit &unit); float scale() const { return scale_; } void setScale(float scale); diff --git a/liberty/Units.cc b/liberty/Units.cc index dee3f538..59092f2f 100644 --- a/liberty/Units.cc +++ b/liberty/Units.cc @@ -58,6 +58,18 @@ Unit::operator=(const Unit &unit) digits_ = unit.digits_; } +double +Unit::staToUser(double value) +{ + return value / scale_; +} + +double +Unit::userToSta(double value) +{ + return value * scale_; +} + void Unit::setScale(float scale) { diff --git a/search/CheckFanoutLimits.cc b/search/CheckFanoutLimits.cc index 4874ea9a..ede6954e 100644 --- a/search/CheckFanoutLimits.cc +++ b/search/CheckFanoutLimits.cc @@ -93,7 +93,7 @@ CheckFanoutLimits::checkFanout(const Pin *pin, findLimit(pin, min_max, limit1, limit1_exists); if (limit1_exists) checkFanout(pin, min_max, limit1, - fanout, slack, limit); + fanout, limit, slack); } // return the tightest limit. @@ -184,8 +184,8 @@ CheckFanoutLimits::checkFanout(const Pin *pin, float limit1, // Return values. float &fanout, - float &slack, - float &limit) const + float &limit, + float &slack) const { float fanout1 = fanoutLoad(pin); float slack1 = (min_max == MinMax::max()) diff --git a/search/CheckFanoutLimits.hh b/search/CheckFanoutLimits.hh index 5c738a31..b531b933 100644 --- a/search/CheckFanoutLimits.hh +++ b/search/CheckFanoutLimits.hh @@ -41,15 +41,15 @@ public: PinSeq *checkFanoutLimits(Net *net, bool violators, const MinMax *min_max); + +protected: void checkFanout(const Pin *pin, const MinMax *min_max, float limit1, // Return values. float &fanout, - float &slack, - float &limit) const; - -protected: + float &limit, + float &slack) const; void findLimit(const Pin *pin, const MinMax *min_max, // Return values. diff --git a/search/Sta.cc b/search/Sta.cc index 1af50e36..ef458727 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -5277,7 +5277,7 @@ Sta::maxFanoutCheckSlack() Pin *pin = (*pins)[0]; float fanout; float limit; - check_fanout_limits_->checkFanout(pin, MinMax::max(), true, + check_fanout_limits_->checkFanout(pin, MinMax::max(), fanout, limit, slack); } delete pins; diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index 36cfbbe2..fa025c2d 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -3918,89 +3918,91 @@ format_area(const char *value, //////////////////////////////////////////////////////////////// -// Unit converstion from sta unit to user interface and visa versa. +// _sta_ui conversion from sta units to user interface units. +// _ui_sta conversion from user interface units to sta units. + double time_ui_sta(double value) { - return value * Sta::sta()->units()->timeUnit()->scale(); + return Sta::sta()->units()->timeUnit()->userToSta(value); } double time_sta_ui(double value) { - return value / Sta::sta()->units()->timeUnit()->scale(); + return Sta::sta()->units()->timeUnit()->staToUser(value); } double capacitance_ui_sta(double value) { - return value * Sta::sta()->units()->capacitanceUnit()->scale(); + return Sta::sta()->units()->capacitanceUnit()->userToSta(value); } double capacitance_sta_ui(double value) { - return value / Sta::sta()->units()->capacitanceUnit()->scale(); + return Sta::sta()->units()->capacitanceUnit()->staToUser(value); } double resistance_ui_sta(double value) { - return value * Sta::sta()->units()->resistanceUnit()->scale(); + return Sta::sta()->units()->resistanceUnit()->userToSta(value); } double resistance_sta_ui(double value) { - return value / Sta::sta()->units()->resistanceUnit()->scale(); + return Sta::sta()->units()->resistanceUnit()->staToUser(value); } double voltage_ui_sta(double value) { - return value * Sta::sta()->units()->voltageUnit()->scale(); + return Sta::sta()->units()->voltageUnit()->userToSta(value); } double voltage_sta_ui(double value) { - return value / Sta::sta()->units()->voltageUnit()->scale(); + return Sta::sta()->units()->voltageUnit()->staToUser(value); } double current_ui_sta(double value) { - return value * Sta::sta()->units()->currentUnit()->scale(); + return Sta::sta()->units()->currentUnit()->userToSta(value); } double current_sta_ui(double value) { - return value / Sta::sta()->units()->currentUnit()->scale(); + return Sta::sta()->units()->currentUnit()->staToUser(value); } double power_ui_sta(double value) { - return value * Sta::sta()->units()->powerUnit()->scale(); + return Sta::sta()->units()->powerUnit()->userToSta(value); } double power_sta_ui(double value) { - return value / Sta::sta()->units()->powerUnit()->scale(); + return Sta::sta()->units()->powerUnit()->staToUser(value); } double distance_ui_sta(double value) { - return value * Sta::sta()->units()->distanceUnit()->scale(); + return Sta::sta()->units()->distanceUnit()->userToSta(value); } double distance_sta_ui(double value) { - return value / Sta::sta()->units()->distanceUnit()->scale(); + return Sta::sta()->units()->distanceUnit()->staToUser(value); } double @@ -4759,7 +4761,8 @@ float max_slew_check_slack() { cmdLinkedNetwork(); - return Sta::sta()->maxSlewCheckSlack(); + Sta *sta = Sta::sta(); + return sta->units()->timeUnit()->staToUser(sta->maxSlewCheckSlack()); } void @@ -4852,7 +4855,8 @@ float max_capacitance_check_slack() { cmdLinkedNetwork(); - return Sta::sta()->maxCapacitanceCheckSlack(); + Sta *sta = Sta::sta(); + return sta->units()->capacitanceUnit()->staToUser(sta->maxCapacitanceCheckSlack()); } void