Browse Source

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.
pre-master-46
rlar 9 years ago
parent
commit
c0921250b7
  1. 30
      src/spicelib/devices/bsim4/b4set.c
  2. 30
      src/spicelib/devices/bsim4v5/b4v5set.c
  3. 30
      src/spicelib/devices/bsim4v6/b4v6set.c
  4. 30
      src/spicelib/devices/bsim4v7/b4v7set.c
  5. 25
      src/spicelib/devices/bsimsoi/b4soiset.c

30
src/spicelib/devices/bsim4/b4set.c

@ -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)
{

30
src/spicelib/devices/bsim4v5/b4v5set.c

@ -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)
{

30
src/spicelib/devices/bsim4v6/b4v6set.c

@ -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)
{

30
src/spicelib/devices/bsim4v7/b4v7set.c

@ -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)
{

25
src/spicelib/devices/bsimsoi/b4soiset.c

@ -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…
Cancel
Save