diff --git a/drc/DRCtech.c b/drc/DRCtech.c index c659d081..17ba586c 100644 --- a/drc/DRCtech.c +++ b/drc/DRCtech.c @@ -4237,8 +4237,8 @@ DRCGetDefaultLayerWidth(ttype) /* Skip area rule */ if (cptr->drcc_flags & DRC_AREA) continue; - /* FORWARD rules only, and no MAXWIDTH */ - if ((cptr->drcc_flags & (DRC_REVERSE | DRC_MAXWIDTH)) == 0) + /* FORWARD rules only, and no MAXWIDTH or SPLITTILE */ + if ((cptr->drcc_flags & (DRC_REVERSE | DRC_MAXWIDTH | DRC_SPLITTILE)) == 0) { set = &cptr->drcc_mask; if (TTMaskHasType(set, ttype) && TTMaskEqual(set, &cptr->drcc_corner)) diff --git a/wiring/wireOps.c b/wiring/wireOps.c index b36a38e9..a7260e9a 100644 --- a/wiring/wireOps.c +++ b/wiring/wireOps.c @@ -826,7 +826,23 @@ WireAddContact(newType, newWidth) gotContact: totalSize = conSize + 2 * oldOverlap; - if (totalSize < WireWidth) totalSize = WireWidth; + + /* If the contact size + overlap is less than the wire width, + * then make the contact size equal to the wire width - the + * overlap so that the full contact area isn't larger than + * the exiting wire width. + */ + if (updown == WIRING_CONTACT_UP) + { + if (totalSize < (WireWidth - 2 * conSurround2)) + totalSize = WireWidth - 2 * conSurround2; + } + else + { + if (totalSize < (WireWidth - 2 * conSurround1)) + totalSize = WireWidth - 2 * conSurround1; + } + contactArea = oldLeg; if ((contactArea.r_xtop - contactArea.r_xbot) < totalSize) {