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();
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);

View File

@ -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();

View File

@ -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,