diff --git a/app/Main.cc b/app/Main.cc index 12735f63..171b8859 100644 --- a/app/Main.cc +++ b/app/Main.cc @@ -36,7 +36,8 @@ extern const char *tcl_inits[]; } int -main(int argc, char **argv) +main(int argc, + char **argv) { if (argc == 2 && stringEq(argv[1], "-help")) { showUseage(argv[0]); diff --git a/app/StaMain.cc b/app/StaMain.cc index 47fdcbdb..79ab685f 100644 --- a/app/StaMain.cc +++ b/app/StaMain.cc @@ -216,6 +216,7 @@ showUseage(char *prog) printf(" -x cmd evaluate cmd\n"); printf(" -f cmd_file source cmd_file\n"); printf(" -threads count|max use count threads\n"); + printf(" -no_splash do not show the license splash at startup\n"); } } // namespace diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index 2079b261..42842e08 100644 Binary files a/doc/OpenSTA.odt and b/doc/OpenSTA.odt differ diff --git a/graph/DelayFloat.cc b/graph/DelayFloat.cc index e769c8e6..707253ae 100644 --- a/graph/DelayFloat.cc +++ b/graph/DelayFloat.cc @@ -127,7 +127,7 @@ delayAsString(const Delay &delay, float delayAsFloat(const Delay &delay, const EarlyLate *, - float ) + const StaState *) { return delay; } diff --git a/graph/DelayFloat.hh b/graph/DelayFloat.hh index 1b898b52..2680f325 100644 --- a/graph/DelayFloat.hh +++ b/graph/DelayFloat.hh @@ -59,7 +59,7 @@ delayAsFloat(const Delay &delay) float delayAsFloat(const Delay &delay, const EarlyLate *early_late, - float sigma_factor); + const StaState *sta); float delaySigma2(const Delay &delay, const EarlyLate *early_late); diff --git a/graph/DelayNormal1.cc b/graph/DelayNormal1.cc index 975b1812..1637f282 100644 --- a/graph/DelayNormal1.cc +++ b/graph/DelayNormal1.cc @@ -364,14 +364,18 @@ delayRatio(const Delay &delay1, float delayAsFloat(const Delay &delay, const EarlyLate *early_late, - float sigma_factor) + const StaState *sta) { - if (early_late == EarlyLate::early()) - return delay.mean() - delay.sigma() * sigma_factor; - else if (early_late == EarlyLate::late()) - return delay.mean() + delay.sigma() * sigma_factor; + if (sta->pocvEnabled()) { + if (early_late == EarlyLate::early()) + return delay.mean() - delay.sigma() * sta->sigmaFactor(); + else if (early_late == EarlyLate::late()) + return delay.mean() + delay.sigma() * sta->sigmaFactor(); + else + internalError("unknown early/late value."); + } else - internalError("unknown early/late value."); + return delay.mean(); } float @@ -410,7 +414,7 @@ delayAsString(const Delay &delay, const StaState *sta, int digits) { - float mean_sigma = delayAsFloat(delay, early_late, sta->sigmaFactor()); + float mean_sigma = delayAsFloat(delay, early_late, sta); return sta->units()->timeUnit()->asString(mean_sigma, digits); } diff --git a/graph/DelayNormal1.hh b/graph/DelayNormal1.hh index a286c934..97d70eed 100644 --- a/graph/DelayNormal1.hh +++ b/graph/DelayNormal1.hh @@ -95,7 +95,7 @@ Delay operator*(const Delay &delay1, float delayAsFloat(const Delay &delay, const EarlyLate *early_late, - float sigma_factor); + const StaState *sta); float delaySigma2(const Delay &delay, const EarlyLate *early_late); diff --git a/graph/DelayNormal2.cc b/graph/DelayNormal2.cc index d4b6978b..69eb5bc2 100644 --- a/graph/DelayNormal2.cc +++ b/graph/DelayNormal2.cc @@ -377,7 +377,7 @@ operator*(const Delay &delay1, float delay2) { return Delay(delay1.mean() * delay2, - delay1.sigma2()Early * delay2, + delay1.sigma2Early() * delay2, delay1.sigma2Late() * delay2); } @@ -391,14 +391,18 @@ delayRatio(const Delay &delay1, float delayAsFloat(const Delay &delay, const EarlyLate *early_late, - float sigma_factor) + const StaState *sta) { - if (early_late == EarlyLate::early()) - return delay.mean() - delay.sigma(early_late) * sigma_factor; - else if (early_late == EarlyLate::late()) - return delay.mean() + delay.sigma(early_late) * sigma_factor; + if (sta->pocvEnabled()) { + if (early_late == EarlyLate::early()) + return delay.mean() - delay.sigma(early_late) * sta->sigmaFactor(); + else if (early_late == EarlyLate::late()) + return delay.mean() + delay.sigma(early_late) * sta->sigmaFactor(); + else + internalError("unknown early/late value."); + } else - internalError("unknown early/late value."); + return delay.mean(); } float @@ -444,7 +448,7 @@ delayAsString(const Delay &delay, const StaState *sta, int digits) { - float mean_sigma = delayAsFloat(delay, early_late, sta->sigmaFactor()); + float mean_sigma = delayAsFloat(delay, early_late, sta); return sta->units()->timeUnit()->asString(mean_sigma, digits); } diff --git a/graph/DelayNormal2.hh b/graph/DelayNormal2.hh index 6773f428..3e2d280a 100644 --- a/graph/DelayNormal2.hh +++ b/graph/DelayNormal2.hh @@ -102,7 +102,7 @@ Delay operator*(const Delay &delay1, float delayAsFloat(const Delay &delay, const EarlyLate *early_late, - float sigma_factor); + const StaState *sta); float delaySigma2(const Delay &delay, const EarlyLate *early_late); diff --git a/search/Crpr.cc b/search/Crpr.cc index e3d9e378..4acc4f53 100644 --- a/search/Crpr.cc +++ b/search/Crpr.cc @@ -91,9 +91,9 @@ CheckCrpr::maxCrpr(ClkInfo *clk_info) Arrival other_arrival = otherMinMaxArrival(&crpr_clk_vpath); float crpr_diff = abs(delayAsFloat(crpr_clk_vpath.arrival(this), EarlyLate::late(), - sigma_factor_) + this) - delayAsFloat(other_arrival, EarlyLate::early(), - sigma_factor_)); + this)); return crpr_diff; } } @@ -388,10 +388,10 @@ float CheckCrpr::crprArrivalDiff(const PathVertex *path) { Arrival other_arrival = otherMinMaxArrival(path); - float crpr_diff = abs(delayAsFloat(path->arrival(this), EarlyLate::late(), - sigma_factor_) - - delayAsFloat(other_arrival, EarlyLate::early(), - sigma_factor_)); + float crpr_diff = abs(delayAsFloat(path->arrival(this), + EarlyLate::late(), this) + - delayAsFloat(other_arrival, + EarlyLate::early(), this)); return crpr_diff; } diff --git a/search/Property.cc b/search/Property.cc index 5794c0a3..b90e0941 100644 --- a/search/Property.cc +++ b/search/Property.cc @@ -755,7 +755,9 @@ getProperty(const Net *net, Sta *sta) { auto network = sta->cmdNetwork(); - if (stringEqual(property, "full_name")) + if (stringEqual(property, "name")) + return PropertyValue(network->name(net)); + else if (stringEqual(property, "full_name")) return PropertyValue(network->pathName(net)); else throw PropertyUnknown("net", property); diff --git a/search/ReportPath.cc b/search/ReportPath.cc index 6f977b1a..40562cec 100644 --- a/search/ReportPath.cc +++ b/search/ReportPath.cc @@ -2619,8 +2619,8 @@ ReportPath::reportPath5(const Path *path, // from the input to the loads. Report the wire delay on the // input pin instead. Arrival next_time = next_path->arrival(this) + time_offset; - incr = delayAsFloat(next_time, min_max, sigma_factor_) - - delayAsFloat(time, min_max, sigma_factor_); + incr = delayAsFloat(next_time, min_max, this) + - delayAsFloat(time, min_max, this); time = next_time; line_case = "input_drive"; } @@ -2667,13 +2667,13 @@ ReportPath::reportPath5(const Path *path, line_case = "clk_ideal"; } else if (is_clk && !is_clk_start) { - incr = delayAsFloat(time, min_max, sigma_factor_) - - delayAsFloat(prev_time, min_max, sigma_factor_); + incr = delayAsFloat(time, min_max, this) + - delayAsFloat(prev_time, min_max, this); line_case = "clk_prop"; } else { - incr = delayAsFloat(time, min_max, sigma_factor_) - - delayAsFloat(prev_time, min_max, sigma_factor_); + incr = delayAsFloat(time, min_max, this) + - delayAsFloat(prev_time, min_max, this); line_case = "normal"; } if (report_input_pin_ @@ -3161,7 +3161,7 @@ ReportPath::reportFieldDelayMinus(Delay value, if (delayAsFloat(value) == field_blank_) reportFieldBlank(field, result); else { - float mean_sigma = delayAsFloat(value, early_late, sigma_factor_); + float mean_sigma = delayAsFloat(value, early_late, this); const char *str = units_->timeUnit()->asString(-mean_sigma, digits_); if (stringEq(str, plus_zero_)) // Force leading minus sign. diff --git a/tcl/NetworkEdit.tcl b/tcl/NetworkEdit.tcl index bd5a6fff..e46b5a45 100644 --- a/tcl/NetworkEdit.tcl +++ b/tcl/NetworkEdit.tcl @@ -245,6 +245,12 @@ proc insert_buffer { buffer_name buffer_cell net load_pins buffer_out_net_name } set buffer_cell [sta::get_lib_cell_warn "buffer_cell" $buffer_cell] set net [sta::get_net_warn "net" $net] + if { [get_cells -quiet $buffer_name] != "" } { + sta_error "instance $buffer_name already exists." + } + if { [get_nets -quiet $buffer_out_net_name] != "" } { + sta_error "net $buffer_out_net_name already exists." + } # Copy backslashes that will be removed by foreach. set load_pins1 [string map {\\ \\\\} $load_pins] set load_pins {}