diff --git a/VERSION b/VERSION index 182f1c4b..4c6e14dd 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.351 +8.3.352 diff --git a/extract/ExtBasic.c b/extract/ExtBasic.c index ae4764a9..d58c36fd 100644 --- a/extract/ExtBasic.c +++ b/extract/ExtBasic.c @@ -2005,6 +2005,30 @@ extOutputDevices(def, transList, outFile) if (!strcmp(devptr->exts_deviceName, "Ignore")) continue; + /* Model type "Short" in the techfile indicates a device */ + /* to short across the first two nodes (the gate and the */ + /* source). This solves the specific issue of a transistor */ + /* extended drain where the drain is a resistor but the */ + /* resistor is part of the model and should not be output. */ + + if (!strcmp(devptr->exts_deviceName, "Short")) + { + fprintf(outFile, "equiv "); + + /* To do: Use parameters to specify which terminals */ + /* are shorted. */ + + /* gate */ + node = (NodeRegion *)extGetRegion(reg->treg_tile); + fprintf(outFile, "\"%s\" ", extNodeName(node)); + + /* First non-gate terminal */ + node = (NodeRegion *)extTransRec.tr_termnode[0]; + fprintf(outFile, "\"%s\"\n", extNodeName(node)); + + continue; + } + /* Original-style FET record backward compatibility */ if (devptr->exts_deviceClass != DEV_FET) fprintf(outFile, "device "); @@ -2916,7 +2940,12 @@ extTransPerimFunc(bp) } else { - TxError("Error: Asymmetric device with multiple terminals!\n"); + /* Do not generate error messages on "Ignore" or "Short" + * device types + */ + if (strcmp(extTransRec.tr_devrec->exts_deviceName, "Ignore") && + strcmp(extTransRec.tr_devrec->exts_deviceName, "Short")) + TxError("Error: Asymmetric device with multiple terminals!\n"); break; }