From f4174d36703cd41c4622b04efad8bf8d2d69ad52 Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Tue, 17 Mar 2020 21:26:46 -0400 Subject: [PATCH] Fixed a recent addition to the extraction method that prevents generating duplicate devices that may have parts overlaid in different subcells; this failed to filter the check by plane of the device, and so if any two devices exist at the same point in two different planes (e.g., metal resistor and a transistor), one of them would get eliminated. --- VERSION | 2 +- extract/ExtBasic.c | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/VERSION b/VERSION index b61b42f3..ed24f39b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.2.196 +8.2.197 diff --git a/extract/ExtBasic.c b/extract/ExtBasic.c index d783f19c..4dce1680 100644 --- a/extract/ExtBasic.c +++ b/extract/ExtBasic.c @@ -226,11 +226,14 @@ extBasic(def, outFile) /* when, for example, a device contact is placed in another */ /* cell, which can happen for devices like capacitors and */ /* diodes, where the device identifier layer may include */ - /* a contact type. */ + /* a contact type. NOTE: This routine needs to limit the */ + /* search to devices in the same plane as the transistor under */ + /* consideration. */ SearchContext scontext; CellUse dummy; int extFoundFunc(); + TileTypeBitMask transPlaneMask; scontext.scx_use = &dummy; dummy.cu_def = def; @@ -240,8 +243,11 @@ extBasic(def, outFile) scontext.scx_area.r_ur.p_x++; scontext.scx_area.r_ur.p_y++; - if (DBTreeSrTiles(&scontext, &ExtCurStyle->exts_deviceMask, 0, - extFoundFunc, (ClientData)def) != 0) + TTMaskAndMask3(&transPlaneMask, &ExtCurStyle->exts_deviceMask, + &DBPlaneTypes[reg->treg_pnum]); + + if (DBTreeSrTiles(&scontext, &transPlaneMask, 0, extFoundFunc, + (ClientData)def) != 0) reg->treg_type = TT_SPACE; /* Disables the trans record */ }