1 /**********
2 Copyright 1990 Regents of the University of California.  All rights reserved.
3 Author: 1987 Mathew Lew and Thomas L. Quarles
4 **********/
5 /*
6  */
7 
8 #include "ngspice/ngspice.h"
9 #include "ngspice/const.h"
10 #include "ngspice/ifsim.h"
11 #include "ngspice/cktdefs.h"
12 #include "ngspice/devdefs.h"
13 #include "bjtdefs.h"
14 #include "ngspice/sperror.h"
15 #include "ngspice/suffix.h"
16 
17 
18 /*ARGSUSED*/
19 int
BJTmAsk(CKTcircuit * ckt,GENmodel * instPtr,int which,IFvalue * value)20 BJTmAsk(CKTcircuit *ckt, GENmodel *instPtr, int which, IFvalue *value)
21 {
22     BJTmodel *here = (BJTmodel*)instPtr;
23 
24     NG_IGNORE(ckt);
25 
26     switch(which) {
27         case BJT_MOD_TYPE:
28             if (here->BJTtype == NPN)
29                 value->sValue = "npn";
30             else
31                 value->sValue = "pnp";
32             return(OK);
33         case BJT_MOD_SUBS:
34             if (here->BJTsubs == LATERAL)
35                 value->sValue = "Lateral";
36             else
37                 value->sValue = "Vertical";
38             return(OK);
39         case BJT_MOD_TNOM:
40             value->rValue = here->BJTtnom-CONSTCtoK;
41             return(OK);
42         case BJT_MOD_IS:
43             value->rValue = here->BJTsatCur;
44             return(OK);
45         case BJT_MOD_BF:
46             value->rValue = here->BJTbetaF;
47             return(OK);
48         case BJT_MOD_NF:
49             value->rValue = here->BJTemissionCoeffF;
50             return(OK);
51         case BJT_MOD_VAF:
52             value->rValue = here->BJTearlyVoltF;
53             return(OK);
54         case BJT_MOD_IKF:
55             value->rValue = here->BJTrollOffF;
56             return(OK);
57         case BJT_MOD_ISE:
58             value->rValue = here->BJTleakBEcurrent;
59             return(OK);
60         case BJT_MOD_C2:
61             value->rValue = here->BJTc2;
62             return(OK);
63         case BJT_MOD_NE:
64             value->rValue = here->BJTleakBEemissionCoeff;
65             return(OK);
66         case BJT_MOD_BR:
67             value->rValue = here->BJTbetaR;
68             return(OK);
69         case BJT_MOD_NR:
70             value->rValue = here->BJTemissionCoeffR;
71             return(OK);
72         case BJT_MOD_VAR:
73             value->rValue = here->BJTearlyVoltR;
74             return(OK);
75         case BJT_MOD_IKR:
76             value->rValue = here->BJTrollOffR;
77             return(OK);
78         case BJT_MOD_ISC:
79             value->rValue = here->BJTleakBCcurrent;
80             return(OK);
81         case BJT_MOD_C4:
82             value->rValue = here->BJTc4;
83             return(OK);
84         case BJT_MOD_NC:
85             value->rValue = here->BJTleakBCemissionCoeff;
86             return(OK);
87         case BJT_MOD_RB:
88             value->rValue = here->BJTbaseResist;
89             return(OK);
90         case BJT_MOD_IRB:
91             value->rValue = here->BJTbaseCurrentHalfResist;
92             return(OK);
93         case BJT_MOD_RBM:
94             value->rValue = here->BJTminBaseResist;
95             return(OK);
96         case BJT_MOD_RE:
97             value->rValue = here->BJTemitterResist;
98             return(OK);
99         case BJT_MOD_RC:
100             value->rValue = here->BJTcollectorResist;
101             return(OK);
102         case BJT_MOD_CJE:
103             value->rValue = here->BJTdepletionCapBE;
104             return(OK);
105         case BJT_MOD_VJE:
106             value->rValue = here->BJTpotentialBE;
107             return(OK);
108         case BJT_MOD_MJE:
109             value->rValue = here->BJTjunctionExpBE;
110             return(OK);
111         case BJT_MOD_TF:
112             value->rValue = here->BJTtransitTimeF;
113             return(OK);
114         case BJT_MOD_XTF:
115             value->rValue = here->BJTtransitTimeBiasCoeffF;
116             return(OK);
117         case BJT_MOD_VTF:
118             value->rValue = here->BJTtransitTimeFVBC;
119             return(OK);
120         case BJT_MOD_ITF:
121             value->rValue = here->BJTtransitTimeHighCurrentF;
122             return(OK);
123         case BJT_MOD_PTF:
124             value->rValue = here->BJTexcessPhase;
125             return(OK);
126         case BJT_MOD_CJC:
127             value->rValue = here->BJTdepletionCapBC;
128             return(OK);
129         case BJT_MOD_VJC:
130             value->rValue = here->BJTpotentialBC;
131             return(OK);
132         case BJT_MOD_MJC:
133             value->rValue = here->BJTjunctionExpBC;
134             return(OK);
135         case BJT_MOD_XCJC:
136             value->rValue = here->BJTbaseFractionBCcap;
137             return(OK);
138         case BJT_MOD_TR:
139             value->rValue = here->BJTtransitTimeR;
140             return(OK);
141         case BJT_MOD_CJS:
142             value->rValue = here->BJTcapSub;
143             return(OK);
144         case BJT_MOD_VJS:
145             value->rValue = here->BJTpotentialSubstrate;
146             return(OK);
147         case BJT_MOD_MJS:
148             value->rValue = here->BJTexponentialSubstrate;
149             return(OK);
150         case BJT_MOD_XTB:
151             value->rValue = here->BJTbetaExp;
152             return(OK);
153         case BJT_MOD_EG:
154             value->rValue = here->BJTenergyGap;
155             return(OK);
156         case BJT_MOD_XTI:
157             value->rValue = here->BJTtempExpIS;
158             return(OK);
159         case BJT_MOD_FC:
160             value->rValue = here->BJTdepletionCapCoeff;
161             return(OK);
162         case BJT_MOD_KF:
163             if (here->BJTfNcoefGiven)
164                 value->rValue = here->BJTfNcoef;
165             else
166                 value->rValue = 0.0;
167             return(OK);
168         case BJT_MOD_AF:
169             if (here->BJTfNexpGiven)
170                 value->rValue = here->BJTfNexp;
171             else
172                 value->rValue = 0.0;
173             return(OK);
174         case BJT_MOD_INVEARLYF:
175             value->rValue = here->BJTinvEarlyVoltF;
176             return(OK);
177         case BJT_MOD_INVEARLYR:
178             value->rValue = here->BJTinvEarlyVoltR;
179             return(OK);
180         case BJT_MOD_INVROLLOFFF:
181             value->rValue = here->BJTinvRollOffF;
182             return(OK);
183         case BJT_MOD_INVROLLOFFR:
184             value->rValue = here->BJTinvRollOffR;
185             return(OK);
186         case BJT_MOD_COLCONDUCT:
187             value->rValue = here->BJTcollectorConduct;
188             return(OK);
189         case BJT_MOD_EMITTERCONDUCT:
190             value->rValue = here->BJTemitterConduct;
191             return(OK);
192         case BJT_MOD_TRANSVBCFACT:
193             value->rValue = here->BJTtransitTimeVBCFactor;
194             return(OK);
195         case BJT_MOD_EXCESSPHASEFACTOR:
196             value->rValue = here->BJTexcessPhaseFactor;
197             return(OK);
198         case BJT_MOD_ISS:
199             value->rValue = here->BJTsubSatCur;
200             return(OK);
201         case BJT_MOD_NS:
202             value->rValue = here->BJTemissionCoeffS;
203             return(OK);
204         case BJT_MOD_RCO:
205             value->rValue = here->BJTintCollResist;
206             return(OK);
207         case BJT_MOD_VO:
208             value->rValue = here->BJTepiSatVoltage;
209             return(OK);
210         case BJT_MOD_GAMMA:
211             value->rValue = here->BJTepiDoping;
212             return(OK);
213         case BJT_MOD_QCO:
214             value->rValue = here->BJTepiCharge;
215             return(OK);
216         case BJT_MOD_TLEV:
217             value->iValue = here->BJTtlev;
218             return(OK);
219         case BJT_MOD_TLEVC:
220             value->iValue = here->BJTtlevc;
221             return(OK);
222         case BJT_MOD_TBF1:
223             value->rValue = here->BJTtbf1;
224             return(OK);
225         case BJT_MOD_TBF2:
226             value->rValue = here->BJTtbf2;
227             return(OK);
228         case BJT_MOD_TBR1:
229             value->rValue = here->BJTtbr1;
230             return(OK);
231         case BJT_MOD_TBR2:
232             value->rValue = here->BJTtbr2;
233             return(OK);
234         case BJT_MOD_TIKF1:
235             value->rValue = here->BJTtikf1;
236             return(OK);
237         case BJT_MOD_TIKF2:
238             value->rValue = here->BJTtikf2;
239             return(OK);
240         case BJT_MOD_TIKR1:
241             value->rValue = here->BJTtikr1;
242             return(OK);
243         case BJT_MOD_TIKR2:
244             value->rValue = here->BJTtikr2;
245             return(OK);
246         case BJT_MOD_TIRB1:
247             value->rValue = here->BJTtirb1;
248             return(OK);
249         case BJT_MOD_TIRB2:
250             value->rValue = here->BJTtirb2;
251             return(OK);
252         case BJT_MOD_TNC1:
253             value->rValue = here->BJTtnc1;
254             return(OK);
255         case BJT_MOD_TNC2:
256             value->rValue = here->BJTtnc2;
257             return(OK);
258         case BJT_MOD_TNE1:
259             value->rValue = here->BJTtne1;
260             return(OK);
261         case BJT_MOD_TNE2:
262             value->rValue = here->BJTtne2;
263             return(OK);
264         case BJT_MOD_TNF1:
265             value->rValue = here->BJTtnf1;
266             return(OK);
267         case BJT_MOD_TNF2:
268             value->rValue = here->BJTtnf2;
269             return(OK);
270         case BJT_MOD_TNR1:
271             value->rValue = here->BJTtnr1;
272             return(OK);
273         case BJT_MOD_TNR2:
274             value->rValue = here->BJTtnr2;
275             return(OK);
276         case BJT_MOD_TRB1:
277             value->rValue = here->BJTtrb1;
278             return(OK);
279         case BJT_MOD_TRB2:
280             value->rValue = here->BJTtrb2;
281             return(OK);
282         case BJT_MOD_TRC1:
283             value->rValue = here->BJTtrc1;
284             return(OK);
285         case BJT_MOD_TRC2:
286             value->rValue = here->BJTtrc2;
287             return(OK);
288         case BJT_MOD_TRE1:
289             value->rValue = here->BJTtre1;
290             return(OK);
291         case BJT_MOD_TRE2:
292             value->rValue = here->BJTtre2;
293             return(OK);
294         case BJT_MOD_TRM1:
295             value->rValue = here->BJTtrm1;
296             return(OK);
297         case BJT_MOD_TRM2:
298             value->rValue = here->BJTtrm2;
299             return(OK);
300         case BJT_MOD_TVAF1:
301             value->rValue = here->BJTtvaf1;
302             return(OK);
303         case BJT_MOD_TVAF2:
304             value->rValue = here->BJTtvaf2;
305             return(OK);
306         case BJT_MOD_TVAR1:
307             value->rValue = here->BJTtvar1;
308             return(OK);
309         case BJT_MOD_TVAR2:
310             value->rValue = here->BJTtvar2;
311             return(OK);
312         case BJT_MOD_CTC:
313             value->rValue = here->BJTctc;
314             return(OK);
315         case BJT_MOD_CTE:
316             value->rValue = here->BJTcte;
317             return(OK);
318         case BJT_MOD_CTS:
319             value->rValue = here->BJTcts;
320             return(OK);
321         case BJT_MOD_TVJE:
322             value->rValue = here->BJTtvje;
323             return(OK);
324         case BJT_MOD_TVJC:
325             value->rValue = here->BJTtvjc;
326             return(OK);
327         case BJT_MOD_TVJS:
328             value->rValue = here->BJTtvjs;
329             return(OK);
330         case BJT_MOD_TITF1:
331             value->rValue = here->BJTtitf1;
332             return(OK);
333         case BJT_MOD_TITF2:
334             value->rValue = here->BJTtitf2;
335             return(OK);
336         case BJT_MOD_TTF1:
337             value->rValue = here->BJTttf1;
338             return(OK);
339         case BJT_MOD_TTF2:
340             value->rValue = here->BJTttf2;
341             return(OK);
342         case BJT_MOD_TTR1:
343             value->rValue = here->BJTttr1;
344             return(OK);
345         case BJT_MOD_TTR2:
346             value->rValue = here->BJTttr2;
347             return(OK);
348         case BJT_MOD_TMJE1:
349             value->rValue = here->BJTtmje1;
350             return(OK);
351         case BJT_MOD_TMJE2:
352             value->rValue = here->BJTtmje2;
353             return(OK);
354         case BJT_MOD_TMJC1:
355             value->rValue = here->BJTtmjc1;
356             return(OK);
357         case BJT_MOD_TMJC2:
358             value->rValue = here->BJTtmjc2;
359             return(OK);
360         case BJT_MOD_TMJS1:
361             value->rValue = here->BJTtmjs1;
362             return(OK);
363         case BJT_MOD_TMJS2:
364             value->rValue = here->BJTtmjs2;
365             return(OK);
366         case BJT_MOD_TNS1:
367             value->rValue = here->BJTtns1;
368             return(OK);
369         case BJT_MOD_TNS2:
370             value->rValue = here->BJTtns2;
371             return(OK);
372         case BJT_MOD_NKF:
373             value->rValue = here->BJTnkf;
374             return(OK);
375         case BJT_MOD_TIS1:
376             value->rValue = here->BJTtis1;
377             return(OK);
378         case BJT_MOD_TIS2:
379             value->rValue = here->BJTtis2;
380             return(OK);
381         case BJT_MOD_TISE1:
382             value->rValue = here->BJTtise1;
383             return(OK);
384         case BJT_MOD_TISE2:
385             value->rValue = here->BJTtise2;
386             return(OK);
387         case BJT_MOD_TISC1:
388             value->rValue = here->BJTtisc1;
389             return(OK);
390         case BJT_MOD_TISC2:
391             value->rValue = here->BJTtisc2;
392             return(OK);
393         case BJT_MOD_TISS1:
394             value->rValue = here->BJTtiss1;
395             return(OK);
396         case BJT_MOD_TISS2:
397             value->rValue = here->BJTtiss2;
398             return(OK);
399         case BJT_MOD_QUASIMOD:
400             value->iValue = here->BJTquasimod;
401             return(OK);
402         case BJT_MOD_EGQS:
403             value->rValue = here->BJTenergyGapQS;
404             return(OK);
405         case BJT_MOD_XRCI:
406             value->rValue = here->BJTtempExpRCI;
407             return(OK);
408         case BJT_MOD_XD:
409             value->rValue = here->BJTtempExpVO;
410             return(OK);
411         case BJT_MOD_VBE_MAX:
412             value->rValue = here->BJTvbeMax;
413             return(OK);
414         case BJT_MOD_VBC_MAX:
415             value->rValue = here->BJTvbcMax;
416             return(OK);
417         case BJT_MOD_VCE_MAX:
418             value->rValue = here->BJTvceMax;
419             return(OK);
420         default:
421             return(E_BADPARM);
422     }
423     /* NOTREACHED */
424 }
425 
426