Corrected an issue where a device was given the wrong type due to

ambiguity in the tech file and therefore also in the .ext file.
This is easy to resolve and it was only necessary to change the
type after finding the tile belonging to the device.  There are
pathological cases where this might still go wrong, like defining
a "short" device name for metal resistors on any plane;  then,
if a "short" device overlaps something on another plane, it might
be given the wrong type.  Avoiding all ambiguity would require
adding an extra item to "device" lines in the .ext file output;
the short plane name would be most efficient.
This commit is contained in:
R. Timothy Edwards 2026-06-07 19:37:52 -04:00
parent 3667b348e8
commit 65f034777e
3 changed files with 13 additions and 1 deletions

View File

@ -821,8 +821,14 @@ extOutputNodes(nodeList, outFile)
* For a net to be shorted to itself is not an error.
* NOTE: Potentially the unique name could be removed
* here and save ext2spice the trouble.
*
* Also: If "extresist" is being run in the same
* pass, then don't print an error, because
* electrical shorts are meaningless in an R-C
* extraction.
*/
if ((portname != NULL) &&
(!(ExtOptions & EXT_DORESISTANCE)) &&
(ll->ll_attr == LL_PORTATTR) &&
(strcmp(ll->ll_label->lab_text, portname)))
{

View File

@ -1371,7 +1371,7 @@ ResExtractNet(node, resisdata, cellname)
* the reason, rewrite the tptr->thisDev and local thisDev records
* to match the actual device at the location.
*/
thisDev->type = tptr->thisDev->rs_ttype;
tptr->thisDev->rs_ttype = thisDev->type;
for (devptr = ExtCurStyle->exts_device[thisDev->type]; devptr;
devptr = devptr->exts_next)
{

View File

@ -465,6 +465,12 @@ ResAddDevPlumbing(
tile = PlaneGetHint(plane);
GOTOPOINT(tile, &(thisDev->area.r_ll));
if (TiGetTypeExact(tile) == TT_SPACE)
{
TxError("Bad device location at (%d %d). There is nothing here.\n",
thisDev->area.r_ll.p_x, thisDev->area.r_ll.p_y);
return;
}
PlaneSetHint(plane, tile);
if (IsSplit(tile))