Corrected drcAssign for use with CIF drc rules, where the check for

plane is not relevant and can generate false-positive error messages
(although no actual errors occur).
This commit is contained in:
Tim Edwards 2019-09-19 14:33:30 -04:00
parent 0c24c33451
commit 091d7ba2ae
3 changed files with 35 additions and 17 deletions

View File

@ -200,7 +200,7 @@ drcCifWidth(argc, argv)
dpnext = drcCifRules[thislayer][DRC_CIF_SPACE]; dpnext = drcCifRules[thislayer][DRC_CIF_SPACE];
dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie)));
drcAssign(dpnew, centidistance, dpnext, &CIFSolidBits, drcCifAssign(dpnew, centidistance, dpnext, &CIFSolidBits,
&CIFSolidBits, why, centidistance, &CIFSolidBits, why, centidistance,
DRC_FORWARD, thislayer, 0); DRC_FORWARD, thislayer, 0);
drcCifRules[thislayer][DRC_CIF_SPACE] = dpnew; drcCifRules[thislayer][DRC_CIF_SPACE] = dpnew;
@ -292,7 +292,7 @@ drcCifSpacing(argc, argv)
centidistance *= drcCifStyle->cs_expander; // BSI centidistance *= drcCifStyle->cs_expander; // BSI
dpnext = drcCifRules[layer[0]][DRC_CIF_SOLID]; dpnext = drcCifRules[layer[0]][DRC_CIF_SOLID];
dpnew = (DRCCookie *) mallocMagic((unsigned) sizeof (DRCCookie)); dpnew = (DRCCookie *) mallocMagic((unsigned) sizeof (DRCCookie));
drcAssign(dpnew, centidistance, dpnext, &DBSpaceBits, drcCifAssign(dpnew, centidistance, dpnext, &DBSpaceBits,
&cmask, why, centidistance, DRC_FORWARD, layer[1], 0); &cmask, why, centidistance, DRC_FORWARD, layer[1], 0);
drcCifRules[layer[0]][DRC_CIF_SOLID] = dpnew; drcCifRules[layer[0]][DRC_CIF_SOLID] = dpnew;
if (needReverse) dpnew->drcc_flags |= DRC_BOTHCORNERS; if (needReverse) dpnew->drcc_flags |= DRC_BOTHCORNERS;
@ -300,7 +300,7 @@ drcCifSpacing(argc, argv)
// Add rule in reverse direction // Add rule in reverse direction
dpnext = drcCifRules[layer[0]][DRC_CIF_SPACE]; dpnext = drcCifRules[layer[0]][DRC_CIF_SPACE];
dpnew = (DRCCookie *) mallocMagic((unsigned) sizeof (DRCCookie)); dpnew = (DRCCookie *) mallocMagic((unsigned) sizeof (DRCCookie));
drcAssign(dpnew, centidistance, dpnext, &DBSpaceBits, drcCifAssign(dpnew, centidistance, dpnext, &DBSpaceBits,
&cmask, why, centidistance, DRC_REVERSE, layer[1], 0); &cmask, why, centidistance, DRC_REVERSE, layer[1], 0);
drcCifRules[layer[0]][DRC_CIF_SPACE] = dpnew; drcCifRules[layer[0]][DRC_CIF_SPACE] = dpnew;
@ -312,14 +312,14 @@ drcCifSpacing(argc, argv)
dpnew->drcc_flags |= DRC_BOTHCORNERS; dpnew->drcc_flags |= DRC_BOTHCORNERS;
dpnext = drcCifRules[layer[1]][DRC_CIF_SOLID]; dpnext = drcCifRules[layer[1]][DRC_CIF_SOLID];
dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie)));
drcAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask, drcCifAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask,
why, centidistance, DRC_FORWARD|DRC_BOTHCORNERS, layer[0], 0); why, centidistance, DRC_FORWARD|DRC_BOTHCORNERS, layer[0], 0);
drcCifRules[layer[1]][DRC_CIF_SOLID] = dpnew; drcCifRules[layer[1]][DRC_CIF_SOLID] = dpnew;
// Add rule in reverse direction // Add rule in reverse direction
dpnext = drcCifRules[layer[1]][DRC_CIF_SPACE]; dpnext = drcCifRules[layer[1]][DRC_CIF_SPACE];
dpnew = (DRCCookie *) mallocMagic((unsigned) sizeof (DRCCookie)); dpnew = (DRCCookie *) mallocMagic((unsigned) sizeof (DRCCookie));
drcAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask, drcCifAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask,
why, centidistance, DRC_REVERSE|DRC_BOTHCORNERS, layer[0], 0); why, centidistance, DRC_REVERSE|DRC_BOTHCORNERS, layer[0], 0);
drcCifRules[layer[1]][DRC_CIF_SPACE] = dpnew; drcCifRules[layer[1]][DRC_CIF_SPACE] = dpnew;
@ -327,14 +327,14 @@ drcCifSpacing(argc, argv)
{ {
dpnext = drcCifRules[layer[1]][DRC_CIF_SPACE]; dpnext = drcCifRules[layer[1]][DRC_CIF_SPACE];
dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie)));
drcAssign(dpnew, centidistance, dpnext, &DBSpaceBits, drcCifAssign(dpnew, centidistance, dpnext, &DBSpaceBits,
&cmask, why, centidistance, DRC_REVERSE | DRC_BOTHCORNERS, &cmask, why, centidistance, DRC_REVERSE | DRC_BOTHCORNERS,
layer[0], 0); layer[0], 0);
drcCifRules[layer[1]][DRC_CIF_SPACE] = dpnew; drcCifRules[layer[1]][DRC_CIF_SPACE] = dpnew;
dpnext = drcCifRules[layer[0]][DRC_CIF_SPACE]; dpnext = drcCifRules[layer[0]][DRC_CIF_SPACE];
dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie)));
drcAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask, drcCifAssign(dpnew, centidistance, dpnext, &DBSpaceBits, &cmask,
why, centidistance, DRC_REVERSE | DRC_BOTHCORNERS, why, centidistance, DRC_REVERSE | DRC_BOTHCORNERS,
layer[1], 0); layer[1], 0);
drcCifRules[layer[0]][DRC_CIF_SPACE] = dpnew; drcCifRules[layer[0]][DRC_CIF_SPACE] = dpnew;
@ -345,13 +345,13 @@ drcCifSpacing(argc, argv)
{ {
dpnext = drcCifRules[layer[1]][DRC_CIF_SPACE]; dpnext = drcCifRules[layer[1]][DRC_CIF_SPACE];
dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie)));
drcAssign(dpnew, scalefactor, dpnext, &DBSpaceBits, &DBZeroTypeBits, drcCifAssign(dpnew, scalefactor, dpnext, &DBSpaceBits, &DBZeroTypeBits,
why, scalefactor, DRC_FORWARD, layer[0], 0); why, scalefactor, DRC_FORWARD, layer[0], 0);
drcCifRules[layer[1]][DRC_CIF_SPACE] = dpnew; drcCifRules[layer[1]][DRC_CIF_SPACE] = dpnew;
dpnext = drcCifRules[layer[0]][DRC_CIF_SPACE]; dpnext = drcCifRules[layer[0]][DRC_CIF_SPACE];
dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie)));
drcAssign(dpnew, scalefactor, dpnext, &DBSpaceBits, &DBZeroTypeBits, drcCifAssign(dpnew, scalefactor, dpnext, &DBSpaceBits, &DBZeroTypeBits,
why, scalefactor, DRC_FORWARD, layer[1], 0); why, scalefactor, DRC_FORWARD, layer[1], 0);
drcCifRules[layer[0]][DRC_CIF_SPACE] = dpnew; drcCifRules[layer[0]][DRC_CIF_SPACE] = dpnew;
} }
@ -1066,7 +1066,7 @@ drcCifArea(argc, argv)
centiarea *= (drcCifStyle->cs_expander * drcCifStyle->cs_expander); centiarea *= (drcCifStyle->cs_expander * drcCifStyle->cs_expander);
dpnext = drcCifRules[thislayer][DRC_CIF_SPACE]; dpnext = drcCifRules[thislayer][DRC_CIF_SPACE];
dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie)));
drcAssign(dpnew, centihorizon, dpnext, &CIFSolidBits, &CIFSolidBits, drcCifAssign(dpnew, centihorizon, dpnext, &CIFSolidBits, &CIFSolidBits,
why, centiarea, DRC_AREA | DRC_FORWARD, thislayer, 0); why, centiarea, DRC_AREA | DRC_FORWARD, thislayer, 0);
drcCifRules[thislayer][DRC_CIF_SPACE] = dpnew; drcCifRules[thislayer][DRC_CIF_SPACE] = dpnew;
@ -1136,11 +1136,10 @@ drcCifMaxwidth(argc, argv)
centidistance *= drcCifStyle->cs_expander; // BSI centidistance *= drcCifStyle->cs_expander; // BSI
dpnext = drcCifRules[thislayer][DRC_CIF_SPACE]; dpnext = drcCifRules[thislayer][DRC_CIF_SPACE];
dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie))); dpnew = (DRCCookie *) mallocMagic((unsigned) (sizeof (DRCCookie)));
drcAssign(dpnew, centidistance, dpnext, &CIFSolidBits, &CIFSolidBits, drcCifAssign(dpnew, centidistance, dpnext, &CIFSolidBits, &CIFSolidBits,
why, centidistance, DRC_MAXWIDTH | bend, thislayer, 0); why, centidistance, DRC_MAXWIDTH | bend, thislayer, 0);
drcCifRules[thislayer][DRC_CIF_SPACE] = dpnew; drcCifRules[thislayer][DRC_CIF_SPACE] = dpnew;
return ((centidistance+scalefactor-1)/scalefactor); return ((centidistance+scalefactor-1)/scalefactor);
} }

