From da967ac6f59339481c90a7799966745f8ab184a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Povi=C5=A1er?= Date: Tue, 17 Jun 2025 11:13:00 +0200 Subject: [PATCH 1/2] rsz: Use exact min on junction slack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Povišer --- src/rsz/src/Rebuffer2.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/rsz/src/Rebuffer2.cc b/src/rsz/src/Rebuffer2.cc index 21cfc68257..11868b565c 100644 --- a/src/rsz/src/Rebuffer2.cc +++ b/src/rsz/src/Rebuffer2.cc @@ -1030,10 +1030,9 @@ void Rebuffer::annotateTiming(const BnetPtr& tree) int ret = recurse(bnet->ref()) + recurse(bnet->ref2()); const BnetPtr& p = bnet->ref(); const BnetPtr& q = bnet->ref2(); - const BnetPtr& min_req = fuzzyLess(p->slack(), q->slack()) ? p : q; bnet->setSlackTransition( combinedTransition(p->slackTransition(), q->slackTransition())); - bnet->setSlack(min_req->slack()); + bnet->setSlack(std::min(p->slack(), q->slack())); bnet->setCapacitance(p->cap() + q->cap()); return ret; } From fabacbc95b96cf4196baa88ee866d53d44cc6ca5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Povi=C5=A1er?= Date: Tue, 17 Jun 2025 11:17:31 +0200 Subject: [PATCH 2/2] rsz: Adjust lerp formula to reduce error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Povišer --- src/rsz/src/Rebuffer2.cc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/rsz/src/Rebuffer2.cc b/src/rsz/src/Rebuffer2.cc index 11868b565c..d2896bdc0d 100644 --- a/src/rsz/src/Rebuffer2.cc +++ b/src/rsz/src/Rebuffer2.cc @@ -828,6 +828,11 @@ Delay Rebuffer::marginedSlackThreshold(Delay slack) return slack - (ref_slack_ - slack) * 2e-6; } +float lerp(float a, float b, float t) +{ + return a + (b - a) * t; +} + // Recover area on a rebuffering choice without regressing timing BufferedNetPtr Rebuffer::recoverArea(const BufferedNetPtr& root, Delay slack_target, @@ -877,9 +882,8 @@ BufferedNetPtr Rebuffer::recoverArea(const BufferedNetPtr& root, opts = recurse(inner, 0); } - Delay threshold = marginedSlackThreshold( - (slack_target + node->arrivalDelay()) * alpha - + node->slack() * (1.0 - alpha)); + Delay threshold = marginedSlackThreshold(lerp( + node->slack(), slack_target + node->arrivalDelay(), alpha)); insertBufferOptions(opts, level, /*next_segment_wl=*/upstream_wl, @@ -892,9 +896,8 @@ BufferedNetPtr Rebuffer::recoverArea(const BufferedNetPtr& root, const BnetSeq& left_opts = recurse(node->ref(), upstream_wl); const BnetSeq& right_opts = recurse(node->ref2(), upstream_wl); - Delay threshold = marginedSlackThreshold( - (slack_target + node->arrivalDelay()) * alpha - + node->slack() * (1.0 - alpha)); + Delay threshold = marginedSlackThreshold(lerp( + node->slack(), slack_target + node->arrivalDelay(), alpha)); BnetMetrics assured_envelope = node->metrics().withSlack(threshold); BnetPtr assured_fallback;