diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index 692ff99f..b1f2e8a8 100644 Binary files a/doc/OpenSTA.odt and b/doc/OpenSTA.odt differ diff --git a/doc/OpenSTA.pdf b/doc/OpenSTA.pdf index 31b40f9d..27b53ea3 100644 Binary files a/doc/OpenSTA.pdf and b/doc/OpenSTA.pdf differ diff --git a/search/Sta.cc b/search/Sta.cc index b1b78be2..24668585 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -3073,16 +3073,21 @@ MinPeriodEndVisitor::copy() void MinPeriodEndVisitor::visit(PathEnd *path_end) { + Network *network = sta_->network(); Path *path = path_end->path(); ClockEdge *src_edge = path_end->sourceClkEdge(sta_); ClockEdge *tgt_edge = path_end->targetClkEdge(sta_); - if (path->minMax(sta_) == MinMax::max() + PathEnd::Type end_type = path_end->type(); + if ((end_type == PathEnd::Type::check + || end_type == PathEnd::Type::output_delay) + && path->minMax(sta_) == MinMax::max() && src_edge->clock() == clk_ && tgt_edge->clock() == clk_ // Only consider rise/rise and fall/fall paths. && src_edge->transition() == tgt_edge->transition() + && path_end->multiCyclePath() == nullptr && (include_port_paths_ - || !(path_end->isOutputDelay() + || !(network->isTopLevelPort(path->pin(sta_)) || pathIsFromInputPort(path_end)))) { Slack slack = path_end->slack(sta_); float period = clk_->period() - slack; diff --git a/tcl/Search.tcl b/tcl/Search.tcl index 1b154f4e..63ffaa3a 100644 --- a/tcl/Search.tcl +++ b/tcl/Search.tcl @@ -1087,7 +1087,7 @@ proc report_clock_min_period { args } { if { [info exists keys(-clocks)] } { set clks [get_clocks $keys(-clocks)] } else { - set clks [all_clocks] + set clks [sort_by_name [all_clocks]] } set include_port_paths [info exists flags(-include_port_paths)]