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)20BJTmAsk(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