Merge branch 'work' into tomerge

This commit is contained in:
Tim Edwards 2018-03-19 15:02:09 -04:00
commit 2df755d857
3 changed files with 29 additions and 15 deletions

View File

@ -615,6 +615,7 @@ drcCheckTile(tile, arg)
Rect erasebox; /* erase old ERROR tiles in this Rect erasebox; /* erase old ERROR tiles in this
* region and clip new ERRORs to it * region and clip new ERRORs to it
*/ */
Rect checkbox;
CellDef * celldef; /* First CellDef on DRCPending list. */ CellDef * celldef; /* First CellDef on DRCPending list. */
Rect redisplayArea; /* Area to be redisplayed. */ Rect redisplayArea; /* Area to be redisplayed. */
extern int drcXorFunc(); /* Forward declarations. */ extern int drcXorFunc(); /* Forward declarations. */
@ -644,6 +645,12 @@ drcCheckTile(tile, arg)
erasebox.r_xtop, erasebox.r_ytop); erasebox.r_xtop, erasebox.r_ytop);
*/ */
/* checkbox is erasebox expanded by DRCTechHalo. Note that this is */
/* computed independently inside DRCInteractionCheck(). */
GEO_EXPAND(&erasebox, DRCTechHalo, &checkbox);
GeoClip(&checkbox, &square);
/* Use drcDisplayPlane to save all the current errors in the /* Use drcDisplayPlane to save all the current errors in the
* area we're about to recheck. * area we're about to recheck.
*/ */
@ -675,8 +682,8 @@ drcCheckTile(tile, arg)
*/ */
DRCErrorType = TT_ERROR_S; DRCErrorType = TT_ERROR_S;
(void) DRCInteractionCheck(celldef, &erasebox, drcPaintError, (void) DRCInteractionCheck(celldef, &square, &erasebox,
(ClientData) drcTempPlane); drcPaintError, (ClientData) drcTempPlane);
/* Check #3: check for array formation errors in the area. */ /* Check #3: check for array formation errors in the area. */
@ -700,10 +707,10 @@ drcCheckTile(tile, arg)
DBPaintPlane(celldef->cd_planes[PL_DRC_CHECK], &erasebox, DBPaintPlane(celldef->cd_planes[PL_DRC_CHECK], &erasebox,
DBStdEraseTbl(TiGetType(tile), PL_DRC_CHECK), DBStdEraseTbl(TiGetType(tile), PL_DRC_CHECK),
(PaintUndoInfo *) NULL); (PaintUndoInfo *) NULL);
DBPaintPlane(celldef->cd_planes[PL_DRC_ERROR], &erasebox, DBPaintPlane(celldef->cd_planes[PL_DRC_ERROR], &checkbox,
DBStdEraseTbl(TT_ERROR_P, PL_DRC_ERROR), DBStdEraseTbl(TT_ERROR_P, PL_DRC_ERROR),
(PaintUndoInfo *) NULL); (PaintUndoInfo *) NULL);
DBPaintPlane(celldef->cd_planes[PL_DRC_ERROR], &square, DBPaintPlane(celldef->cd_planes[PL_DRC_ERROR], &checkbox,
DBStdEraseTbl(TT_ERROR_S, PL_DRC_ERROR), DBStdEraseTbl(TT_ERROR_S, PL_DRC_ERROR),
(PaintUndoInfo *) NULL); (PaintUndoInfo *) NULL);
(void) DBSrPaintArea((Tile *) NULL, drcTempPlane, &TiPlaneRect, (void) DBSrPaintArea((Tile *) NULL, drcTempPlane, &TiPlaneRect,

View File

@ -530,7 +530,7 @@ drcWhyFunc(scx, cdarg)
/* Check paint and interactions in this subcell. */ /* Check paint and interactions in this subcell. */
(void) DRCInteractionCheck(def, &scx->scx_area, (void) DRCInteractionCheck(def, &scx->scx_area, &scx->scx_area,
(dolist) ? drcListError : drcPrintError, (dolist) ? drcListError : drcPrintError,
(ClientData) scx); (ClientData) scx);
(void) DRCArrayCheck(def, &scx->scx_area, (void) DRCArrayCheck(def, &scx->scx_area,
@ -554,7 +554,7 @@ drcWhyAllFunc(scx, cdarg)
/* Check paint and interactions in this subcell. */ /* Check paint and interactions in this subcell. */
(void) DRCInteractionCheck(def, &scx->scx_area, (void) DRCInteractionCheck(def, &scx->scx_area, &scx->scx_area,
drcListallError, (ClientData)scx); drcListallError, (ClientData)scx);
(void) DRCArrayCheck(def, &scx->scx_area, (void) DRCArrayCheck(def, &scx->scx_area,
drcListallError, (ClientData)scx); drcListallError, (ClientData)scx);

View File

@ -573,8 +573,9 @@ drcExactOverlapTile(tile, cxp)
*/ */
int int
DRCInteractionCheck(def, erasebox, func, cdarg) DRCInteractionCheck(def, area, erasebox, func, cdarg)
CellDef *def; /* Definition in which to do check. */ CellDef *def; /* Definition in which to do check. */
Rect *area; /* Area in which all errors are to be found. */
Rect *erasebox; /* Smaller area containing DRC check tiles */ Rect *erasebox; /* Smaller area containing DRC check tiles */
void (*func)(); /* Function to call for each error. */ void (*func)(); /* Function to call for each error. */
ClientData cdarg; /* Extra info to be passed to func. */ ClientData cdarg; /* Extra info to be passed to func. */
@ -595,13 +596,13 @@ DRCInteractionCheck(def, erasebox, func, cdarg)
* square separately. * square separately.
*/ */
x = (erasebox->r_xbot/DRCStepSize) * DRCStepSize; x = (area->r_xbot/DRCStepSize) * DRCStepSize;
if (x > erasebox->r_xbot) x -= DRCStepSize; if (x > area->r_xbot) x -= DRCStepSize;
y = (erasebox->r_ybot/DRCStepSize) * DRCStepSize; y = (area->r_ybot/DRCStepSize) * DRCStepSize;
if (y > erasebox->r_ybot) y -= DRCStepSize; if (y > area->r_ybot) y -= DRCStepSize;
for (square.r_xbot = x; square.r_xbot < erasebox->r_xtop; for (square.r_xbot = x; square.r_xbot < area->r_xtop;
square.r_xbot += DRCStepSize) square.r_xbot += DRCStepSize)
for (square.r_ybot = y; square.r_ybot < erasebox->r_ytop; for (square.r_ybot = y; square.r_ybot < area->r_ytop;
square.r_ybot += DRCStepSize) square.r_ybot += DRCStepSize)
{ {
square.r_xtop = square.r_xbot + DRCStepSize; square.r_xtop = square.r_xbot + DRCStepSize;
@ -613,7 +614,7 @@ DRCInteractionCheck(def, erasebox, func, cdarg)
/* large step size. */ /* large step size. */
cliparea = square; cliparea = square;
GeoClip(&cliparea, erasebox); GeoClip(&cliparea, area);
/* Find all the interactions in the square, and clip to the error /* Find all the interactions in the square, and clip to the error
* area we're interested in. */ * area we're interested in. */
@ -621,7 +622,7 @@ DRCInteractionCheck(def, erasebox, func, cdarg)
if (!DRCFindInteractions(def, &cliparea, DRCTechHalo, &intArea)) if (!DRCFindInteractions(def, &cliparea, DRCTechHalo, &intArea))
{ {
/* Added May 4, 2008---if there are no subcells, run the /* Added May 4, 2008---if there are no subcells, run the
* basic check over the area of the square. * basic check over the area of the erasebox.
*/ */
subArea = *erasebox; subArea = *erasebox;
GeoClip(&subArea, &cliparea); GeoClip(&subArea, &cliparea);
@ -692,6 +693,12 @@ DRCInteractionCheck(def, erasebox, func, cdarg)
DRCErrorType = errorSaveType; DRCErrorType = errorSaveType;
} }
/* Clip interaction area against subArea-expanded-by-halo */
subArea = *erasebox;
GEO_EXPAND(&subArea, DRCTechHalo, &cliparea);
GeoClip(&intArea, &cliparea);
/* Flatten the interaction area. */ /* Flatten the interaction area. */
DRCstatInteractions += 1; DRCstatInteractions += 1;