From 52a424e5119c7c9ccedd680534eac4ddf5a05a1f Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Mon, 4 Oct 2021 15:32:37 -0400 Subject: [PATCH] Added another option to the "extresist" command, this one to include specific nets to extract, rather than excluding them. That allows "extresist" to target specific nets like the power supply or a clock tree for extraction. --- VERSION | 2 +- resis/ResRex.c | 52 ++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/VERSION b/VERSION index a696e10c..003fdb36 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.212 +8.3.213 diff --git a/resis/ResRex.c b/resis/ResRex.c index 2b2170cb..5d804900 100644 --- a/resis/ResRex.c +++ b/resis/ResRex.c @@ -44,7 +44,11 @@ static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/ /* Table of nodes to ignore (manually specified) */ -HashTable ResIgnoreTable; /* Hash table of nodes to ignore */ +HashTable ResIgnoreTable; /* Hash table of nodes to ignore */ + +/* Table of nodes to include (manually specified) */ + +HashTable ResIncludeTable; /* Hash table of nodes to include */ /* ResSimNode is a node read in from a sim file */ @@ -234,6 +238,7 @@ CmdExtResis(win, cmd) "silent [on/off] turn on/off printing of net statistics", "skip mask don't extract these types", "ignore names don't extract these nets", + "include names extract only these nets", "box type extract the signal under the box on layer type", "cell cellname extract the network for the cell named cellname", "blackbox [on/off] treat subcircuits with ports as black boxes", @@ -248,8 +253,8 @@ CmdExtResis(win, cmd) typedef enum { RES_BAD=-2, RES_AMBIG, RES_TOL, - RES_ALL, RES_SIMP, RES_EXTOUT, RES_LUMPED, - RES_SILENT, RES_SKIP, RES_IGNORE, RES_BOX, RES_CELL, + RES_ALL, RES_SIMP, RES_EXTOUT, RES_LUMPED, RES_SILENT, + RES_SKIP, RES_IGNORE, RES_INCLUDE, RES_BOX, RES_CELL, RES_BLACKBOX, RES_FASTHENRY, RES_GEOMETRY, RES_HELP, #ifdef LAPLACE RES_LAPLACE, @@ -268,6 +273,7 @@ typedef enum { tdiTolerance = 1; fhFrequency = 10e6; /* 10 MHz default */ HashInit(&ResIgnoreTable, INITFLATSIZE, HT_STRINGKEYS); + HashInit(&ResIncludeTable, INITFLATSIZE, HT_STRINGKEYS); init = 0; } @@ -484,6 +490,31 @@ typedef enum { } return; + case RES_INCLUDE: + if (cmd->tx_argc > 2) + { + if (!strcasecmp(cmd->tx_argv[2], "all")) + { + /* Kill and reinitialize the table of ignored nets */ + HashKill(&ResIncludeTable); + HashInit(&ResIncludeTable, INITFLATSIZE, HT_STRINGKEYS); + } + else + HashFind(&ResIncludeTable, cmd->tx_argv[2]); + } + else + { + HashSearch hs; + HashEntry *entry; + + /* List all net names that are being included */ + HashStartSearch(&hs); + while((entry = HashNext(&ResIncludeTable, &hs)) != NULL) + TxPrintf("%s ", (char *)entry->h_key.h_name); + TxPrintf("\n"); + } + return; + case RES_HELP: for (i = 0; cmdExtresisCmd[i] != NULL; i++) TxPrintf("%s\n", cmdExtresisCmd[i]); @@ -953,9 +984,18 @@ ResCheckSimNodes(celldef, resisdata) { HashEntry *he; - /* Ignore specified nodes */ - he = HashLookOnly(&ResIgnoreTable, node->name); - if (he != NULL) continue; + /* Ignore or include specified nodes */ + + if (ResIncludeTable.ht_nEntries > 0) + { + he = HashLookOnly(&ResIncludeTable, node->name); + if (he == NULL) continue; + } + else + { + he = HashLookOnly(&ResIgnoreTable, node->name); + if (he != NULL) continue; + } /* Has this node been merged away or is it marked as skipped? */ /* If so, skip it */