Merge branch 'master' into magic-8.2

This commit is contained in:
Tim Edwards 2019-11-14 03:00:05 -05:00
commit c17a546a75
3 changed files with 25 additions and 3 deletions

View File

@ -606,7 +606,7 @@ efBuildDevice(def, class, type, r, argc, argv)
Dev *newdev, devtmp; Dev *newdev, devtmp;
DevParam *newparm, *devp, *sparm; DevParam *newparm, *devp, *sparm;
char ptype, *pptr, **av; char ptype, *pptr, **av;
char devhash[24]; char devhash[64];
int argstart = 1; /* start of terminal list in argv[] */ int argstart = 1; /* start of terminal list in argv[] */
bool hasModel = strcmp(type, "None") ? TRUE : FALSE; bool hasModel = strcmp(type, "None") ? TRUE : FALSE;
@ -749,7 +749,7 @@ efBuildDevice(def, class, type, r, argc, argv)
/* Determine if this device has been seen before */ /* Determine if this device has been seen before */
sprintf(devhash, "%dx%d", r->r_xbot, r->r_ybot); sprintf(devhash, "%dx%d%s", r->r_xbot, r->r_ybot, type);
he = HashFind(&def->def_devs, devhash); he = HashFind(&def->def_devs, devhash);
newdev = (Dev *)HashGetValue(he); newdev = (Dev *)HashGetValue(he);
if (newdev) if (newdev)

View File

@ -1686,6 +1686,7 @@ extOutputDevices(def, transList, outFile)
while (TRUE) while (TRUE)
{ {
if (devptr == NULL) break; /* Bad device */
nsd = devptr->exts_deviceSDCount; nsd = devptr->exts_deviceSDCount;
for (termcount = 0; termcount < nsd; termcount++) for (termcount = 0; termcount < nsd; termcount++)
{ {
@ -1726,6 +1727,7 @@ extOutputDevices(def, transList, outFile)
devptr = extDevFindMatch(devptr, t); devptr = extDevFindMatch(devptr, t);
break; break;
} }
if (termcount == nsd) break; /* All terminals accounted for */
} }
if (termcount == nsd) break; /* All terminals accounted for */ if (termcount == nsd) break; /* All terminals accounted for */
if (devptr == deventry) break; /* No other device records available */ if (devptr == deventry) break; /* No other device records available */
@ -1771,6 +1773,11 @@ extOutputDevices(def, transList, outFile)
/* It is not an error condition to have more terminals */ /* It is not an error condition to have more terminals */
/* than the minimum. */ /* than the minimum. */
} }
if (devptr == NULL) {
TxError("Warning: No matching extraction type for device at (%d %d)\n",
reg->treg_tile->ti_ll.p_x, reg->treg_tile->ti_ll.p_y);
continue;
}
/* /*
* Output the transistor record. * Output the transistor record.
@ -2912,7 +2919,8 @@ extResistorTileFunc(tile, pNum)
extEnumTilePerim(tile, mask, pNum, extSpecialPerimFunc, (ClientData)FALSE); extEnumTilePerim(tile, mask, pNum, extSpecialPerimFunc, (ClientData)FALSE);
if (extSpecialBounds[0] == NULL) devptr = devptr->exts_next; if (extSpecialBounds[0] != NULL) break;
devptr = devptr->exts_next;
} }
if (devptr != NULL) extTransRec.tr_devrec = devptr; if (devptr != NULL) extTransRec.tr_devrec = devptr;

View File

@ -778,6 +778,20 @@ lefWriteMacro(def, f, scale, hide)
else else
boundary = def->cd_bbox; boundary = def->cd_bbox;
/* If a bounding box has been declared with the FIXED_BBOX property */
/* then it takes precedence over def->cd_bbox. */
if (def->cd_flags & CDFIXEDBBOX)
{
char *propvalue;
bool found;
propvalue = (char *)DBPropGet(def, "FIXED_BBOX", &found);
if (found)
sscanf(propvalue, "%d %d %d %d", &boundary.r_xbot,
&boundary.r_ybot, &boundary.r_xtop, &boundary.r_ytop);
}
/* Write position and size information */ /* Write position and size information */
fprintf(f, " ORIGIN %.4f %.4f ;\n", fprintf(f, " ORIGIN %.4f %.4f ;\n",