From b59e2d03b5d24936d7d260231a8bd1ce437dbcf0 Mon Sep 17 00:00:00 2001 From: rlar Date: Sat, 7 Jan 2017 19:51:41 +0100 Subject: [PATCH] FIXME, soi stuff, very seriously broken ! --- src/spicelib/devices/bsim3soi_dd/b3soidd.c | 16 ++++++++-------- src/spicelib/devices/bsim3soi_dd/b3soidddef.h | 4 ++++ src/spicelib/devices/bsim3soi_fd/b3soifd.c | 16 ++++++++-------- src/spicelib/devices/bsim3soi_fd/b3soifddef.h | 4 ++++ src/spicelib/devices/bsim3soi_pd/b3soipd.c | 16 ++++++++-------- src/spicelib/devices/bsim3soi_pd/b3soipddef.h | 4 ++++ src/spicelib/devices/bsimsoi/b4soi.c | 16 ++++++++-------- src/spicelib/devices/bsimsoi/b4soidef.h | 4 ++++ src/spicelib/devices/soi3/soi3.c | 12 ++++++------ src/spicelib/devices/soi3/soi3defs.h | 4 +++- 10 files changed, 57 insertions(+), 39 deletions(-) diff --git a/src/spicelib/devices/bsim3soi_dd/b3soidd.c b/src/spicelib/devices/bsim3soi_dd/b3soidd.c index 5bffac566..583ec8b7d 100644 --- a/src/spicelib/devices/bsim3soi_dd/b3soidd.c +++ b/src/spicelib/devices/bsim3soi_dd/b3soidd.c @@ -465,14 +465,14 @@ IP( "pmos", B3SOIDD_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *B3SOIDDnames[] = { - "Drain", - "Gate", - "Source", - "Backgate", - "", - "Body", - "Temp", - "Charge", + "Drain", /* 1 */ + "Gate", /* 2 */ + "Source", /* 3 */ + "Backgate", /* 4 */ + "", /* 5 */ /* ouch ! */ + "Body", /* 6 */ + "Temp", /* 7 */ + "Charge", /* 8 */ }; int B3SOIDDnSize = NUMELEMS(B3SOIDDnames); diff --git a/src/spicelib/devices/bsim3soi_dd/b3soidddef.h b/src/spicelib/devices/bsim3soi_dd/b3soidddef.h index 01fb81667..7e2d2572a 100644 --- a/src/spicelib/devices/bsim3soi_dd/b3soidddef.h +++ b/src/spicelib/devices/bsim3soi_dd/b3soidddef.h @@ -26,6 +26,7 @@ typedef struct sB3SOIDDinstance IFuid B3SOIDDname; int B3SOIDDstates; /* index into state table for this device */ + /* GENnode[] { */ int B3SOIDDdNode; int B3SOIDDgNode; int B3SOIDDsNode; @@ -33,6 +34,9 @@ typedef struct sB3SOIDDinstance int B3SOIDDbNode; int B3SOIDDtempNode; int B3SOIDDpNode; + // FIXME completely messed up with respect to B3SOIDDnames[] and INP2M + /* } */ + int B3SOIDDdNodePrime; int B3SOIDDsNodePrime; diff --git a/src/spicelib/devices/bsim3soi_fd/b3soifd.c b/src/spicelib/devices/bsim3soi_fd/b3soifd.c index d4e70ff09..097aeed4f 100644 --- a/src/spicelib/devices/bsim3soi_fd/b3soifd.c +++ b/src/spicelib/devices/bsim3soi_fd/b3soifd.c @@ -465,14 +465,14 @@ IP( "pmos", B3SOIFD_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *B3SOIFDnames[] = { - "Drain", - "Gate", - "Source", - "Backgate", - "", - "Body", - "Temp", - "Charge", + "Drain", /* 1 */ + "Gate", /* 2 */ + "Source", /* 3 */ + "Backgate", /* 4 */ + "", /* 5 */ /* ouch ! */ + "Body", /* 6 */ + "Temp", /* 7 */ + "Charge", /* 8 */ }; int B3SOIFDnSize = NUMELEMS(B3SOIFDnames); diff --git a/src/spicelib/devices/bsim3soi_fd/b3soifddef.h b/src/spicelib/devices/bsim3soi_fd/b3soifddef.h index f3c0a1007..1e393ab34 100644 --- a/src/spicelib/devices/bsim3soi_fd/b3soifddef.h +++ b/src/spicelib/devices/bsim3soi_fd/b3soifddef.h @@ -26,6 +26,7 @@ typedef struct sB3SOIFDinstance IFuid B3SOIFDname; int B3SOIFDstates; /* index into state table for this device */ + /* GENnode[] { */ int B3SOIFDdNode; int B3SOIFDgNode; int B3SOIFDsNode; @@ -33,6 +34,9 @@ typedef struct sB3SOIFDinstance int B3SOIFDbNode; int B3SOIFDtempNode; int B3SOIFDpNode; + // FIXME completely messed up with respect to B3SOIFDnames[] and INP2M + /* } */ + int B3SOIFDdNodePrime; int B3SOIFDsNodePrime; diff --git a/src/spicelib/devices/bsim3soi_pd/b3soipd.c b/src/spicelib/devices/bsim3soi_pd/b3soipd.c index 2ec8c5e7e..d3c36cd5a 100644 --- a/src/spicelib/devices/bsim3soi_pd/b3soipd.c +++ b/src/spicelib/devices/bsim3soi_pd/b3soipd.c @@ -568,14 +568,14 @@ IP( "pmos", B3SOIPD_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *B3SOIPDnames[] = { - "Drain", - "Gate", - "Source", - "Backgate", - "", - "Body", - "Temp", - "Charge", + "Drain", /* 1 */ + "Gate", /* 2 */ + "Source", /* 3 */ + "Backgate", /* 4 */ + "", /* 5 */ /* ouch ! */ + "Body", /* 6 */ + "Temp", /* 7 */ + "Charge", /* 8 */ }; int B3SOIPDnSize = NUMELEMS(B3SOIPDnames); diff --git a/src/spicelib/devices/bsim3soi_pd/b3soipddef.h b/src/spicelib/devices/bsim3soi_pd/b3soipddef.h index ceddbe2f8..ef7b5ed66 100644 --- a/src/spicelib/devices/bsim3soi_pd/b3soipddef.h +++ b/src/spicelib/devices/bsim3soi_pd/b3soipddef.h @@ -30,6 +30,7 @@ typedef struct sB3SOIPDinstance IFuid B3SOIPDname; int B3SOIPDstates; /* index into state table for this device */ + /* GENnode[] { */ int B3SOIPDdNode; int B3SOIPDgNode; int B3SOIPDsNode; @@ -37,6 +38,9 @@ typedef struct sB3SOIPDinstance int B3SOIPDpNode; int B3SOIPDbNode; int B3SOIPDtempNode; + /* The contract is: B3SOIPDnames, completely disordered ! */ + /* } */ + int B3SOIPDdNodePrime; int B3SOIPDsNodePrime; diff --git a/src/spicelib/devices/bsimsoi/b4soi.c b/src/spicelib/devices/bsimsoi/b4soi.c index 319a51cbb..c8d895aed 100644 --- a/src/spicelib/devices/bsimsoi/b4soi.c +++ b/src/spicelib/devices/bsimsoi/b4soi.c @@ -1116,14 +1116,14 @@ IP( "pmos", B4SOI_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *B4SOInames[] = { - "Drain", - "Gate", - "Source", - "Backgate", - "", - "Body", - "Temp", - "Charge", + "Drain", /* 1 */ + "Gate", /* 2 */ + "Source", /* 3 */ + "Backgate", /* 4 */ + "", /* 5 */ /* ouch ! */ + "Body", /* 6 */ + "Temp", /* 7 */ + "Charge", /* 8 */ }; int B4SOInSize = NUMELEMS(B4SOInames); diff --git a/src/spicelib/devices/bsimsoi/b4soidef.h b/src/spicelib/devices/bsimsoi/b4soidef.h index 8ebb90ada..a03c853c2 100644 --- a/src/spicelib/devices/bsimsoi/b4soidef.h +++ b/src/spicelib/devices/bsimsoi/b4soidef.h @@ -31,6 +31,7 @@ typedef struct sB4SOIinstance IFuid B4SOIname; int B4SOIstates; /* index into state table for this device */ + /* GENnode[] { */ int B4SOIdNode; int B4SOIgNodeExt; /* v3.1 changed gNode to gNodeExt */ int B4SOIsNode; @@ -38,6 +39,9 @@ typedef struct sB4SOIinstance int B4SOIpNode; int B4SOIbNode; int B4SOItempNode; + // FIXME completely messed up with respect to B4SOInames[] and INP2M + /* } */ + int B4SOIdNodePrime; int B4SOIsNodePrime; int B4SOIgNode; /* v3.1 */ diff --git a/src/spicelib/devices/soi3/soi3.c b/src/spicelib/devices/soi3/soi3.c index 401fa042b..d012ff8fa 100644 --- a/src/spicelib/devices/soi3/soi3.c +++ b/src/spicelib/devices/soi3/soi3.c @@ -28,12 +28,12 @@ ngspice integration char *SOI3names[] = { - "Drain", - "Front Gate", - "Source", - "Back Gate", - "Bulk", - "Thermal" + "Drain", /* 1 */ + "Front Gate", /* 2 */ + "Source", /* 3 */ + "Back Gate", /* 4 */ + "Bulk", /* 5 */ + "Thermal" /* 6 */ }; diff --git a/src/spicelib/devices/soi3/soi3defs.h b/src/spicelib/devices/soi3/soi3defs.h index 4d7dba923..050358c08 100644 --- a/src/spicelib/devices/soi3/soi3defs.h +++ b/src/spicelib/devices/soi3/soi3defs.h @@ -43,13 +43,15 @@ typedef struct sSOI3instance { IFuid SOI3name; /* pointer to character string naming this instance */ int SOI3states; /* index into state table for this device */ - + /* GENnode[] { */ int SOI3dNode; /* number of the drain node of the mosfet */ int SOI3gfNode; /* number of the front gate node of the mosfet */ int SOI3sNode; /* number of the source node of the mosfet */ int SOI3gbNode; /* number of the back gate node of the mosfet */ int SOI3bNode; /* number of the bulk node of the mosfet */ int SOI3toutNode; /* number of thermal output node (tout) */ + // surprise, a SOI with really matching SOI3names[] ! + /* } */ int SOI3branch; /* branch number for zero voltage source if no thermal */