set_max_delay -ignore_clock_latency w/clk data, prop clk
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
cb38bad061
commit
8bf1ad1afb
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue