diff --git a/VERSION b/VERSION index 1fc685e0..723db028 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.294 +8.3.295 diff --git a/extflat/EFbuild.c b/extflat/EFbuild.c index cb514971..a215102d 100644 --- a/extflat/EFbuild.c +++ b/extflat/EFbuild.c @@ -449,12 +449,13 @@ efBuildKill(def, name) */ void -efBuildEquiv(def, nodeName1, nodeName2) +efBuildEquiv(def, nodeName1, nodeName2, resist) Def *def; /* Def for which we're adding a new node name */ char *nodeName1; /* One of node names to be made equivalent */ char *nodeName2; /* Other name to be made equivalent. One of nodeName1 * or nodeName2 must already be known. */ + bool resist; /* True if "extresist on" option was selected */ { EFNodeName *nn1, *nn2; HashEntry *he1, *he2; @@ -520,12 +521,15 @@ efBuildEquiv(def, nodeName1, nodeName2) freeMagic(argv[7]); return; } - else + else if (!resist) { /* Flag a strong warning */ TxError("Warning: Ports \"%s\" and \"%s\" are electrically shorted.\n", nodeName1, nodeName2); } + else + /* Do not merge the nodes when folding in extresist parasitics */ + return; } /* If both names exist and are for different nodes, merge them */ diff --git a/extflat/EFread.c b/extflat/EFread.c index 15d5b43a..7349c1bb 100644 --- a/extflat/EFread.c +++ b/extflat/EFread.c @@ -313,7 +313,7 @@ readfile: /* equiv node1 node2 */ case EQUIV: - efBuildEquiv(def, argv[1], argv[2]); + efBuildEquiv(def, argv[1], argv[2], resist); break; /* replaces "fet" (below) */ diff --git a/lef/defWrite.c b/lef/defWrite.c index a12b008b..0100e265 100644 --- a/lef/defWrite.c +++ b/lef/defWrite.c @@ -1499,6 +1499,7 @@ defCountVias(rootDef, MagicToLefTable, defViaTable, oscale) int defCheckFunc(tile) + Tile *tile; { return 1; } diff --git a/resis/ResReadSim.c b/resis/ResReadSim.c index 96e90ea1..4af35736 100644 --- a/resis/ResReadSim.c +++ b/resis/ResReadSim.c @@ -172,7 +172,9 @@ ResReadSim(simfile, fetproc, capproc, resproc, attrproc, mergeproc, subproc) if (resproc) result = (*resproc)(line); break; case '=': - if (mergeproc) result = (*mergeproc)(line); + /* Do not merge nodes, as this interferes with */ + /* extresist's primary function. */ + /* if (mergeproc) result = (*mergeproc)(line); */ break; case 'A': if (attrproc) diff --git a/resis/ResRex.c b/resis/ResRex.c index f24a8dc6..d9255771 100644 --- a/resis/ResRex.c +++ b/resis/ResRex.c @@ -710,6 +710,9 @@ resPortFunc(scx, lab, tpath, result) HashEntry *entry; ResSimNode *node; + // Ignore the top level cell + if (scx->scx_use->cu_id == NULL) return 0; + GeoTransRect(&scx->scx_trans, &lab->lab_rect, &r); // To be expanded. Currently this handles digital signal inputs @@ -723,7 +726,8 @@ resPortFunc(scx, lab, tpath, result) // direction is either INPUT or OUTPUT, then use SIGNAL is implied. if ((puse == 0) && ((pclass == PORT_CLASS_INPUT) - || (pclass == PORT_CLASS_OUTPUT))) + || (pclass == PORT_CLASS_OUTPUT) + || (pclass == PORT_CLASS_DEFAULT))) puse = PORT_USE_SIGNAL; if (puse == PORT_USE_SIGNAL || puse == PORT_USE_CLOCK) { @@ -742,7 +746,8 @@ resPortFunc(scx, lab, tpath, result) if (lab->lab_flags & PORT_DIR_WEST) portloc.p_x = r.r_xbot; - if ((pclass == PORT_CLASS_INPUT) || (pclass == PORT_CLASS_OUTPUT)) { + if ((pclass == PORT_CLASS_INPUT) || (pclass == PORT_CLASS_OUTPUT) + || (pclass == PORT_CLASS_DEFAULT)) { int len; char *nodename;