report_checks -report_sigmas

This commit is contained in:
James Cherry 2019-12-24 08:53:45 -08:00
parent 8f5311c55c
commit c31d3583bc
6 changed files with 45 additions and 7 deletions

View File

@ -115,6 +115,7 @@ ReportPath::ReportPath(StaState *sta) :
StaState(sta),
format_(ReportPathFormat::full),
no_split_(false),
report_sigmas_(false),
start_end_pt_width_(80),
plus_zero_(nullptr),
minus_zero_(nullptr)
@ -178,7 +179,7 @@ ReportPath::findField(const char *name)
while (field_iter.hasNext()) {
ReportField *field = field_iter.next();
if (stringEq(name, field->name()))
return field;
return field;
}
return nullptr;
}
@ -258,6 +259,12 @@ ReportPath::setDigits(int digits)
plus_zero_ = stringPrint("%.*f", digits_, 0.0);
}
void
ReportPath::setReportSigmas(bool report)
{
report_sigmas_ = report;
}
////////////////////////////////////////////////////////////////
void
@ -3168,8 +3175,10 @@ ReportPath::reportFieldDelayMinus(Delay value,
if (delayAsFloat(value) == field_blank_)
reportFieldBlank(field, result);
else {
float mean_sigma = delayAsFloat(value, early_late, this);
const char *str = units_->timeUnit()->asString(-mean_sigma, digits_);
const char *str = report_sigmas_
? delayAsString(-value, this, digits_)
// : delayAsString(-value, early_late, this, digits_);
: units_->timeUnit()->asString(-delayAsFloat(value, early_late, this), digits_);
if (stringEq(str, plus_zero_))
// Force leading minus sign.
str = minus_zero_;
@ -3186,7 +3195,9 @@ ReportPath::reportFieldDelay(Delay value,
if (delayAsFloat(value) == field_blank_)
reportFieldBlank(field, result);
else {
const char *str = delayAsString(value, early_late, this, digits_);
const char *str = report_sigmas_
? delayAsString(value, this, digits_)
: delayAsString(value, early_late, this, digits_);
if (stringEq(str, minus_zero_))
// Filter "-0.00" fields.
str = plus_zero_;

View File

@ -48,6 +48,8 @@ public:
int digits() const { return digits_; }
void setDigits(int digits);
void setNoSplit(bool no_split);
bool reportSigmas() const { return report_sigmas_; }
void setReportSigmas(bool report);
ReportField *findField(const char *name);
// Header above reportPathEnd results.
@ -520,6 +522,7 @@ protected:
bool report_net_;
bool no_split_;
int digits_;
bool report_sigmas_;
int start_end_pt_width_;
@ -573,7 +576,6 @@ protected:
Unit *unit_;
bool enabled_;
char *blank_;
ReportPath *report_path_;
};
} // namespace

View File

@ -2472,6 +2472,12 @@ Sta::setReportPathNoSplit(bool no_split)
report_path_->setNoSplit(no_split);
}
void
Sta::setReportPathSigmas(bool report_sigmas)
{
report_path_->setReportSigmas(report_sigmas);
}
void
Sta::reportPathEnds(PathEndSeq *ends)
{

View File

@ -870,6 +870,7 @@ public:
ReportField *findReportPathField(const char *name);
void setReportPathDigits(int digits);
void setReportPathNoSplit(bool no_split);
void setReportPathSigmas(bool report_sigmas);
// Report clk skews for clks.
void reportClkSkew(ClockSet *clks,
const Corner *corner,

View File

@ -221,7 +221,7 @@ proc parse_report_path_options { cmd args_var default_format
unset path_options
}
parse_key_args $cmd args path_options {-format -digits -fields} \
path_options {-no_line_splits} $unknown_key_is_error
path_options {-no_line_splits -report_sigmas} $unknown_key_is_error
set format $default_format
if [info exists path_options(-format)] {
@ -241,11 +241,23 @@ proc parse_report_path_options { cmd args_var default_format
set digits $path_options(-digits)
check_positive_integer "-digits" $digits
}
set report_sigmas [info exists path_options(-report_sigmas)]
set_report_path_sigmas $report_sigmas
set path_options(num_fmt) "%.${digits}f"
set_report_path_digits $digits
# Numberic field width expands with digits.
set field_width [expr $digits + $report_path_field_width_extra]
foreach field {total incr capacitance slew} {
if { $report_sigmas } {
set delay_field_width [expr $field_width * 3 + $report_path_field_width_extra]
} else {
set delay_field_width $field_width
}
foreach field {total incr} {
set_report_path_field_width $field $delay_field_width
}
foreach field {capacitance slew} {
set_report_path_field_width $field $field_width
}

View File

@ -4317,6 +4317,12 @@ set_report_path_no_split(bool no_split)
Sta::sta()->setReportPathNoSplit(no_split);
}
void
set_report_path_sigmas(bool report_sigmas)
{
Sta::sta()->setReportPathSigmas(report_sigmas);
}
void
delete_path_ref(PathRef *path)
{