From fc3143609daa3fa21bceba3501f7df713020da7c Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 18 Nov 2021 10:41:12 -0700 Subject: [PATCH] checkInterClkUncertainty for null tgt clk Signed-off-by: James Cherry --- search/PathEnd.cc | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/search/PathEnd.cc b/search/PathEnd.cc index 07089eaf..b4ca5b29 100644 --- a/search/PathEnd.cc +++ b/search/PathEnd.cc @@ -433,13 +433,14 @@ PathEnd::checkInterClkUncertainty(const ClockEdge *src_clk_edge, { Sdc *sdc = sta->sdc(); if (src_clk_edge - && src_clk_edge != sdc->defaultArrivalClockEdge()) { + && src_clk_edge != sdc->defaultArrivalClockEdge() + && tgt_clk_edge) { sdc->clockUncertainty(src_clk_edge->clock(), - src_clk_edge->transition(), - tgt_clk_edge->clock(), - tgt_clk_edge->transition(), - check_role->pathMinMax(), - uncertainty, exists); + src_clk_edge->transition(), + tgt_clk_edge->clock(), + tgt_clk_edge->transition(), + check_role->pathMinMax(), + uncertainty, exists); if (exists && check_role->genericRole() == TimingRole::setup()) uncertainty = -uncertainty; @@ -1889,10 +1890,8 @@ PathEndPathDelay::requiredTime(const StaState *sta) const float src_clk_offset = sourceClkOffset(sta); // Path delay includes target clk latency and timing check setup/hold // margin or external departure at target. - if (minMax(sta) == MinMax::max()) - return delay - src_clk_offset + tgt_clk_arrival - margin(sta); - else - return delay - src_clk_offset + tgt_clk_arrival + margin(sta); + return delay - src_clk_offset + tgt_clk_arrival + + ((minMax(sta) == MinMax::max()) ? -margin(sta) : margin(sta)); } }