Made a correction to the last commit, which is that when searching

a shielded substrate area for devices with terminals connecting to
substrate, search the entire cell hierarchy down to the bottom in
that area, not just the immediate child cell.  Also:  Reduced the
number of types being searched to ignore types in non-substrate
areas like nwell, although it should not make a practical difference
because those areas should not be searched.
This commit is contained in:
R. Timothy Edwards
2026-06-22 20:03:30 -04:00
parent 381714e2d5
commit f4b210a9c0
5 changed files with 76 additions and 50 deletions
+33 -4
View File
@@ -2356,8 +2356,6 @@ ExtTechLine(sectionName, argc, argv)
}
TTMaskSetMask(&ExtCurStyle->exts_deviceMask, &types1);
if (!TTMaskIsZero(&subsTypes))
TTMaskSetMask(&ExtCurStyle->exts_subsDevTypes, &types1);
for (t = TT_TECHDEPBASE; t < DBNumTypes; t++)
if (TTMaskHasType(&types1, t))
@@ -2872,8 +2870,6 @@ ExtTechLine(sectionName, argc, argv)
}
TTMaskSetMask(&ExtCurStyle->exts_deviceMask, &types1);
if (!TTMaskIsZero(&subsTypes))
TTMaskSetMask(&ExtCurStyle->exts_subsDevTypes, &types1);
for (t = TT_TECHDEPBASE; t < DBNumTypes; t++)
{
@@ -3590,6 +3586,39 @@ extTechFinalStyle(style)
int p, p1, missing, conflict;
int indicis[NP];
/* Collect list of all device types that have a substrate connection
* to substrate types, and all material types not in the substrate
* plane and which are not substrate shields that connect to the
* substrate.
*/
for (r = TT_TECHDEPBASE; r < DBNumTypes; r++)
{
ExtDevice *devptr;
if (TTMaskHasType(&ExtCurStyle->exts_subsDevTypes, r)) continue;
for (devptr = ExtCurStyle->exts_device[r]; devptr; devptr = devptr->exts_next)
{
if (TTMaskIntersect(&devptr->exts_deviceSubstrateTypes,
&ExtCurStyle->exts_globSubstrateTypes))
TTMaskSetType(&ExtCurStyle->exts_subsDevTypes, r);
}
}
if (ExtCurStyle->exts_globSubstratePlane >= 0)
{
for (r = TT_TECHDEPBASE; r < DBNumTypes; r++)
{
if ((TTMaskHasType(&ExtCurStyle->exts_globSubstrateTypes, r)) &&
(!TTMaskHasType(&ExtCurStyle->exts_globSubstrateShieldTypes, r))
&& (DBPlane(r) != ExtCurStyle->exts_globSubstratePlane))
TTMaskSetType(&ExtCurStyle->exts_subsDevTypes, r);
}
}
/* Prepare resistance classes */
for (r = TT_TECHDEPBASE; r < DBNumTypes; r++)
{
maskBits = style->exts_nodeConn[r];