View File

@ -872,17 +872,13 @@ DRCTechLine(sectionName, argc, argv)
} }
void void
drcAssign(cookie, dist, next, mask, corner, why, cdist, flags, planeto, planefrom) drcCifAssign(cookie, dist, next, mask, corner, why, cdist, flags, planeto, planefrom)
DRCCookie *cookie, *next; DRCCookie *cookie, *next;
int dist, cdist; int dist, cdist;
TileTypeBitMask *mask, *corner; TileTypeBitMask *mask, *corner;
char *why; char *why;
int flags, planeto, planefrom; int flags, planeto, planefrom;
{ {
/* Diagnostic */
if (planeto >= DBNumPlanes) {
TxError("Bad plane in DRC assign!\n");
}
(cookie)->drcc_dist = dist; (cookie)->drcc_dist = dist;
(cookie)->drcc_next = next; (cookie)->drcc_next = next;
(cookie)->drcc_mask = *mask; (cookie)->drcc_mask = *mask;
@ -896,6 +892,27 @@ drcAssign(cookie, dist, next, mask, corner, why, cdist, flags, planeto, planefro
(cookie)->drcc_cmod = 0; (cookie)->drcc_cmod = 0;
} }
// This is like drcCifAssign, but checks for bad plane numbers in planeto and
// planefrom
void
drcAssign(cookie, dist, next, mask, corner, why, cdist, flags, planeto, planefrom)
DRCCookie *cookie, *next;
int dist, cdist;
TileTypeBitMask *mask, *corner;
char *why;
int flags, planeto, planefrom;
{
/* Diagnostic */
if (planeto >= DBNumPlanes)
TechError("Bad plane in DRC assignment.\n");
if (planefrom >= DBNumPlanes)
TechError("Bad edge plane in DRC assignment.\n");
drcCifAssign(cookie, dist, next, mask, corner, why, cdist, flags, planeto,
planefrom);
}
/* /*
* ---------------------------------------------------------------------------- * ----------------------------------------------------------------------------
* *

View File

@ -239,6 +239,8 @@ extern void drcPrintError();
extern int drcIncludeArea(); extern int drcIncludeArea();
extern int drcExactOverlapTile(); extern int drcExactOverlapTile();
extern void drcInitRulesTbl(); extern void drcInitRulesTbl();
extern void drcAssign();
extern void drcCifAssign();
/* /*
* Exported procedures * Exported procedures