set_max_delay -ignore_clock_latency w/clk data, prop clk

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2024-10-02 15:20:29 -05:00
parent cb38bad061
commit 8bf1ad1afb
3 changed files with 21 additions and 6 deletions

View File

@ -1812,6 +1812,9 @@ PathEndPathDelay::findSrcClkArrival(const StaState *sta)
Search *search = sta->search(); Search *search = sta->search();
src_clk_arrival_ = search->pathClkPathArrival(&path_); src_clk_arrival_ = search->pathClkPathArrival(&path_);
} }
else
src_clk_arrival_ = 0.0;
} }
void void
@ -1941,11 +1944,10 @@ Required
PathEndPathDelay::requiredTime(const StaState *sta) const PathEndPathDelay::requiredTime(const StaState *sta) const
{ {
float delay = path_delay_->delay(); float delay = path_delay_->delay();
if (ignoreClkLatency(sta)) { if (path_delay_->ignoreClkLatency()) {
if (minMax(sta) == MinMax::max()) float src_offset = path_.isClock(sta) ? path_.clkEdge(sta)->time() : src_clk_arrival_;
return src_clk_arrival_ + delay - margin(sta); return src_offset + delay
else + ((minMax(sta) == MinMax::max()) ? -margin(sta) : margin(sta));
return src_clk_arrival_ + delay + margin(sta);
} }
else { else {
Arrival tgt_clk_arrival = targetClkArrival(sta); Arrival tgt_clk_arrival = targetClkArrival(sta);

View File

@ -713,7 +713,7 @@ ReportPath::reportFull(const PathEndPathDelay *end)
const Path *tgt_clk_path = end->targetClkPath(); const Path *tgt_clk_path = end->targetClkPath();
if (reportClkPath() if (reportClkPath()
&& isPropagated(tgt_clk_path, tgt_clk)) && isPropagated(tgt_clk_path, tgt_clk))
reportTgtClk(end, delay); reportTgtClk(end, delay, 0.0, true);
else { else {
Arrival tgt_clk_delay = end->targetClkDelay(this); Arrival tgt_clk_delay = end->targetClkDelay(this);
Arrival tgt_clk_arrival = delay + tgt_clk_delay; Arrival tgt_clk_arrival = delay + tgt_clk_delay;
@ -2130,6 +2130,15 @@ ReportPath::reportTgtClk(const PathEnd *end,
bool is_prop) bool is_prop)
{ {
float src_offset = end->sourceClkOffset(this); 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); const ClockEdge *clk_edge = end->targetClkEdge(this);
Clock *clk = clk_edge->clock(); Clock *clk = clk_edge->clock();
const RiseFall *clk_rf = clk_edge->transition(); const RiseFall *clk_rf = clk_edge->transition();

View File

@ -213,6 +213,10 @@ protected:
void reportTgtClk(const PathEnd *end, void reportTgtClk(const PathEnd *end,
float prev_time, float prev_time,
bool is_prop); bool is_prop);
void reportTgtClk(const PathEnd *end,
float prev_time,
float src_offset,
bool is_prop);
bool pathFromGenPropClk(const Path *clk_path, bool pathFromGenPropClk(const Path *clk_path,
const EarlyLate *early_late); const EarlyLate *early_late);
bool isGenPropClk(const Clock *clk, bool isGenPropClk(const Clock *clk,