src/spicelib/devices/*/*set.c, missing CKTdltNNum() invocations, medium cases
All locally created nodes (CKTmk..() invocations in XXXsetup()) must be deleted in XXXunsetup() Otherwise CKTmk..() invocations during a following CKTsetup() will re-emit still used node numbers, thus accidentally shorting nodes. This patch fixes a little bit more complex cases, which are local node variables which will start with value 0 and eventually be set with the result of a CKTmk..() invocations, but might as well receive a node number from another node variable. Here CKTdltNNum() must not be invoked if the node number is merely a copy from another node variable.
This commit is contained in:
parent
1fd14fa2ee
commit
c0921250b7
|
|
@ -2770,6 +2770,36 @@ CKTcircuit *ckt)
|
|||
CKTdltNNum(ckt, here->BSIM4qNode);
|
||||
here->BSIM4qNode = 0;
|
||||
}
|
||||
if (here->BSIM4sbNode &&
|
||||
here->BSIM4sbNode != here->BSIM4bNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4sbNode);
|
||||
here->BSIM4sbNode = 0;
|
||||
}
|
||||
if (here->BSIM4bNodePrime &&
|
||||
here->BSIM4bNodePrime != here->BSIM4bNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4bNodePrime);
|
||||
here->BSIM4bNodePrime = 0;
|
||||
}
|
||||
if (here->BSIM4dbNode &&
|
||||
here->BSIM4dbNode != here->BSIM4bNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4dbNode);
|
||||
here->BSIM4dbNode = 0;
|
||||
}
|
||||
if (here->BSIM4gNodeMid &&
|
||||
here->BSIM4gNodeMid != here->BSIM4gNodeExt)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4gNodeMid);
|
||||
here->BSIM4gNodeMid = 0;
|
||||
}
|
||||
if (here->BSIM4gNodePrime &&
|
||||
here->BSIM4gNodePrime != here->BSIM4gNodeExt)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4gNodePrime);
|
||||
here->BSIM4gNodePrime = 0;
|
||||
}
|
||||
if (here->BSIM4sNodePrime
|
||||
&& here->BSIM4sNodePrime != here->BSIM4sNode)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2148,6 +2148,36 @@ BSIM4v5unsetup(
|
|||
CKTdltNNum(ckt, here->BSIM4v5qNode);
|
||||
here->BSIM4v5qNode = 0;
|
||||
}
|
||||
if (here->BSIM4v5sbNode &&
|
||||
here->BSIM4v5sbNode != here->BSIM4v5bNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v5sbNode);
|
||||
here->BSIM4v5sbNode = 0;
|
||||
}
|
||||
if (here->BSIM4v5bNodePrime &&
|
||||
here->BSIM4v5bNodePrime != here->BSIM4v5bNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v5bNodePrime);
|
||||
here->BSIM4v5bNodePrime = 0;
|
||||
}
|
||||
if (here->BSIM4v5dbNode &&
|
||||
here->BSIM4v5dbNode != here->BSIM4v5bNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v5dbNode);
|
||||
here->BSIM4v5dbNode = 0;
|
||||
}
|
||||
if (here->BSIM4v5gNodeMid &&
|
||||
here->BSIM4v5gNodeMid != here->BSIM4v5gNodeExt)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v5gNodeMid);
|
||||
here->BSIM4v5gNodeMid = 0;
|
||||
}
|
||||
if (here->BSIM4v5gNodePrime &&
|
||||
here->BSIM4v5gNodePrime != here->BSIM4v5gNodeExt)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v5gNodePrime);
|
||||
here->BSIM4v5gNodePrime = 0;
|
||||
}
|
||||
if (here->BSIM4v5sNodePrime
|
||||
&& here->BSIM4v5sNodePrime != here->BSIM4v5sNode)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2481,6 +2481,36 @@ BSIM4v6unsetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
CKTdltNNum(ckt, here->BSIM4v6qNode);
|
||||
here->BSIM4v6qNode = 0;
|
||||
}
|
||||
if (here->BSIM4v6sbNode &&
|
||||
here->BSIM4v6sbNode != here->BSIM4v6bNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v6sbNode);
|
||||
here->BSIM4v6sbNode = 0;
|
||||
}
|
||||
if (here->BSIM4v6bNodePrime &&
|
||||
here->BSIM4v6bNodePrime != here->BSIM4v6bNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v6bNodePrime);
|
||||
here->BSIM4v6bNodePrime = 0;
|
||||
}
|
||||
if (here->BSIM4v6dbNode &&
|
||||
here->BSIM4v6dbNode != here->BSIM4v6bNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v6dbNode);
|
||||
here->BSIM4v6dbNode = 0;
|
||||
}
|
||||
if (here->BSIM4v6gNodeMid &&
|
||||
here->BSIM4v6gNodeMid != here->BSIM4v6gNodeExt)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v6gNodeMid);
|
||||
here->BSIM4v6gNodeMid = 0;
|
||||
}
|
||||
if (here->BSIM4v6gNodePrime &&
|
||||
here->BSIM4v6gNodePrime != here->BSIM4v6gNodeExt)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v6gNodePrime);
|
||||
here->BSIM4v6gNodePrime = 0;
|
||||
}
|
||||
if (here->BSIM4v6sNodePrime
|
||||
&& here->BSIM4v6sNodePrime != here->BSIM4v6sNode)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2638,6 +2638,36 @@ CKTcircuit *ckt)
|
|||
CKTdltNNum(ckt, here->BSIM4v7qNode);
|
||||
here->BSIM4v7qNode = 0;
|
||||
}
|
||||
if (here->BSIM4v7sbNode &&
|
||||
here->BSIM4v7sbNode != here->BSIM4v7bNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v7sbNode);
|
||||
here->BSIM4v7sbNode = 0;
|
||||
}
|
||||
if (here->BSIM4v7bNodePrime &&
|
||||
here->BSIM4v7bNodePrime != here->BSIM4v7bNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v7bNodePrime);
|
||||
here->BSIM4v7bNodePrime = 0;
|
||||
}
|
||||
if (here->BSIM4v7dbNode &&
|
||||
here->BSIM4v7dbNode != here->BSIM4v7bNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v7dbNode);
|
||||
here->BSIM4v7dbNode = 0;
|
||||
}
|
||||
if (here->BSIM4v7gNodeMid &&
|
||||
here->BSIM4v7gNodeMid != here->BSIM4v7gNodeExt)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v7gNodeMid);
|
||||
here->BSIM4v7gNodeMid = 0;
|
||||
}
|
||||
if (here->BSIM4v7gNodePrime &&
|
||||
here->BSIM4v7gNodePrime != here->BSIM4v7gNodeExt)
|
||||
{
|
||||
CKTdltNNum(ckt, here->BSIM4v7gNodePrime);
|
||||
here->BSIM4v7gNodePrime = 0;
|
||||
}
|
||||
if (here->BSIM4v7sNodePrime
|
||||
&& here->BSIM4v7sNodePrime != here->BSIM4v7sNode)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2863,6 +2863,31 @@ B4SOIunsetup(
|
|||
here->B4SOIvbsNode = 0;
|
||||
}
|
||||
|
||||
if (here->B4SOIsbNode &&
|
||||
here->B4SOIsbNode != here->B4SOIbNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->B4SOIsbNode);
|
||||
here->B4SOIsbNode = 0;
|
||||
}
|
||||
if (here->B4SOIdbNode &&
|
||||
here->B4SOIdbNode != here->B4SOIbNode)
|
||||
{
|
||||
CKTdltNNum(ckt, here->B4SOIdbNode);
|
||||
here->B4SOIdbNode = 0;
|
||||
}
|
||||
if (here->B4SOIgNodeMid &&
|
||||
here->B4SOIgNodeMid != here->B4SOIgNodeExt)
|
||||
{
|
||||
CKTdltNNum(ckt, here->B4SOIgNodeMid);
|
||||
here->B4SOIgNodeMid = 0;
|
||||
}
|
||||
if (here->B4SOIgNode &&
|
||||
here->B4SOIgNode != here->B4SOIgNodeExt)
|
||||
{
|
||||
CKTdltNNum(ckt, here->B4SOIgNode);
|
||||
here->B4SOIgNode = 0;
|
||||
}
|
||||
|
||||
if (here->B4SOIsNodePrime
|
||||
&& here->B4SOIsNodePrime != here->B4SOIsNode)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue