diff --git a/include/sta/CycleAccting.hh b/include/sta/CycleAccting.hh index a412043f..0f35110b 100644 --- a/include/sta/CycleAccting.hh +++ b/include/sta/CycleAccting.hh @@ -66,6 +66,7 @@ private: int tgt_cycle, float delay, float req); + int firstCycle(const ClockEdge *clk_edge) const; const ClockEdge *src_; const ClockEdge *tgt_; diff --git a/sdc/CycleAccting.cc b/sdc/CycleAccting.cc index 9526ea85..8f87c962 100644 --- a/sdc/CycleAccting.cc +++ b/sdc/CycleAccting.cc @@ -72,13 +72,13 @@ CycleAccting::findDelays(StaState *sta) bool tgt_past_src = false; bool src_past_tgt = false; int tgt_cycle, src_cycle; - for (tgt_cycle = (tgt_->time() < tgt_period) ? 0 : -1; + for (tgt_cycle = firstCycle(tgt_); tgt_cycle <= tgt_max_cycle; tgt_cycle++) { double tgt_cycle_start = tgt_cycle * tgt_period; double tgt_time = tgt_cycle_start + tgt_->time(); double tgt_opp_time = tgt_cycle_start + tgt_opp_time1; - for (src_cycle = (src_->time() < src_period) ? 0 : -1; + for (src_cycle = firstCycle(src_); ; src_cycle++) { double src_cycle_start = src_cycle * src_period; @@ -205,6 +205,17 @@ CycleAccting::findDelays(StaState *sta) findDefaultArrivalSrcDelays(); } +int +CycleAccting::firstCycle(const ClockEdge *clk_edge) const +{ + if (clk_edge->time() < 0) + return 1; + else if (clk_edge->time() < clk_edge->clock()->period()) + return 0; + else + return -1; +} + void CycleAccting::setSetupAccting(int src_cycle, int tgt_cycle,