Corrected two errors with the wiring tool: (1) Ignore
"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.
This commit is contained in:
parent
e0c95d6d78
commit
dc87a8c693
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue