more unit issues
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
75c2b1e80d
commit
6ef25d488a
|
|
@ -42,10 +42,15 @@ public:
|
|||
void operator=(const Unit &unit);
|
||||
float scale() const { return scale_; }
|
||||
void setScale(float scale);
|
||||
// Mkmunpf abbreviation for scale.
|
||||
std::string scaleAbbreviation() const;
|
||||
const char *suffix() const { return suffix_.c_str(); }
|
||||
// 1Mkmunpf or scale
|
||||
std::string scaleString() const;
|
||||
std::string suffix() const { return suffix_; }
|
||||
// scaleString + suffix
|
||||
std::string scaleSuffix() const;
|
||||
// scale abbreviation + suffix
|
||||
const char *scaledSuffix() const { return scaled_suffix_.c_str(); }
|
||||
std::string scaleAbbrevSuffix() const { return scale_abbrev_suffix_; }
|
||||
void setSuffix(const char *suffix);
|
||||
int digits() const { return digits_; }
|
||||
void setDigits(int digits);
|
||||
|
|
@ -57,11 +62,11 @@ public:
|
|||
int digits) const;
|
||||
|
||||
private:
|
||||
void setScaledSuffix();
|
||||
void setScaleAbbrevSuffix();
|
||||
|
||||
float scale_; // multiplier from user units to internal units
|
||||
std::string suffix_; // print suffix
|
||||
std::string scaled_suffix_;
|
||||
std::string scale_abbrev_suffix_;
|
||||
int digits_; // print digits (after decimal pt)
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -137,20 +137,20 @@ LibertyWriter::writeHeader()
|
|||
fprintf(stream_, " simulation : false;\n");
|
||||
const Unit *cap_unit = library_->units()->capacitanceUnit();
|
||||
fprintf(stream_, " capacitive_load_unit (1,%s);\n",
|
||||
cap_unit->scaledSuffix());
|
||||
cap_unit->scaleAbbrevSuffix().c_str());
|
||||
fprintf(stream_, " leakage_power_unit : 1pW;\n");
|
||||
const Unit *current_unit = library_->units()->currentUnit();
|
||||
fprintf(stream_, " current_unit : \"1%s\";\n",
|
||||
current_unit->scaledSuffix());
|
||||
current_unit->scaleAbbrevSuffix().c_str());
|
||||
const Unit *res_unit = library_->units()->resistanceUnit();
|
||||
fprintf(stream_, " pulling_resistance_unit : \"1%s\";\n",
|
||||
res_unit->scaledSuffix());
|
||||
res_unit->scaleAbbrevSuffix().c_str());
|
||||
const Unit *time_unit = library_->units()->timeUnit();
|
||||
fprintf(stream_, " time_unit : \"1%s\";\n",
|
||||
time_unit->scaledSuffix());
|
||||
time_unit->scaleAbbrevSuffix().c_str());
|
||||
const Unit *volt_unit = library_->units()->voltageUnit();
|
||||
fprintf(stream_, " voltage_unit : \"1%s\";\n",
|
||||
volt_unit->scaledSuffix());
|
||||
volt_unit->scaleAbbrevSuffix().c_str());
|
||||
fprintf(stream_, " library_features(report_delay_calculation);\n");
|
||||
fprintf(stream_, "\n");
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ Unit::Unit(const char *suffix) :
|
|||
suffix_(suffix),
|
||||
digits_(3)
|
||||
{
|
||||
setScaledSuffix();
|
||||
setScaleAbbrevSuffix();
|
||||
}
|
||||
|
||||
Unit::Unit(float scale,
|
||||
|
|
@ -50,13 +50,13 @@ Unit::Unit(float scale,
|
|||
suffix_(suffix),
|
||||
digits_(digits)
|
||||
{
|
||||
setScaledSuffix();
|
||||
setScaleAbbrevSuffix();
|
||||
}
|
||||
|
||||
void
|
||||
Unit::setScaledSuffix()
|
||||
Unit::setScaleAbbrevSuffix()
|
||||
{
|
||||
scaled_suffix_ = scaleAbbreviation() + suffix_;
|
||||
scale_abbrev_suffix_ = scaleAbbreviation() + suffix_;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -64,7 +64,7 @@ Unit::operator=(const Unit &unit)
|
|||
{
|
||||
scale_ = unit.scale_;
|
||||
suffix_ = unit.suffix_;
|
||||
scaled_suffix_ = unit.scaled_suffix_;
|
||||
scale_abbrev_suffix_ = unit.scale_abbrev_suffix_;
|
||||
digits_ = unit.digits_;
|
||||
}
|
||||
|
||||
|
|
@ -84,11 +84,34 @@ void
|
|||
Unit::setScale(float scale)
|
||||
{
|
||||
scale_ = scale;
|
||||
setScaledSuffix();
|
||||
setScaleAbbrevSuffix();
|
||||
}
|
||||
|
||||
std::string
|
||||
Unit::scaleAbbreviation() const
|
||||
{
|
||||
if (fuzzyEqual(scale_, 1E+6))
|
||||
return "M";
|
||||
else if (fuzzyEqual(scale_, 1E+3))
|
||||
return "k";
|
||||
if (fuzzyEqual(scale_, 1.0))
|
||||
return "";
|
||||
else if (fuzzyEqual(scale_, 1E-3))
|
||||
return "m";
|
||||
else if (fuzzyEqual(scale_, 1E-6))
|
||||
return "u";
|
||||
else if (fuzzyEqual(scale_, 1E-9))
|
||||
return "n";
|
||||
else if (fuzzyEqual(scale_, 1E-12))
|
||||
return "p";
|
||||
else if (fuzzyEqual(scale_, 1E-15))
|
||||
return "f";
|
||||
else
|
||||
return "?";
|
||||
}
|
||||
|
||||
std::string
|
||||
Unit::scaleString() const
|
||||
{
|
||||
if (fuzzyEqual(scale_, 1E+6))
|
||||
return "1M";
|
||||
|
|
@ -110,11 +133,17 @@ Unit::scaleAbbreviation() const
|
|||
return stdstrPrint("%.1e", scale_);
|
||||
}
|
||||
|
||||
std::string
|
||||
Unit::scaleSuffix() const
|
||||
{
|
||||
return scaleString() + suffix_;
|
||||
}
|
||||
|
||||
void
|
||||
Unit::setSuffix(const char *suffix)
|
||||
{
|
||||
suffix_ = suffix;
|
||||
setScaledSuffix();
|
||||
setScaleAbbrevSuffix();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ define_cmd_args "report_units" {}
|
|||
proc report_units { args } {
|
||||
check_argc_eq0 "report_units" $args
|
||||
foreach unit {"time" "capacitance" "resistance" "voltage" "current" "power" "distance"} {
|
||||
report_line " $unit [unit_scaled_suffix $unit]"
|
||||
report_line " $unit [unit_scale_suffix $unit]"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
20
util/Util.i
20
util/Util.i
|
|
@ -23,6 +23,7 @@
|
|||
// This notice may not be removed or altered from any source distribution.
|
||||
|
||||
%module util
|
||||
%include <std_string.i>
|
||||
|
||||
%{
|
||||
|
||||
|
|
@ -425,7 +426,7 @@ unit_scale_abbreviation (const char *unit_name)
|
|||
return "";
|
||||
}
|
||||
|
||||
const char *
|
||||
std::string
|
||||
unit_suffix(const char *unit_name)
|
||||
{
|
||||
Unit *unit = Sta::sta()->units()->find(unit_name);
|
||||
|
|
@ -435,12 +436,23 @@ unit_suffix(const char *unit_name)
|
|||
return "";
|
||||
}
|
||||
|
||||
const char *
|
||||
unit_scaled_suffix(const char *unit_name)
|
||||
std::string
|
||||
unit_scale_suffix(const char *unit_name)
|
||||
{
|
||||
Unit *unit = Sta::sta()->units()->find(unit_name);
|
||||
if (unit) {
|
||||
return unit->scaleSuffix();
|
||||
}
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
std::string
|
||||
unit_scale_abbrev_suffix(const char *unit_name)
|
||||
{
|
||||
Unit *unit = Sta::sta()->units()->find(unit_name);
|
||||
if (unit)
|
||||
return unit->scaledSuffix();
|
||||
return unit->scaleAbbrevSuffix();
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue