Made a change to ext2hier.c that should prevent the propagation of

substrate nodes in subcircuits that don't make connections to the
substrate (such as arrays of pFETs).  This is done under the
restriction that ext2spice is being called without generating
parasitics (otherwise the connection to substrate is valid), as it
would be when extracting for LVS.  The ground node must not appear
as a connection to any device.  This is then propagated up the
hierarchy such that if none of a subcell's descendents connect to
the substrate, then neither does the subcell.
This commit is contained in:
Tim Edwards 2021-10-05 20:34:22 -04:00
parent ff49ba4d2e
commit 15f081b4da
2 changed files with 14 additions and 2 deletions

View File

@ -1683,8 +1683,18 @@ esMakePorts(hc, cdata)
if (nn->efnn_node && !(nn->efnn_node->efnode_flags & EF_PORT))
{
nn->efnn_node->efnode_flags |= EF_PORT;
nn->efnn_port = -1; // Will be sorted later
/* If a node is marked EF_SUBS_NODE (is substrate) */
/* but not EF_SUBS_PORT (connects to no devices) */
/* and parasitic output is disabled, then do not */
/* force the substrate connection to be a port. */
if ((EFCapThreshold != (EFCapValue)INFINITE_THRESHOLD_F) ||
(!(nn->efnn_node->efnode_flags & EF_SUBS_NODE)) ||
(nn->efnn_node->efnode_flags & EF_SUBS_PORT))
{
nn->efnn_node->efnode_flags |= EF_PORT;
nn->efnn_port = -1; // Will be sorted later
}
// Diagnostic
// TxPrintf("Port connection in %s from net %s to net %s (%s)\n",

View File

@ -1844,6 +1844,8 @@ efNodeMerge(node1ptr, node2ptr)
keeping->efnode_flags |= EF_PORT;
if (removing->efnode_flags & EF_TOP_PORT)
keeping->efnode_flags |= EF_TOP_PORT;
if (removing->efnode_flags & EF_SUBS_PORT)
keeping->efnode_flags |= EF_SUBS_PORT;
/*
* If "removing" has the EF_SUBS_NODE flag set, then copy the port