Corrected an error in LEF write in which sticky labels that declare

the label to be attached to a non-contact type when the label is
actually over a contact are not handled correctly when checking if
multiple labels should belong to the same port record.
This commit is contained in:
Tim Edwards 2022-01-24 17:19:13 -05:00
parent 8e80644dd7
commit ee1d1ae5b0
2 changed files with 18 additions and 2 deletions

View File

@ -1 +1 @@
8.3.261
8.3.262

View File

@ -1612,8 +1612,24 @@ lefWriteMacro(def, f, scale, setback, pinonly, toplayer, domaster)
if (!(tlab->lab_flags & PORT_VISITED))
if (tlab->lab_port == idx)
{
TileTypeBitMask lmask;
TileTypeBitMask lmask, smask;
TTMaskSetOnlyType(&lmask, tlab->lab_type);
/* If label is a "sticky" label, then contacts with the */
/* type as residue must be added to the layer mask. */
if (tlab->lab_flags & LABEL_STICKY)
{
for (ttype = TT_TECHDEPBASE; ttype < DBNumTypes; ttype++)
{
if (DBIsContact(ttype))
{
DBFullResidueMask(ttype, &smask);
if (TTMaskHasType(&smask, tlab->lab_type))
TTMaskSetType(&lmask, ttype);
}
}
}
pNum = DBPlane(tlab->lab_type);
if (DBSrPaintArea((Tile *)NULL, lc.lefYank->cd_planes[pNum],
&tlab->lab_rect, &lmask,