Units::scaledSuffix

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2023-04-17 08:52:20 -07:00
parent 79fda841d5
commit 54bf27d577
4 changed files with 44 additions and 19 deletions

View File

@ -33,8 +33,10 @@ public:
void operator=(const Unit &unit);
float scale() const { return scale_; }
void setScale(float scale);
const char *scaleAbreviation() const;
const char *scaleAbbreviation() const;
const char *suffix() const { return suffix_; }
// scale abbreviation + suffix
const char *scaledSuffix() const { return scaled_suffix_; }
void setSuffix(const char *suffix);
int digits() const { return digits_; }
void setDigits(int digits);
@ -46,8 +48,11 @@ public:
int digits) const;
private:
void setScaledSuffix();
float scale_; // multiplier from user units to internal units
const char *suffix_; // print suffix
const char *scaled_suffix_;
int digits_; // print digits (after decimal pt)
};

View File

@ -123,26 +123,21 @@ LibertyWriter::writeHeader()
fprintf(stream_, " delay_model : table_lookup;\n");
fprintf(stream_, " simulation : false;\n");
const Unit *cap_unit = library_->units()->capacitanceUnit();
fprintf(stream_, " capacitive_load_unit (1,%s%s);\n",
cap_unit->scaleAbreviation(),
cap_unit->suffix());
fprintf(stream_, " capacitive_load_unit (1,%s);\n",
cap_unit->scaledSuffix());
fprintf(stream_, " leakage_power_unit : 1pW;\n");
const Unit *current_unit = library_->units()->currentUnit();
fprintf(stream_, " current_unit : \"1%s%s\";\n",
current_unit->scaleAbreviation(),
current_unit->suffix());
fprintf(stream_, " current_unit : \"1%s\";\n",
current_unit->scaledSuffix());
const Unit *res_unit = library_->units()->resistanceUnit();
fprintf(stream_, " pulling_resistance_unit : \"1%s%s\";\n",
res_unit->scaleAbreviation(),
res_unit->suffix());
fprintf(stream_, " pulling_resistance_unit : \"1%s\";\n",
res_unit->scaledSuffix());
const Unit *time_unit = library_->units()->timeUnit();
fprintf(stream_, " time_unit : \"1%s%s\";\n",
time_unit->scaleAbreviation(),
time_unit->suffix());
fprintf(stream_, " time_unit : \"1%s\";\n",
time_unit->scaledSuffix());
const Unit *volt_unit = library_->units()->voltageUnit();
fprintf(stream_, " voltage_unit : \"1%s%s\";\n",
volt_unit->scaleAbreviation(),
volt_unit->suffix());
fprintf(stream_, " voltage_unit : \"1%s\";\n",
volt_unit->scaledSuffix());
fprintf(stream_, " library_features(report_delay_calculation);\n");
fprintf(stream_, "\n");

View File

@ -31,8 +31,10 @@ using std::abs;
Unit::Unit(const char *suffix) :
scale_(1.0),
suffix_(stringCopy(suffix)),
scaled_suffix_(nullptr),
digits_(3)
{
setScaledSuffix();
}
Unit::Unit(float scale,
@ -40,13 +42,23 @@ Unit::Unit(float scale,
int digits) :
scale_(scale),
suffix_(stringCopy(suffix)),
scaled_suffix_(nullptr),
digits_(digits)
{
setScaledSuffix();
}
void
Unit::setScaledSuffix()
{
stringDelete(scaled_suffix_);
scaled_suffix_ = stringPrint("%s%s", scaleAbbreviation(), suffix_);
}
Unit::~Unit()
{
stringDelete(suffix_);
stringDelete(scaled_suffix_);
}
void
@ -55,6 +67,7 @@ Unit::operator=(const Unit &unit)
scale_ = unit.scale_;
stringDelete(suffix_);
suffix_ = stringCopy(unit.suffix_);
scaled_suffix_ = stringCopy(unit.scaled_suffix_);
digits_ = unit.digits_;
}
@ -74,10 +87,11 @@ void
Unit::setScale(float scale)
{
scale_ = scale;
setScaledSuffix();
}
const char *
Unit::scaleAbreviation() const
Unit::scaleAbbreviation() const
{
if (fuzzyEqual(scale_, 1E+6))
return "M";
@ -104,6 +118,7 @@ Unit::setSuffix(const char *suffix)
{
stringDelete(suffix_);
suffix_ = stringCopy(suffix);
setScaledSuffix();
}
void

View File

@ -3987,11 +3987,11 @@ set_cmd_unit_suffix(const char *unit_name,
}
const char *
unit_scale_abreviation(const char *unit_name)
unit_scale_abbreviation (const char *unit_name)
{
Unit *unit = Sta::sta()->units()->find(unit_name);
if (unit)
return unit->scaleAbreviation();
return unit->scaleAbbreviation();
else
return "";
}
@ -4006,6 +4006,16 @@ unit_suffix(const char *unit_name)
return "";
}
const char *
unit_scaled_suffix(const char *unit_name)
{
Unit *unit = Sta::sta()->units()->find(unit_name);
if (unit)
return unit->scaledSuffix();
else
return "";
}
////////////////////////////////////////////////////////////////
VertexIterator *