Corrected one final case of extracting an extended-drain pFET

because the opposite type (pwell) is not directly underneath the
gate, but touches it on the plane below.  Because the pwell may
be represented by space tiles on the well plane, it was also
necessary to deal with the space type in the bitmask.
This commit is contained in:
Tim Edwards 2020-09-21 20:23:37 -04:00
parent ec3ac4863f
commit 5308c35268
1 changed files with 13 additions and 3 deletions

View File

@ -2262,7 +2262,7 @@ extTransFindSubs(tile, t, mask, def, sn, layerptr)
NodeRegion **sn;
TileType *layerptr;
{
Rect tileArea;
Rect tileArea, tileAreaPlus;
int pNum;
int extTransFindSubsFunc1(); /* Forward declaration */
NodeAndType noderec;
@ -2271,11 +2271,16 @@ extTransFindSubs(tile, t, mask, def, sn, layerptr)
noderec.layer = TT_SPACE;
TiToRect(tile, &tileArea);
/* Expand tile area by 1 in all directions. This catches terminals */
/* on certain extended drain MOSFET devices. */
GEO_EXPAND(&tileArea, 1, &tileAreaPlus);
for (pNum = PL_TECHDEPBASE; pNum < DBNumPlanes; pNum++)
{
if (TTMaskIntersect(&DBPlaneTypes[pNum], mask))
{
if (DBSrPaintArea((Tile *) NULL, def->cd_planes[pNum], &tileArea,
if (DBSrPaintArea((Tile *) NULL, def->cd_planes[pNum], &tileAreaPlus,
mask, extTransFindSubsFunc1, (ClientData)&noderec))
{
*sn = noderec.region;
@ -3041,7 +3046,12 @@ extSpecialPerimFunc(bp, sense)
{
for (i = 0; !TTMaskIsZero(&devptr->exts_deviceSDTypes[i]); i++)
{
PlaneMask pmask = DBTechTypesToPlanes(&devptr->exts_deviceSDTypes[i]);
TileTypeBitMask mmask;
PlaneMask pmask;
mmask = devptr->exts_deviceSDTypes[i];
if (toutside != TT_SPACE) TTMaskClearType(&mmask, TT_SPACE);
pmask = DBTechTypesToPlanes(&mmask);
if (!PlaneMaskHasPlane(pmask, DBPlane(tinside)))
{