no crpr for ideal clks

This commit is contained in:
James Cherry 2020-07-05 08:08:18 -07:00
parent 2627ed3812
commit 3d4b0cf1a3
1 changed files with 7 additions and 2 deletions

View File

@ -165,6 +165,8 @@ CheckCrpr::checkCrpr1(const Path *src_path,
const MinMax *src_clk_min_max = const MinMax *src_clk_min_max =
src_clk_path ? src_clk_path->minMax(this) : src_path->minMax(this); src_clk_path ? src_clk_path->minMax(this) : src_path->minMax(this);
if (crprPossible(src_clk, tgt_clk) if (crprPossible(src_clk, tgt_clk)
&& src_clk_info->isPropagated()
&& tgt_clk_info->isPropagated()
// Note that crpr clk min/max is NOT the same as the path min max. // Note that crpr clk min/max is NOT the same as the path min max.
// 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.
@ -372,9 +374,12 @@ CheckCrpr::outputDelayCrpr1(const Path *src_path,
{ {
crpr = 0.0; crpr = 0.0;
crpr_pin = nullptr; crpr_pin = nullptr;
ClkInfo *src_clk_info = src_path->tag(this)->clkInfo();
Clock *tgt_clk = tgt_clk_edge->clock(); Clock *tgt_clk = tgt_clk_edge->clock();
Clock *src_clk = src_path->clock(this); Clock *src_clk = src_path->clock(this);
if (tgt_clk->isGenerated() if (src_clk_info->isPropagated()
&& tgt_clk->isGenerated()
&& tgt_clk->isPropagated()
&& crprPossible(src_clk, tgt_clk)) { && crprPossible(src_clk, tgt_clk)) {
PathVertex tgt_genclk_path; PathVertex tgt_genclk_path;
portClkPath(tgt_clk_edge, tgt_clk_edge->clock()->defaultPin(), tgt_path_ap, portClkPath(tgt_clk_edge, tgt_clk_edge->clock()->defaultPin(), tgt_path_ap,
@ -393,7 +398,7 @@ CheckCrpr::crprPossible(Clock *clk1,
return clk1 && clk2 return clk1 && clk2
&& !clk1->isVirtual() && !clk1->isVirtual()
&& !clk2->isVirtual() && !clk2->isVirtual()
// Generated clock can have crpr in the source path. // Generated clocks can have crpr in the source path.
&& (clk1 == clk2 && (clk1 == clk2
|| clk1->isGenerated() || clk1->isGenerated()
|| clk2->isGenerated() || clk2->isGenerated()