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)22BJTmParam(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