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:
parent
0c24c33451
commit
091d7ba2ae
23
drc/DRCcif.c
23
drc/DRCcif.c
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ----------------------------------------------------------------------------
|
* ----------------------------------------------------------------------------
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue