report_checks -report_sigmas
This commit is contained in:
parent
8f5311c55c
commit
c31d3583bc
|
|
@ -115,6 +115,7 @@ ReportPath::ReportPath(StaState *sta) :
|
||||||
StaState(sta),
|
StaState(sta),
|
||||||
format_(ReportPathFormat::full),
|
format_(ReportPathFormat::full),
|
||||||
no_split_(false),
|
no_split_(false),
|
||||||
|
report_sigmas_(false),
|
||||||
start_end_pt_width_(80),
|
start_end_pt_width_(80),
|
||||||
plus_zero_(nullptr),
|
plus_zero_(nullptr),
|
||||||
minus_zero_(nullptr)
|
minus_zero_(nullptr)
|
||||||
|
|
@ -178,7 +179,7 @@ ReportPath::findField(const char *name)
|
||||||
while (field_iter.hasNext()) {
|
while (field_iter.hasNext()) {
|
||||||
ReportField *field = field_iter.next();
|
ReportField *field = field_iter.next();
|
||||||
if (stringEq(name, field->name()))
|
if (stringEq(name, field->name()))
|
||||||
return field;
|
return field;
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
@ -258,6 +259,12 @@ ReportPath::setDigits(int digits)
|
||||||
plus_zero_ = stringPrint("%.*f", digits_, 0.0);
|
plus_zero_ = stringPrint("%.*f", digits_, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ReportPath::setReportSigmas(bool report)
|
||||||
|
{
|
||||||
|
report_sigmas_ = report;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -3168,8 +3175,10 @@ ReportPath::reportFieldDelayMinus(Delay value,
|
||||||
if (delayAsFloat(value) == field_blank_)
|
if (delayAsFloat(value) == field_blank_)
|
||||||
reportFieldBlank(field, result);
|
reportFieldBlank(field, result);
|
||||||
else {
|
else {
|
||||||
float mean_sigma = delayAsFloat(value, early_late, this);
|
const char *str = report_sigmas_
|
||||||
const char *str = units_->timeUnit()->asString(-mean_sigma, digits_);
|
? delayAsString(-value, this, digits_)
|
||||||
|
// : delayAsString(-value, early_late, this, digits_);
|
||||||
|
: units_->timeUnit()->asString(-delayAsFloat(value, early_late, this), digits_);
|
||||||
if (stringEq(str, plus_zero_))
|
if (stringEq(str, plus_zero_))
|
||||||
// Force leading minus sign.
|
// Force leading minus sign.
|
||||||
str = minus_zero_;
|
str = minus_zero_;
|
||||||
|
|
@ -3186,7 +3195,9 @@ ReportPath::reportFieldDelay(Delay value,
|
||||||
if (delayAsFloat(value) == field_blank_)
|
if (delayAsFloat(value) == field_blank_)
|
||||||
reportFieldBlank(field, result);
|
reportFieldBlank(field, result);
|
||||||
else {
|
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_))
|
if (stringEq(str, minus_zero_))
|
||||||
// Filter "-0.00" fields.
|
// Filter "-0.00" fields.
|
||||||
str = plus_zero_;
|
str = plus_zero_;
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,8 @@ public:
|
||||||
int digits() const { return digits_; }
|
int digits() const { return digits_; }
|
||||||
void setDigits(int digits);
|
void setDigits(int digits);
|
||||||
void setNoSplit(bool no_split);
|
void setNoSplit(bool no_split);
|
||||||
|
bool reportSigmas() const { return report_sigmas_; }
|
||||||
|
void setReportSigmas(bool report);
|
||||||
ReportField *findField(const char *name);
|
ReportField *findField(const char *name);
|
||||||
|
|
||||||
// Header above reportPathEnd results.
|
// Header above reportPathEnd results.
|
||||||
|
|
@ -520,6 +522,7 @@ protected:
|
||||||
bool report_net_;
|
bool report_net_;
|
||||||
bool no_split_;
|
bool no_split_;
|
||||||
int digits_;
|
int digits_;
|
||||||
|
bool report_sigmas_;
|
||||||
|
|
||||||
int start_end_pt_width_;
|
int start_end_pt_width_;
|
||||||
|
|
||||||
|
|
@ -573,7 +576,6 @@ protected:
|
||||||
Unit *unit_;
|
Unit *unit_;
|
||||||
bool enabled_;
|
bool enabled_;
|
||||||
char *blank_;
|
char *blank_;
|
||||||
ReportPath *report_path_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
||||||
|
|
@ -2472,6 +2472,12 @@ Sta::setReportPathNoSplit(bool no_split)
|
||||||
report_path_->setNoSplit(no_split);
|
report_path_->setNoSplit(no_split);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Sta::setReportPathSigmas(bool report_sigmas)
|
||||||
|
{
|
||||||
|
report_path_->setReportSigmas(report_sigmas);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Sta::reportPathEnds(PathEndSeq *ends)
|
Sta::reportPathEnds(PathEndSeq *ends)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -870,6 +870,7 @@ public:
|
||||||
ReportField *findReportPathField(const char *name);
|
ReportField *findReportPathField(const char *name);
|
||||||
void setReportPathDigits(int digits);
|
void setReportPathDigits(int digits);
|
||||||
void setReportPathNoSplit(bool no_split);
|
void setReportPathNoSplit(bool no_split);
|
||||||
|
void setReportPathSigmas(bool report_sigmas);
|
||||||
// Report clk skews for clks.
|
// Report clk skews for clks.
|
||||||
void reportClkSkew(ClockSet *clks,
|
void reportClkSkew(ClockSet *clks,
|
||||||
const Corner *corner,
|
const Corner *corner,
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,7 @@ proc parse_report_path_options { cmd args_var default_format
|
||||||
unset path_options
|
unset path_options
|
||||||
}
|
}
|
||||||
parse_key_args $cmd args path_options {-format -digits -fields} \
|
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
|
set format $default_format
|
||||||
if [info exists path_options(-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)
|
set digits $path_options(-digits)
|
||||||
check_positive_integer "-digits" $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 path_options(num_fmt) "%.${digits}f"
|
||||||
set_report_path_digits $digits
|
set_report_path_digits $digits
|
||||||
# Numberic field width expands with digits.
|
# Numberic field width expands with digits.
|
||||||
set field_width [expr $digits + $report_path_field_width_extra]
|
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
|
set_report_path_field_width $field $field_width
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4317,6 +4317,12 @@ set_report_path_no_split(bool no_split)
|
||||||
Sta::sta()->setReportPathNoSplit(no_split);
|
Sta::sta()->setReportPathNoSplit(no_split);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
set_report_path_sigmas(bool report_sigmas)
|
||||||
|
{
|
||||||
|
Sta::sta()->setReportPathSigmas(report_sigmas);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
delete_path_ref(PathRef *path)
|
delete_path_ref(PathRef *path)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue