Skip to content

Commit

Permalink
Corrected two errors with the wiring tool: (1) Ignore
Browse files Browse the repository at this point in the history
"angles"-type width rules when calculating the default metal
width DRC rule (this width when present will always be
larger than the minimum metal width), and (2) If an exiting
wire is larger than the contact size, then set the contact
size such that the contact PLUS the surrounding metal is the
width of the exiting wire.  The existing code sets the
contact size itself to the width of the exiting wire, such
that when surrounding material is added, the contact is
larger than it needs to be.  The fix to (1) will also fix
other places where the default DRC width rule is computed,
which includes LEF and DEF handling and computing rendered
text sizes when reading GDS.
  • Loading branch information
RTimothyEdwards committed Dec 7, 2024
1 parent e0c95d6 commit dc87a8c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
4 changes: 2 additions & 2 deletions drc/DRCtech.c
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
18 changes: 17 additions & 1 deletion wiring/wireOps.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down

0 comments on commit dc87a8c

Please # to comment.