From bcf35db7131e2a9bb319562cc42fe36ca3f83553 Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Sat, 4 Jun 2022 08:16:50 -0700 Subject: [PATCH] Working through various issues with parasitic capacitance extraction using the newer methods for nearest-edge searching and fringe area of effect. Removed a same-net check in a routine that removes capacitances that are redundant due to hierarchical overlaps; these redundancies must be checked on shapes within the same net. Corrected (again) an out-of-clip-bounds check. --- VERSION | 2 +- extract/ExtBasic.c | 4 ++-- extract/ExtCouple.c | 10 +++------- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/VERSION b/VERSION index 3d1b811e..368eea4b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.308 +8.3.309 diff --git a/extract/ExtBasic.c b/extract/ExtBasic.c index 61d6e63d..c50b9065 100644 --- a/extract/ExtBasic.c +++ b/extract/ExtBasic.c @@ -4016,11 +4016,11 @@ extNodeAreaFunc(tile, arg) if (extNodeClipArea) { TITORECT(tile, &r); - GEOCLIP(&r, extNodeClipArea); /* Check if the tile is outside the clip area */ - if ((r.r_xtop <= r.r_xbot) || (r.r_ytop < r.r_ybot)) continue; + if (!GEO_OVERLAP(&r, extNodeClipArea)) continue; + GEOCLIP(&r, extNodeClipArea); area = (dlong)(r.r_xtop - r.r_xbot) * (dlong)(r.r_ytop - r.r_ybot); } else area = (dlong)(TOP(tile) - BOTTOM(tile)) * (dlong)(RIGHT(tile) - LEFT(tile)); diff --git a/extract/ExtCouple.c b/extract/ExtCouple.c index 98c31e11..8e7e8caa 100644 --- a/extract/ExtCouple.c +++ b/extract/ExtCouple.c @@ -706,11 +706,10 @@ extAddCouple(bp, ecs) bpCopy = *bp; bp = &bpCopy; - GEOCLIP(&bp->b_segment, extCoupleSearchArea); - - if ((bp->b_segment.r_ytop <= bp->b_segment.r_ybot) || - (bp->b_segment.r_xtop <= bp->b_segment.r_xbot)) + if (!GEO_OVERLAP(&bp->b_segment, extCoupleSearchArea)) return 0; + + GEOCLIP(&bp->b_segment, extCoupleSearchArea); } r = ovr = bp->b_segment; @@ -894,9 +893,6 @@ extSideOverlap(tp, esws) tb = TiGetType(tp); if (tb == TT_SPACE) return (0); - /* If shapes belong to the same node then there is no coupling. */ - if (rtp == rbp) return (0); - if (bp->b_segment.r_xtop == bp->b_segment.r_xbot) { length = MIN(bp->b_segment.r_ytop, TOP(tp))