diff --git a/search/ReportPath.cc b/search/ReportPath.cc index aa9eeaed..3e99b293 100644 --- a/search/ReportPath.cc +++ b/search/ReportPath.cc @@ -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_; diff --git a/search/ReportPath.hh b/search/ReportPath.hh index 2c83f0ba..2197e678 100644 --- a/search/ReportPath.hh +++ b/search/ReportPath.hh @@ -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 diff --git a/search/Sta.cc b/search/Sta.cc index f49b4721..0f7184fb 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -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) { diff --git a/search/Sta.hh b/search/Sta.hh index f6d1b76b..75275a5c 100644 --- a/search/Sta.hh +++ b/search/Sta.hh @@ -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, diff --git a/tcl/Search.tcl b/tcl/Search.tcl index e75b4911..6a808d81 100644 --- a/tcl/Search.tcl +++ b/tcl/Search.tcl @@ -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 } diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index 42f6ee5b..bc0a1df3 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -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) {