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.
This commit is contained in:
Tim Edwards 2020-03-17 21:26:46 -04:00
parent 4f8ac38b27
commit f4174d3670
2 changed files with 10 additions and 4 deletions

View File

@ -1 +1 @@
8.2.196
8.2.197

View File

@ -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 */
}