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

View File

@ -872,17 +872,13 @@ DRCTechLine(sectionName, argc, argv)
}
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;
int dist, cdist;
TileTypeBitMask *mask, *corner;
char *why;
int flags, planeto, planefrom;
{
/* Diagnostic */
if (planeto >= DBNumPlanes) {
TxError("Bad plane in DRC assign!\n");
}
(cookie)->drcc_dist = dist;
(cookie)->drcc_next = next;
(cookie)->drcc_mask = *mask;
@ -896,6 +892,27 @@ drcAssign(cookie, dist, next, mask, corner, why, cdist, flags, planeto, planefro
(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 drcExactOverlapTile();
extern void drcInitRulesTbl();
extern void drcAssign();
extern void drcCifAssign();
/*
* Exported procedures