Jspice3
bjtsetup.c File Reference
#include "spice.h"
#include <stdio.h>
#include <math.h>
#include "bjtdefs.h"
#include "const.h"
#include "sperror.h"
#include "util.h"
#include "cktext.h"
Include dependency graph for bjtsetup.c:

Go to the source code of this file.

Functions

int BJTsetup (SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
 

Function Documentation

int BJTsetup ( SMPmatrix matrix,
GENmodel inModel,
CKTcircuit ckt,
int *  states 
)

Definition at line 26 of file bjtsetup.c.

35 {
36  BJTmodel *model = (BJTmodel*)inModel;
37  BJTinstance *here;
38  int error;
39  CKTnode *tmp;
40 
41  /* loop through all the BJT models */
42  for ( ; model != NULL; model = model->BJTnextModel) {
43 
44  if (model->BJTtype != NPN && model->BJTtype != PNP) {
45  model->BJTtype = NPN;
46  }
47  if (!model->BJTsatCurGiven) {
48  model->BJTsatCur = 1e-16;
49  }
50  if (!model->BJTbetaFGiven) {
51  model->BJTbetaF = 100;
52  }
53  if (!model->BJTemissionCoeffFGiven) {
54  model->BJTemissionCoeffF = 1;
55  }
56  if (!model->BJTleakBEemissionCoeffGiven) {
57  model->BJTleakBEemissionCoeff = 1.5;
58  }
59  if (!model->BJTbetaRGiven) {
60  model->BJTbetaR = 1;
61  }
62  if (!model->BJTemissionCoeffRGiven) {
63  model->BJTemissionCoeffR = 1;
64  }
65  if (!model->BJTleakBCemissionCoeffGiven) {
66  model->BJTleakBCemissionCoeff = 2;
67  }
68  if (!model->BJTbaseResistGiven) {
69  model->BJTbaseResist = 0;
70  }
71  if (!model->BJTemitterResistGiven) {
72  model->BJTemitterResist = 0;
73  }
74  if (!model->BJTcollectorResistGiven) {
75  model->BJTcollectorResist = 0;
76  }
77  if (!model->BJTdepletionCapBEGiven) {
78  model->BJTdepletionCapBE = 0;
79  }
80  if (!model->BJTpotentialBEGiven) {
81  model->BJTpotentialBE = .75;
82  }
83  if (!model->BJTjunctionExpBEGiven) {
84  model->BJTjunctionExpBE = .33;
85  }
86  if (!model->BJTtransitTimeFGiven) {
87  model->BJTtransitTimeF = 0;
88  }
89  if (!model->BJTtransitTimeBiasCoeffFGiven) {
90  model->BJTtransitTimeBiasCoeffF = 0;
91  }
92  if (!model->BJTtransitTimeHighCurrentFGiven) {
93  model->BJTtransitTimeHighCurrentF = 0;
94  }
95  if (!model->BJTexcessPhaseGiven) {
96  model->BJTexcessPhase = 0;
97  }
98  if (!model->BJTdepletionCapBCGiven) {
99  model->BJTdepletionCapBC = 0;
100  }
101  if (!model->BJTpotentialBCGiven) {
102  model->BJTpotentialBC = .75;
103  }
104  if (!model->BJTjunctionExpBCGiven) {
105  model->BJTjunctionExpBC = .33;
106  }
107  if (!model->BJTbaseFractionBCcapGiven) {
108  model->BJTbaseFractionBCcap = 1;
109  }
110  if (!model->BJTtransitTimeRGiven) {
111  model->BJTtransitTimeR = 0;
112  }
113  if (!model->BJTcapCSGiven) {
114  model->BJTcapCS = 0;
115  }
116  if (!model->BJTpotentialSubstrateGiven) {
117  model->BJTpotentialSubstrate = .75;
118  }
119  if (!model->BJTexponentialSubstrateGiven) {
120  model->BJTexponentialSubstrate = 0;
121  }
122  if (!model->BJTbetaExpGiven) {
123  model->BJTbetaExp = 0;
124  }
125  if (!model->BJTenergyGapGiven) {
126  model->BJTenergyGap = 1.11;
127  }
128  if (!model->BJTtempExpISGiven) {
129  model->BJTtempExpIS = 3;
130  }
131  if (!model->BJTfNcoefGiven) {
132  model->BJTfNcoef = 0;
133  }
134  if (!model->BJTfNexpGiven) {
135  model->BJTfNexp = 1;
136  }
137 
138 /*
139  * COMPATABILITY WARNING!
140  * special note: for backward compatability to much older models, spice 2G
141  * implemented a special case which checked if B-E leakage saturation
142  * current was >1, then it was instead a the B-E leakage saturation current
143  * divided by IS, and multiplied it by IS at this point. This was not
144  * handled correctly in the 2G code, and there is some question on its
145  * reasonability, since it is also undocumented, so it has been left out
146  * here. It could easily be added with 1 line. (The same applies to the B-C
147  * leakage saturation current). TQ 6/29/84
148  */
149 
150  /* loop through all the instances of the model */
151  for (here = model->BJTinstances; here != NULL;
152  here = here->BJTnextInstance) {
153 
154  if (!here->BJTareaGiven) {
155  here->BJTarea = 1;
156  }
157  if (model->BJTcollectorResist == 0) {
158  here->BJTcolPrimeNode = here->BJTcolNode;
159  }
160  else if (here->BJTcolPrimeNode == 0) {
161  error = CKTmkVolt(ckt,&tmp,here->BJTname,"collector");
162  if (error) return(error);
163  here->BJTcolPrimeNode = tmp->number;
164  }
165  if (model->BJTbaseResist == 0) {
166  here->BJTbasePrimeNode = here->BJTbaseNode;
167  }
168  else if (here->BJTbasePrimeNode == 0){
169  error = CKTmkVolt(ckt,&tmp,here->BJTname, "base");
170  if (error) return(error);
171  here->BJTbasePrimeNode = tmp->number;
172  }
173  if (model->BJTemitterResist == 0) {
174  here->BJTemitPrimeNode = here->BJTemitNode;
175  }
176  else if (here->BJTemitPrimeNode == 0) {
177  error = CKTmkVolt(ckt,&tmp,here->BJTname, "emitter");
178  if (error) return(error);
179  here->BJTemitPrimeNode = tmp->number;
180  }
181 
182  here->BJTstate = *states;
183  *states += BJTnumStates;
184 
185  TSTALLOC(BJTcolColPrimePtr,BJTcolNode,BJTcolPrimeNode)
186  TSTALLOC(BJTbaseBasePrimePtr,BJTbaseNode,BJTbasePrimeNode)
187  TSTALLOC(BJTemitEmitPrimePtr,BJTemitNode,BJTemitPrimeNode)
188  TSTALLOC(BJTcolPrimeColPtr,BJTcolPrimeNode,BJTcolNode)
189  TSTALLOC(BJTcolPrimeBasePrimePtr,BJTcolPrimeNode,BJTbasePrimeNode)
190  TSTALLOC(BJTcolPrimeEmitPrimePtr,BJTcolPrimeNode,BJTemitPrimeNode)
191  TSTALLOC(BJTbasePrimeBasePtr,BJTbasePrimeNode,BJTbaseNode)
192  TSTALLOC(BJTbasePrimeColPrimePtr,BJTbasePrimeNode,BJTcolPrimeNode)
193  TSTALLOC(BJTbasePrimeEmitPrimePtr,BJTbasePrimeNode,BJTemitPrimeNode)
194  TSTALLOC(BJTemitPrimeEmitPtr,BJTemitPrimeNode,BJTemitNode)
195  TSTALLOC(BJTemitPrimeColPrimePtr,BJTemitPrimeNode,BJTcolPrimeNode)
196  TSTALLOC(BJTemitPrimeBasePrimePtr,BJTemitPrimeNode,BJTbasePrimeNode)
197  TSTALLOC(BJTcolColPtr,BJTcolNode,BJTcolNode)
198  TSTALLOC(BJTbaseBasePtr,BJTbaseNode,BJTbaseNode)
199  TSTALLOC(BJTemitEmitPtr,BJTemitNode,BJTemitNode)
200  TSTALLOC(BJTcolPrimeColPrimePtr,BJTcolPrimeNode,BJTcolPrimeNode)
201  TSTALLOC(BJTbasePrimeBasePrimePtr,BJTbasePrimeNode,BJTbasePrimeNode)
202  TSTALLOC(BJTemitPrimeEmitPrimePtr,BJTemitPrimeNode,BJTemitPrimeNode)
203  TSTALLOC(BJTsubstSubstPtr,BJTsubstNode,BJTsubstNode)
204  TSTALLOC(BJTcolPrimeSubstPtr,BJTcolPrimeNode,BJTsubstNode)
205  TSTALLOC(BJTsubstColPrimePtr,BJTsubstNode,BJTcolPrimeNode)
206  TSTALLOC(BJTbaseColPrimePtr,BJTbaseNode,BJTcolPrimeNode)
207  TSTALLOC(BJTcolPrimeBasePtr,BJTcolPrimeNode,BJTbaseNode)
208  }
209  }
210  return(OK);
211 }
unsigned BJTdepletionCapBCGiven
Definition: bjtdefs.h:346
double BJTdepletionCapBC
Definition: bjtdefs.h:291
BJTinstance * BJTinstances
Definition: bjtdefs.h:259
#define NPN
Definition: bjtdefs.h:364
int BJTemitPrimeNode
Definition: bjtdefs.h:30
unsigned BJTexponentialSubstrateGiven
Definition: bjtdefs.h:353
double BJTjunctionExpBC
Definition: bjtdefs.h:293
double BJTtempExpIS
Definition: bjtdefs.h:301
#define BJTnumStates
Definition: bjtdefs.h:251
double BJTpotentialBE
Definition: bjtdefs.h:284
unsigned BJTbetaExpGiven
Definition: bjtdefs.h:354
int BJTtype
Definition: bjtdefs.h:262
unsigned BJTareaGiven
Definition: bjtdefs.h:230
double BJTexcessPhase
Definition: bjtdefs.h:290
struct sBJTmodel * BJTnextModel
Definition: bjtdefs.h:257
unsigned BJTcapCSGiven
Definition: bjtdefs.h:351
double BJTtransitTimeR
Definition: bjtdefs.h:295
double BJTtransitTimeHighCurrentF
Definition: bjtdefs.h:289
unsigned BJTjunctionExpBEGiven
Definition: bjtdefs.h:340
unsigned BJTleakBCemissionCoeffGiven
Definition: bjtdefs.h:332
double BJTemissionCoeffF
Definition: bjtdefs.h:267
double BJTbetaExp
Definition: bjtdefs.h:299
double BJTarea
Definition: bjtdefs.h:32
unsigned BJTtransitTimeBiasCoeffFGiven
Definition: bjtdefs.h:342
unsigned BJTdepletionCapBEGiven
Definition: bjtdefs.h:338
double BJTpotentialBC
Definition: bjtdefs.h:292
double BJTemissionCoeffR
Definition: bjtdefs.h:273
static double e
Definition: vectors.c:17
double BJTjunctionExpBE
Definition: bjtdefs.h:285
unsigned BJTcollectorResistGiven
Definition: bjtdefs.h:337
IFuid BJTname
Definition: bjtdefs.h:22
int BJTbasePrimeNode
Definition: bjtdefs.h:29
unsigned BJTbetaFGiven
Definition: bjtdefs.h:321
unsigned BJTfNcoefGiven
Definition: bjtdefs.h:358
double BJTbetaF
Definition: bjtdefs.h:266
unsigned BJTtransitTimeHighCurrentFGiven
Definition: bjtdefs.h:344
double BJTexponentialSubstrate
Definition: bjtdefs.h:298
unsigned BJTemitterResistGiven
Definition: bjtdefs.h:336
unsigned BJTsatCurGiven
Definition: bjtdefs.h:320
struct sBJTinstance * BJTnextInstance
Definition: bjtdefs.h:20
#define TSTALLOC(ptr, first, second)
Definition: devdefs.h:124
double BJTfNcoef
Definition: bjtdefs.h:303
unsigned BJTpotentialBCGiven
Definition: bjtdefs.h:347
#define OK
Definition: iferrmsg.h:17
double BJTpotentialSubstrate
Definition: bjtdefs.h:297
int BJTcolPrimeNode
Definition: bjtdefs.h:28
#define NULL
Definition: spdefs.h:121
double BJTleakBEemissionCoeff
Definition: bjtdefs.h:271
double BJTtransitTimeF
Definition: bjtdefs.h:286
int number
Definition: cktdefs.h:39
unsigned BJTbaseResistGiven
Definition: bjtdefs.h:333
unsigned BJTfNexpGiven
Definition: bjtdefs.h:359
#define PNP
Definition: bjtdefs.h:365
double BJTcollectorResist
Definition: bjtdefs.h:282
double BJTtransitTimeBiasCoeffF
Definition: bjtdefs.h:287
int BJTbaseNode
Definition: bjtdefs.h:25
unsigned BJTpotentialSubstrateGiven
Definition: bjtdefs.h:352
double BJTsatCur
Definition: bjtdefs.h:265
unsigned BJTemissionCoeffFGiven
Definition: bjtdefs.h:322
static char model[32]
Definition: subckt.c:76
double BJTbaseResist
Definition: bjtdefs.h:278
double BJTdepletionCapBE
Definition: bjtdefs.h:283
double BJTfNexp
Definition: bjtdefs.h:304
unsigned BJTbaseFractionBCcapGiven
Definition: bjtdefs.h:349
return(True)
unsigned BJTleakBEemissionCoeffGiven
Definition: bjtdefs.h:326
unsigned BJTemissionCoeffRGiven
Definition: bjtdefs.h:328
unsigned BJTjunctionExpBCGiven
Definition: bjtdefs.h:348
double BJTemitterResist
Definition: bjtdefs.h:281
unsigned BJTpotentialBEGiven
Definition: bjtdefs.h:339
int CKTmkVolt()
unsigned BJTtempExpISGiven
Definition: bjtdefs.h:356
int BJTstate
Definition: bjtdefs.h:23
double BJTleakBCemissionCoeff
Definition: bjtdefs.h:277
unsigned BJTtransitTimeRGiven
Definition: bjtdefs.h:350
unsigned BJTenergyGapGiven
Definition: bjtdefs.h:355
unsigned BJTexcessPhaseGiven
Definition: bjtdefs.h:345
unsigned BJTtransitTimeFGiven
Definition: bjtdefs.h:341
int BJTcolNode
Definition: bjtdefs.h:24
unsigned BJTbetaRGiven
Definition: bjtdefs.h:327
double BJTbetaR
Definition: bjtdefs.h:272
int BJTemitNode
Definition: bjtdefs.h:26
double BJTbaseFractionBCcap
Definition: bjtdefs.h:294
double BJTcapCS
Definition: bjtdefs.h:296
double BJTenergyGap
Definition: bjtdefs.h:300