mirror of
https://github.com/RTimothyEdwards/magic.git
synced 2026-08-29 17:39:28 +02:00
Resolved an issue with magic crashing during "antennacheck" due to
a routine that should have been called with a NULL argument, but instead was called with no argument, making the behavior system- dependent. Revised the parsing of the "defaultareacap" and "defaultperimeter" statements in the tech file, such that the short version of both statements gets automatic handling of the substrate and isolated substrate areas; this goes back to the recent change in extraction behavior to redefine the "substrate type" (e.g., pwell) during extraction as defining isolated substrate areas, and not the default substrate. The earlier code change dealt with problems related to extracting nodes and regions, but did not consider how parasitic capacitance was affected. This commit resolves that issue.
This commit is contained in:
+11
-11
@@ -396,7 +396,7 @@ DBCellGenerateSubstrate(scx, subType, notSubMask, subShieldMask, targetDef)
|
||||
Plane *tempPlane;
|
||||
int plane;
|
||||
Rect rect;
|
||||
TileTypeBitMask subMask;
|
||||
TileTypeBitMask allButSubMask;
|
||||
int dbEraseSubFunc();
|
||||
int dbPaintSubFunc();
|
||||
int dbEraseNonSub();
|
||||
@@ -417,14 +417,7 @@ DBCellGenerateSubstrate(scx, subType, notSubMask, subShieldMask, targetDef)
|
||||
csd.csd_pNum = plane;
|
||||
csd.csd_modified = FALSE;
|
||||
|
||||
/* First erase the default substrate type everywhere. The substrate */
|
||||
/* type is, effectively, only a marker or visual reference. It has */
|
||||
/* no use and makes it harder to determine what is the global */
|
||||
/* substrate area. */
|
||||
TTMaskSetOnlyType(&subMask, subType);
|
||||
DBTreeSrTiles(scx, &subMask, 0, dbEraseSubFunc, (ClientData)&csd);
|
||||
|
||||
/* Now paint the substrate type in the temporary plane over the */
|
||||
/* First paint the substrate type in the temporary plane over the */
|
||||
/* area of all substrate shield types. */
|
||||
/* Note: xMask is always zero, as this is only called from extract routines */
|
||||
DBTreeSrTiles(scx, subShieldMask, 0, dbPaintSubFunc, (ClientData)&csd);
|
||||
@@ -433,10 +426,17 @@ DBCellGenerateSubstrate(scx, subType, notSubMask, subShieldMask, targetDef)
|
||||
/* Now erase all areas that are non-substrate types in the source */
|
||||
DBTreeSrTiles(scx, notSubMask, 0, dbEraseNonSub, (ClientData)&csd);
|
||||
|
||||
/* Finally, copy the destination plane contents onto tempPlane */
|
||||
/* Finally, copy the destination plane contents onto tempPlane, */
|
||||
/* ignoring the substrate type. */
|
||||
TTMaskZero(&allButSubMask);
|
||||
TTMaskSetMask(&allButSubMask, &DBAllButSpaceBits);
|
||||
TTMaskClearType(&allButSubMask, subType);
|
||||
DBSrPaintArea((Tile *)NULL, targetDef->cd_planes[plane], &TiPlaneRect,
|
||||
&DBAllButSpaceBits, dbCopySubFunc, (ClientData)&csd);
|
||||
&allButSubMask, dbCopySubFunc, (ClientData)&csd);
|
||||
|
||||
/* Now we have a plane where the substrate type has a strict */
|
||||
/* definition that it always marks areas of isolated substrate but */
|
||||
/* never areas of default substrate. Return this plane. */
|
||||
return tempPlane;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user