diff --git a/search/PathEnd.cc b/search/PathEnd.cc index a60b1f45..c62e640b 100644 --- a/search/PathEnd.cc +++ b/search/PathEnd.cc @@ -1812,6 +1812,9 @@ PathEndPathDelay::findSrcClkArrival(const StaState *sta) Search *search = sta->search(); src_clk_arrival_ = search->pathClkPathArrival(&path_); } + else + src_clk_arrival_ = 0.0; + } void @@ -1941,11 +1944,10 @@ Required PathEndPathDelay::requiredTime(const StaState *sta) const { float delay = path_delay_->delay(); - if (ignoreClkLatency(sta)) { - if (minMax(sta) == MinMax::max()) - return src_clk_arrival_ + delay - margin(sta); - else - return src_clk_arrival_ + delay + margin(sta); + if (path_delay_->ignoreClkLatency()) { + float src_offset = path_.isClock(sta) ? path_.clkEdge(sta)->time() : src_clk_arrival_; + return src_offset + delay + + ((minMax(sta) == MinMax::max()) ? -margin(sta) : margin(sta)); } else { Arrival tgt_clk_arrival = targetClkArrival(sta); diff --git a/search/ReportPath.cc b/search/ReportPath.cc index 3770bd05..1a773740 100644 --- a/search/ReportPath.cc +++ b/search/ReportPath.cc @@ -713,7 +713,7 @@ ReportPath::reportFull(const PathEndPathDelay *end) const Path *tgt_clk_path = end->targetClkPath(); if (reportClkPath() && isPropagated(tgt_clk_path, tgt_clk)) - reportTgtClk(end, delay); + reportTgtClk(end, delay, 0.0, true); else { Arrival tgt_clk_delay = end->targetClkDelay(this); Arrival tgt_clk_arrival = delay + tgt_clk_delay; @@ -2130,6 +2130,15 @@ ReportPath::reportTgtClk(const PathEnd *end, bool is_prop) { float src_offset = end->sourceClkOffset(this); + reportTgtClk(end, prev_time, src_offset, is_prop); +} + +void +ReportPath::reportTgtClk(const PathEnd *end, + float prev_time, + float src_offset, + bool is_prop) +{ const ClockEdge *clk_edge = end->targetClkEdge(this); Clock *clk = clk_edge->clock(); const RiseFall *clk_rf = clk_edge->transition(); diff --git a/search/ReportPath.hh b/search/ReportPath.hh index f2017a14..90cd9bd1 100644 --- a/search/ReportPath.hh +++ b/search/ReportPath.hh @@ -213,6 +213,10 @@ protected: void reportTgtClk(const PathEnd *end, float prev_time, bool is_prop); + void reportTgtClk(const PathEnd *end, + float prev_time, + float src_offset, + bool is_prop); bool pathFromGenPropClk(const Path *clk_path, const EarlyLate *early_late); bool isGenPropClk(const Clock *clk,