1 /***************************************************************************
2 JSPICE3 adaptation of Spice3f2 - Copyright (c) Stephen R. Whiteley 1992
3 Copyright 1990 Regents of the University of California.  All rights reserved.
4 Authors: 1985 Thomas L. Quarles
5          1993 Stephen R. Whiteley
6 ****************************************************************************/
7 
8 /*
9  * This routine sets model parameters for
10  * BJTs in the circuit.
11  */
12 
13 #include "spice.h"
14 #include <stdio.h>
15 #include "bjtdefs.h"
16 #include "const.h"
17 #include "util.h"
18 #include "sperror.h"
19 
20 
21 int
BJTmParam(param,value,inModel)22 BJTmParam(param,value,inModel)
23 
24 int param;
25 IFvalue *value;
26 GENmodel *inModel;
27 {
28     BJTmodel *mods = (BJTmodel*)inModel;
29 
30     switch(param) {
31 
32         case BJT_MOD_NPN:
33             if (value->iValue) {
34                 mods->BJTtype = NPN;
35             }
36             break;
37         case BJT_MOD_PNP:
38             if (value->iValue) {
39                 mods->BJTtype = PNP;
40             }
41             break;
42         case BJT_MOD_IS:
43             mods->BJTsatCur = value->rValue;
44             mods->BJTsatCurGiven = TRUE;
45             break;
46         case BJT_MOD_BF:
47             mods->BJTbetaF = value->rValue;
48             mods->BJTbetaFGiven = TRUE;
49             break;
50         case BJT_MOD_NF:
51             mods->BJTemissionCoeffF = value->rValue;
52             mods->BJTemissionCoeffFGiven = TRUE;
53             break;
54         case BJT_MOD_VAF:
55             mods->BJTearlyVoltF = value->rValue;
56             mods->BJTearlyVoltFGiven = TRUE;
57             break;
58         case BJT_MOD_IKF:
59             mods->BJTrollOffF = value->rValue;
60             mods->BJTrollOffFGiven = TRUE;
61             break;
62         case BJT_MOD_ISE:
63             mods->BJTleakBEcurrent = value->rValue;
64             mods->BJTleakBEcurrentGiven = TRUE;
65             break;
66         case BJT_MOD_NE:
67             mods->BJTleakBEemissionCoeff = value->rValue;
68             mods->BJTleakBEemissionCoeffGiven = TRUE;
69             break;
70         case BJT_MOD_BR:
71             mods->BJTbetaR = value->rValue;
72             mods->BJTbetaRGiven = TRUE;
73             break;
74         case BJT_MOD_NR:
75             mods->BJTemissionCoeffR = value->rValue;
76             mods->BJTemissionCoeffRGiven = TRUE;
77             break;
78         case BJT_MOD_VAR:
79             mods->BJTearlyVoltR = value->rValue;
80             mods->BJTearlyVoltRGiven = TRUE;
81             break;
82         case BJT_MOD_IKR:
83             mods->BJTrollOffR = value->rValue;
84             mods->BJTrollOffRGiven = TRUE;
85             break;
86         case BJT_MOD_ISC:
87             mods->BJTleakBCcurrent = value->rValue;
88             mods->BJTleakBCcurrentGiven = TRUE;
89             break;
90         case BJT_MOD_NC:
91             mods->BJTleakBCemissionCoeff = value->rValue;
92             mods->BJTleakBCemissionCoeffGiven = TRUE;
93             break;
94         case BJT_MOD_RB:
95             mods->BJTbaseResist = value->rValue;
96             mods->BJTbaseResistGiven = TRUE;
97             break;
98         case BJT_MOD_IRB:
99             mods->BJTbaseCurrentHalfResist = value->rValue;
100             mods->BJTbaseCurrentHalfResistGiven = TRUE;
101             break;
102         case BJT_MOD_RBM:
103             mods->BJTminBaseResist = value->rValue;
104             mods->BJTminBaseResistGiven = TRUE;
105             break;
106         case BJT_MOD_RE:
107             mods->BJTemitterResist = value->rValue;
108             mods->BJTemitterResistGiven = TRUE;
109             break;
110         case BJT_MOD_RC:
111             mods->BJTcollectorResist = value->rValue;
112             mods->BJTcollectorResistGiven = TRUE;
113             break;
114         case BJT_MOD_CJE:
115             mods->BJTdepletionCapBE = value->rValue;
116             mods->BJTdepletionCapBEGiven = TRUE;
117             break;
118         case BJT_MOD_VJE:
119             mods->BJTpotentialBE = value->rValue;
120             mods->BJTpotentialBEGiven = TRUE;
121             break;
122         case BJT_MOD_MJE:
123             mods->BJTjunctionExpBE = value->rValue;
124             mods->BJTjunctionExpBEGiven = TRUE;
125             break;
126         case BJT_MOD_TF:
127             mods->BJTtransitTimeF = value->rValue;
128             mods->BJTtransitTimeFGiven = TRUE;
129             break;
130         case BJT_MOD_XTF:
131             mods->BJTtransitTimeBiasCoeffF = value->rValue;
132             mods->BJTtransitTimeBiasCoeffFGiven = TRUE;
133             break;
134         case BJT_MOD_VTF:
135             mods->BJTtransitTimeFVBC = value->rValue;
136             mods->BJTtransitTimeFVBCGiven = TRUE;
137             break;
138         case BJT_MOD_ITF:
139             mods->BJTtransitTimeHighCurrentF = value->rValue;
140             mods->BJTtransitTimeHighCurrentFGiven = TRUE;
141             break;
142         case BJT_MOD_PTF:
143             mods->BJTexcessPhase = value->rValue;
144             mods->BJTexcessPhaseGiven = TRUE;
145             break;
146         case BJT_MOD_CJC:
147             mods->BJTdepletionCapBC = value->rValue;
148             mods->BJTdepletionCapBCGiven = TRUE;
149             break;
150         case BJT_MOD_VJC:
151             mods->BJTpotentialBC = value->rValue;
152             mods->BJTpotentialBCGiven = TRUE;
153             break;
154         case BJT_MOD_MJC:
155             mods->BJTjunctionExpBC = value->rValue;
156             mods->BJTjunctionExpBCGiven = TRUE;
157             break;
158         case BJT_MOD_XCJC:
159             mods->BJTbaseFractionBCcap = value->rValue;
160             mods->BJTbaseFractionBCcapGiven = TRUE;
161             break;
162         case BJT_MOD_TR:
163             mods->BJTtransitTimeR = value->rValue;
164             mods->BJTtransitTimeRGiven = TRUE;
165             break;
166         case BJT_MOD_CJS:
167             mods->BJTcapCS = value->rValue;
168             mods->BJTcapCSGiven = TRUE;
169             break;
170         case BJT_MOD_VJS:
171             mods->BJTpotentialSubstrate = value->rValue;
172             mods->BJTpotentialSubstrateGiven = TRUE;
173             break;
174         case BJT_MOD_MJS:
175             mods->BJTexponentialSubstrate = value->rValue;
176             mods->BJTexponentialSubstrateGiven = TRUE;
177             break;
178         case BJT_MOD_XTB:
179             mods->BJTbetaExp = value->rValue;
180             mods->BJTbetaExpGiven = TRUE;
181             break;
182         case BJT_MOD_EG:
183             mods->BJTenergyGap = value->rValue;
184             mods->BJTenergyGapGiven = TRUE;
185             break;
186         case BJT_MOD_XTI:
187             mods->BJTtempExpIS = value->rValue;
188             mods->BJTtempExpISGiven = TRUE;
189             break;
190         case BJT_MOD_FC:
191             mods->BJTdepletionCapCoeff = value->rValue;
192             mods->BJTdepletionCapCoeffGiven = TRUE;
193             break;
194         case BJT_MOD_TNOM:
195             mods->BJTtnom = value->rValue+CONSTCtoK;
196             mods->BJTtnomGiven = TRUE;
197             break;
198         case BJT_MOD_KF:
199             mods->BJTfNcoef = value->rValue;
200             mods->BJTfNcoefGiven = TRUE;
201             break;
202         case BJT_MOD_AF:
203             mods->BJTfNexp = value->rValue;
204             mods->BJTfNexpGiven = TRUE;
205             break;
206         default:
207             return (E_BADPARM);
208     }
209     return (OK);
210 }
211