Skip to content

Commit af55d41

Browse files
committed
rsz: Fix ideal clock handling in driver delay modeling
In buffering, when modeling the driver delay change due to a changed load, if the driver arc goes from a clock pin to a register output pin, make the change to consider an idealized clock arrival on the clock pin instead of looking up the arrival value on the vertex. For arcs going from an ideal clock pin we already override the slew (via the helper `graph_delay_calc_->edgeFromSlew()`), but an arrival override was missing until now. Signed-off-by: Martin Povišer <[email protected]>
1 parent 13b29fb commit af55d41

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

src/rsz/src/Rebuffer.cc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ namespace rsz {
2121

2222
using odb::dbSigType;
2323
using sta::ArcDcalcResult;
24+
using sta::Arrival;
2425
using sta::Edge;
2526
using sta::fuzzyGreater;
2627
using sta::fuzzyGreaterEqual;
@@ -241,8 +242,12 @@ std::tuple<Delay, Delay, Slew> Rebuffer::drvrPinTiming(const BnetPtr& bnet)
241242
load_pin_index_map,
242243
dcalc_ap);
243244
rf_delay = dcalc_result.gateDelay();
244-
rf_correction = arrival_path->arrival()
245-
- (driver_path->arrival() + dcalc_result.gateDelay());
245+
246+
Arrival prev_arrival = driver_path->isClock(sta_)
247+
? search_->clkPathArrival(driver_path)
248+
: driver_path->arrival();
249+
rf_correction
250+
= arrival_path->arrival() - (prev_arrival + dcalc_result.gateDelay());
246251
rf_slew = dcalc_result.drvrSlew();
247252
} else {
248253
rf_delay = 0;

0 commit comments

Comments
 (0)