no crpr for ideal clocks
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
02740e56af
commit
fb5d87bd23
|
|
@ -58,7 +58,7 @@ ClkInfo::ClkInfo(const ClockEdge *clk_edge,
|
||||||
clk_edge_(clk_edge),
|
clk_edge_(clk_edge),
|
||||||
clk_src_(clk_src),
|
clk_src_(clk_src),
|
||||||
gen_clk_src_(gen_clk_src),
|
gen_clk_src_(gen_clk_src),
|
||||||
crpr_clk_path_(crpr_clk_path),
|
crpr_clk_path_(is_propagated ? crpr_clk_path : PathVertexPtr()),
|
||||||
uncertainties_(uncertainties),
|
uncertainties_(uncertainties),
|
||||||
insertion_(insertion),
|
insertion_(insertion),
|
||||||
latency_(latency),
|
latency_(latency),
|
||||||
|
|
|
||||||
|
|
@ -186,7 +186,7 @@ CheckCrpr::checkCrpr1(const Path *src_path,
|
||||||
// For path from latches that are borrowing the enable path
|
// For path from latches that are borrowing the enable path
|
||||||
// is from the opposite min/max of the data.
|
// is from the opposite min/max of the data.
|
||||||
&& src_clk_min_max != tgt_clk_path->minMax(this)
|
&& src_clk_min_max != tgt_clk_path->minMax(this)
|
||||||
&& (src_clk_path != nullptr
|
&& (src_clk_path
|
||||||
|| src_clk->isGenerated())) {
|
|| src_clk->isGenerated())) {
|
||||||
// Src path from input port clk path can only be from generated clk path.
|
// Src path from input port clk path can only be from generated clk path.
|
||||||
PathVertex port_clk_path;
|
PathVertex port_clk_path;
|
||||||
|
|
|
||||||
|
|
@ -1144,6 +1144,8 @@ ArrivalVisitor::visit(Vertex *vertex)
|
||||||
if (crpr_active_
|
if (crpr_active_
|
||||||
&& search_->crprPathPruningEnabled()
|
&& search_->crprPathPruningEnabled()
|
||||||
&& !vertex->crprPathPruningDisabled()
|
&& !vertex->crprPathPruningDisabled()
|
||||||
|
// No crpr for ideal clocks.
|
||||||
|
&& tag_bldr_->hasPropagatedClk()
|
||||||
&& !has_fanin_one_)
|
&& !has_fanin_one_)
|
||||||
pruneCrprArrivals();
|
pruneCrprArrivals();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,7 @@ TagGroupBldr::TagGroupBldr(bool match_crpr_clk_pin,
|
||||||
has_genclk_src_tag_(false),
|
has_genclk_src_tag_(false),
|
||||||
has_filter_tag_(false),
|
has_filter_tag_(false),
|
||||||
has_loop_tag_(false),
|
has_loop_tag_(false),
|
||||||
|
has_propagated_clk_(false),
|
||||||
sta_(sta)
|
sta_(sta)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -245,6 +246,8 @@ TagGroupBldr::setMatchArrival(Tag *tag,
|
||||||
has_filter_tag_ = true;
|
has_filter_tag_ = true;
|
||||||
if (tag->isLoop())
|
if (tag->isLoop())
|
||||||
has_loop_tag_ = true;
|
has_loop_tag_ = true;
|
||||||
|
if (tag->clkInfo()->isPropagated())
|
||||||
|
has_propagated_clk_ = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,7 @@ public:
|
||||||
bool hasGenClkSrcTag() const { return has_genclk_src_tag_; }
|
bool hasGenClkSrcTag() const { return has_genclk_src_tag_; }
|
||||||
bool hasFilterTag() const { return has_filter_tag_; }
|
bool hasFilterTag() const { return has_filter_tag_; }
|
||||||
bool hasLoopTag() const { return has_loop_tag_; }
|
bool hasLoopTag() const { return has_loop_tag_; }
|
||||||
|
bool hasPropagatedClk() const { return has_propagated_clk_; }
|
||||||
void tagMatchArrival(Tag *tag,
|
void tagMatchArrival(Tag *tag,
|
||||||
// Return values.
|
// Return values.
|
||||||
Tag *&tag_match,
|
Tag *&tag_match,
|
||||||
|
|
@ -140,9 +141,10 @@ protected:
|
||||||
ArrivalSeq arrivals_;
|
ArrivalSeq arrivals_;
|
||||||
PathPrevSeq prev_paths_;
|
PathPrevSeq prev_paths_;
|
||||||
bool has_clk_tag_;
|
bool has_clk_tag_;
|
||||||
bool has_genclk_src_tag_:1;
|
bool has_genclk_src_tag_;
|
||||||
bool has_filter_tag_;
|
bool has_filter_tag_;
|
||||||
bool has_loop_tag_;
|
bool has_loop_tag_;
|
||||||
|
bool has_propagated_clk_;
|
||||||
const StaState *sta_;
|
const StaState *sta_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue