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 1989 Takayasu Sakurai 6 1993 Stephen R. Whiteley 7 ****************************************************************************/ 8 9 #ifndef MOS 10 #define MOS 11 12 #include "devdefs.h" 13 14 /* declarations for analytical MOSFETs */ 15 16 /* information needed for each instance */ 17 18 typedef struct sMOSinstance { 19 struct sMOSmodel *MOSmodPtr; /* backpointer to model */ 20 struct sMOSinstance *MOSnextInstance; /* pointer to next instance of 21 * current model */ 22 IFuid MOSname; /* pointer to character string naming this instance */ 23 int MOSstates; /* index into state table for this device */ 24 25 int MOSdNode; /* number of the gate node of the mosfet */ 26 int MOSgNode; /* number of the gate node of the mosfet */ 27 int MOSsNode; /* number of the source node of the mosfet */ 28 int MOSbNode; /* number of the bulk node of the mosfet */ 29 int MOSdNodePrime; /* number of the internal drain node of the mosfet */ 30 int MOSsNodePrime; /* number of the internal source node of the mosfet */ 31 32 int MOSmode; /* device mode : 1 = normal, -1 = inverse */ 33 34 double MOSl; /* the length of the channel region */ 35 double MOSw; /* the width of the channel region */ 36 double MOSdrainArea; /* the area of the drain diffusion */ 37 double MOSsourceArea; /* the area of the source diffusion */ 38 double MOSdrainSquares; /* the length of the drain in squares */ 39 double MOSsourceSquares; /* the length of the source in squares */ 40 double MOSdrainPerimeter; 41 double MOSsourcePerimeter; 42 double MOSsourceConductance; /* conductance of source, set in setup */ 43 double MOSdrainConductance; /* conductance of drain, set in setup */ 44 double MOStemp; /* operating temperature of this instance */ 45 46 /* temperature corrected ... */ 47 double MOStTransconductance; /* transconductance */ 48 double MOStSurfMob; /* surface mobility */ 49 double MOStPhi; /* Phi */ 50 double MOStVto; /* Vto */ 51 double MOStSatCur; /* saturation Cur. */ 52 double MOStSatCurDens; /* saturation Cur. density*/ 53 double MOStCbd; /* B-D Capacitance */ 54 double MOStCbs; /* B-S Capacitance */ 55 double MOStCj; /* Bulk bottom Capacitance */ 56 double MOStCjsw; /* Bulk side Capacitance */ 57 double MOStBulkPot; /* Bulk potential */ 58 double MOStDepCap; /* transition point in the curve matching Fc*Vj */ 59 double MOStVbi; /* Vbi */ 60 double MOStDrainSatCur; 61 double MOStSourceSatCur; 62 63 double MOSicVBS; /* initial condition B-S voltage */ 64 double MOSicVDS; /* initial condition D-S voltage */ 65 double MOSicVGS; /* initial condition G-S voltage */ 66 double MOSvon; 67 double MOSvdsat; 68 double MOSsourceVcrit; /* vcrit for pos. vds */ 69 double MOSdrainVcrit; /* vcrit for neg. vds */ 70 double MOScd; 71 double MOScbs; 72 double MOScbd; 73 double MOSgmbs; 74 double MOSgm; 75 double MOSgds; 76 double MOSgbd; 77 double MOSgbs; 78 double MOScapbd; 79 double MOScapbs; 80 double MOSCbd; 81 double MOSCbdsw; 82 double MOSCbs; 83 double MOSCbssw; 84 double MOSf2d; 85 double MOSf3d; 86 double MOSf4d; 87 double MOSf2s; 88 double MOSf3s; 89 double MOSf4s; 90 91 double MOSeffectiveLength; 92 double MOSgateSourceOverlapCap; 93 double MOSgateDrainOverlapCap; 94 double MOSgateBulkOverlapCap; 95 double MOSbeta; 96 double MOSoxideCap; 97 98 double *MOSDdPtr; /* pointer to sparse matrix element at 99 * (Drain node,drain node) */ 100 double *MOSGgPtr; /* pointer to sparse matrix element at 101 * (gate node,gate node) */ 102 double *MOSSsPtr; /* pointer to sparse matrix element at 103 * (source node,source node) */ 104 double *MOSBbPtr; /* pointer to sparse matrix element at 105 * (bulk node,bulk node) */ 106 double *MOSDPdpPtr; /* pointer to sparse matrix element at 107 * (drain prime node,drain prime node) */ 108 double *MOSSPspPtr; /* pointer to sparse matrix element at 109 * (source prime node,source prime node) */ 110 double *MOSDdpPtr; /* pointer to sparse matrix element at 111 * (drain node,drain prime node) */ 112 double *MOSGbPtr; /* pointer to sparse matrix element at 113 * (gate node,bulk node) */ 114 double *MOSGdpPtr; /* pointer to sparse matrix element at 115 * (gate node,drain prime node) */ 116 double *MOSGspPtr; /* pointer to sparse matrix element at 117 * (gate node,source prime node) */ 118 double *MOSSspPtr; /* pointer to sparse matrix element at 119 * (source node,source prime node) */ 120 double *MOSBdpPtr; /* pointer to sparse matrix element at 121 * (bulk node,drain prime node) */ 122 double *MOSBspPtr; /* pointer to sparse matrix element at 123 * (bulk node,source prime node) */ 124 double *MOSDPspPtr; /* pointer to sparse matrix element at 125 * (drain prime node,source prime node) */ 126 double *MOSDPdPtr; /* pointer to sparse matrix element at 127 * (drain prime node,drain node) */ 128 double *MOSBgPtr; /* pointer to sparse matrix element at 129 * (bulk node,gate node) */ 130 double *MOSDPgPtr; /* pointer to sparse matrix element at 131 * (drain prime node,gate node) */ 132 133 double *MOSSPgPtr; /* pointer to sparse matrix element at 134 * (source prime node,gate node) */ 135 double *MOSSPsPtr; /* pointer to sparse matrix element at 136 * (source prime node,source node) */ 137 double *MOSDPbPtr; /* pointer to sparse matrix element at 138 * (drain prime node,bulk node) */ 139 double *MOSSPbPtr; /* pointer to sparse matrix element at 140 * (source prime node,bulk node) */ 141 double *MOSSPdpPtr; /* pointer to sparse matrix element at 142 * (source prime node,drain prime node) */ 143 144 /* distortion stuff */ 145 /* 146 * naming convention: 147 * x = vgs 148 * y = vbs 149 * z = vds 150 * cdr = cdrain 151 */ 152 153 154 #define MOSNDCOEFFS 30 155 156 #ifndef NODISTO 157 double MOSdCoeffs[MOSNDCOEFFS]; 158 #else /* NODISTO */ 159 double *MOSdCoeffs; 160 #endif /* NODISTO */ 161 162 #ifndef CONFIG 163 164 #define capbs2 MOSdCoeffs[0] 165 #define capbs3 MOSdCoeffs[1] 166 #define capbd2 MOSdCoeffs[2] 167 #define capbd3 MOSdCoeffs[3] 168 #define gbs2 MOSdCoeffs[4] 169 #define gbs3 MOSdCoeffs[5] 170 #define gbd2 MOSdCoeffs[6] 171 #define gbd3 MOSdCoeffs[7] 172 #define capgb2 MOSdCoeffs[8] 173 #define capgb3 MOSdCoeffs[9] 174 #define cdr_x2 MOSdCoeffs[10] 175 #define cdr_y2 MOSdCoeffs[11] 176 #define cdr_z2 MOSdCoeffs[12] 177 #define cdr_xy MOSdCoeffs[13] 178 #define cdr_yz MOSdCoeffs[14] 179 #define cdr_xz MOSdCoeffs[15] 180 #define cdr_x3 MOSdCoeffs[16] 181 #define cdr_y3 MOSdCoeffs[17] 182 #define cdr_z3 MOSdCoeffs[18] 183 #define cdr_x2z MOSdCoeffs[19] 184 #define cdr_x2y MOSdCoeffs[20] 185 #define cdr_y2z MOSdCoeffs[21] 186 #define cdr_xy2 MOSdCoeffs[22] 187 #define cdr_xz2 MOSdCoeffs[23] 188 #define cdr_yz2 MOSdCoeffs[24] 189 #define cdr_xyz MOSdCoeffs[25] 190 #define capgs2 MOSdCoeffs[26] 191 #define capgs3 MOSdCoeffs[27] 192 #define capgd2 MOSdCoeffs[28] 193 #define capgd3 MOSdCoeffs[29] 194 195 #endif 196 197 /* end distortion coeffs. */ 198 199 /* indices to the array of MOSFET(3) noise sources */ 200 201 #define MOSRDNOIZ 0 202 #define MOSRSNOIZ 1 203 #define MOSIDNOIZ 2 204 #define MOSFLNOIZ 3 205 #define MOSTOTNOIZ 4 206 207 #define MOSNSRCS 5 /* the number of MOSFET(3) noise sources */ 208 209 #ifndef NONOISE 210 double MOSnVar[NSTATVARS][MOSNSRCS]; 211 #else /* NONOISE */ 212 double **MOSnVar; 213 #endif /* NONOISE */ 214 215 unsigned MOSoff :1; /* device is off for dc analysis */ 216 unsigned MOStempGiven :1; /* instance temperature specified */ 217 unsigned MOSlGiven :1; 218 unsigned MOSwGiven :1; 219 unsigned MOSdrainAreaGiven :1; 220 unsigned MOSsourceAreaGiven :1; 221 unsigned MOSdrainSquaresGiven :1; 222 unsigned MOSsourceSquaresGiven :1; 223 unsigned MOSdrainPerimeterGiven :1; 224 unsigned MOSsourcePerimeterGiven :1; 225 unsigned MOSdNodePrimeSet :1; 226 unsigned MOSsNodePrimeSet :1; 227 unsigned MOSicVBSGiven :1; 228 unsigned MOSicVDSGiven :1; 229 unsigned MOSicVGSGiven :1; 230 unsigned MOSvonGiven :1; 231 unsigned MOSvdsatGiven :1; 232 unsigned MOSmodeGiven :1; 233 234 } MOSinstance ; 235 236 #define MOSvbd MOSstates 237 #define MOSvbs MOSstates + 1 238 #define MOSvgs MOSstates + 2 239 #define MOSvds MOSstates + 3 240 241 /* meyer capacitances */ 242 #define MOScapgs MOSstates + 4 /* gate-source capacitor value */ 243 #define MOSqgs MOSstates + 5 /* gate-source capacitor charge */ 244 #define MOScqgs MOSstates + 6 /* gate-source capacitor current */ 245 246 #define MOScapgd MOSstates + 7 /* gate-drain capacitor value */ 247 #define MOSqgd MOSstates + 8 /* gate-drain capacitor charge */ 248 #define MOScqgd MOSstates + 9 /* gate-drain capacitor current */ 249 250 #define MOScapgb MOSstates + 10 /* gate-bulk capacitor value */ 251 #define MOSqgb MOSstates + 11 /* gate-bulk capacitor charge */ 252 #define MOScqgb MOSstates + 12 /* gate-bulk capacitor current */ 253 254 /* diode capacitances */ 255 #define MOSqbd MOSstates + 13 /* bulk-drain capacitor charge */ 256 #define MOScqbd MOSstates + 14 /* bulk-drain capacitor current */ 257 258 #define MOSqbs MOSstates + 15 /* bulk-source capacitor charge */ 259 #define MOScqbs MOSstates + 16 /* bulk-source capacitor current */ 260 261 #define MOSnumStates 17 262 263 264 /* per model data */ 265 266 /* NOTE: parameters marked 'input - use xxxx' are paramters for 267 * which a temperature correction is applied in MOStemp, thus 268 * the MOSxxxx value in the per-instance structure should be used 269 * instead in all calculations 270 */ 271 272 typedef struct sMOSmodel { /* model structure for a resistor */ 273 int MOSmodType; /* type index of this device type */ 274 struct sMOSmodel *MOSnextModel; /* pointer to next possible model 275 * in linked list */ 276 MOSinstance * MOSinstances; /* pointer to list of instances 277 * that have this model */ 278 IFuid MOSmodName; /* pointer to character string naming this model */ 279 int MOStype; /* device type : 1 = nmos, -1 = pmos */ 280 int MOSlevel; /* UCB model complexity level, 1-3 */ 281 int MOSgateType; 282 double MOSoxideCapFactor; 283 double MOStnom; /* temperature at which parameters measured */ 284 double MOSvt0; /* input - use tVto */ 285 double MOStransconductance; /* input - use tTransconductance */ 286 double MOSgamma; 287 double MOSphi; /* input - use tPhi */ 288 double MOSdrainResistance; 289 double MOSsourceResistance; 290 double MOScapBD; /* input - use tCbs */ 291 double MOScapBS; /* input - use tCbd */ 292 double MOSjctSatCur; /* input - use tSatCur instead */ 293 double MOSbulkJctPotential; /* input - use tBulkPot */ 294 double MOSgateSourceOverlapCapFactor; 295 double MOSgateDrainOverlapCapFactor; 296 double MOSgateBulkOverlapCapFactor; 297 double MOSbulkCapFactor; /* input - use tCj */ 298 double MOSbulkJctBotGradingCoeff; 299 double MOSsideWallCapFactor; /* input - use tCjsw */ 300 double MOSbulkJctSideGradingCoeff; 301 double MOSjctSatCurDensity; /* input - use tSatCurDens*/ 302 double MOSoxideThickness; 303 double MOSlatDiff; 304 double MOSsheetResistance; 305 double MOSsurfaceMobility; /* input - use tSurfMob */ 306 double MOSfwdCapDepCoeff; 307 double MOSsurfaceStateDensity; 308 double MOSsubstrateDoping; 309 double MOSfNcoef; 310 double MOSfNexp; 311 312 /* levels 1,2 and 6 */ 313 double MOSlambda; 314 315 /* level 2 */ 316 double MOScritFieldExp; /* uexp */ 317 double MOSchannelCharge; /* neff */ 318 double MOScritField; /* ucrit */ 319 320 /* levels 2 and 3 */ 321 double MOSfastSurfaceStateDensity; /* nfs */ 322 double MOSnarrowFactor; /* delta */ 323 double MOSmaxDriftVel; /* vmax */ 324 double MOSjunctionDepth; 325 double MOSxd; 326 327 /* level 3 */ 328 double MOSeta; 329 double MOStheta; /* theta */ 330 double MOSkappa; /* kappa */ 331 double MOSdelta; /* input delta */ 332 double MOSalpha; /* alpha */ 333 334 /* level 6 */ 335 double MOSkv; /* input - use tKv */ 336 double MOSnv; /* drain linear conductance factor*/ 337 double MOSkc; /* input - use tKc */ 338 double MOSnc; /* saturation current coeff.*/ 339 double MOSgamma1; /* secondary back-gate effect parametr */ 340 double MOSsigma; 341 double MOSlamda0; 342 double MOSlamda1; 343 344 /* level 8, CryoMOS by Luong Huynh 1/19/95 */ 345 double MOSa1; 346 double MOSa2; 347 double MOSk1; 348 double MOSk2; 349 double MOSk3; 350 double MOSk4; 351 double MOSpclm; 352 double MOSem; 353 354 unsigned MOStypeGiven :1; 355 unsigned MOSgateTypeGiven :1; 356 unsigned MOSlevelGiven :1; 357 unsigned MOStnomGiven :1; 358 unsigned MOSvt0Given :1; 359 unsigned MOStransconductanceGiven :1; 360 unsigned MOSgammaGiven :1; 361 unsigned MOSphiGiven :1; 362 unsigned MOSdrainResistanceGiven :1; 363 unsigned MOSsourceResistanceGiven :1; 364 unsigned MOScapBDGiven :1; 365 unsigned MOScapBSGiven :1; 366 unsigned MOSjctSatCurGiven :1; 367 unsigned MOSbulkJctPotentialGiven :1; 368 unsigned MOSgateSourceOverlapCapFactorGiven :1; 369 unsigned MOSgateDrainOverlapCapFactorGiven :1; 370 unsigned MOSgateBulkOverlapCapFactorGiven :1; 371 unsigned MOSbulkCapFactorGiven :1; 372 unsigned MOSbulkJctBotGradingCoeffGiven :1; 373 unsigned MOSsideWallCapFactorGiven :1; 374 unsigned MOSbulkJctSideGradingCoeffGiven :1; 375 unsigned MOSjctSatCurDensityGiven :1; 376 unsigned MOSoxideThicknessGiven :1; 377 unsigned MOSlatDiffGiven :1; 378 unsigned MOSsheetResistanceGiven :1; 379 unsigned MOSsurfaceMobilityGiven :1; 380 unsigned MOSfwdCapDepCoeffGiven :1; 381 unsigned MOSsurfaceStateDensityGiven :1; 382 unsigned MOSsubstrateDopingGiven :1; 383 unsigned MOSfNcoefGiven :1; 384 unsigned MOSfNexpGiven :1; 385 386 /* levels 1,2, and 6 */ 387 unsigned MOSlambdaGiven :1; 388 389 /* level 2 */ 390 unsigned MOScritFieldExpGiven :1; /* uexp */ 391 unsigned MOSchannelChargeGiven :1; /* neff */ 392 unsigned MOScritFieldGiven :1; /* ucrit */ 393 394 /* levels 2 and 3 */ 395 unsigned MOSfastSurfaceStateDensityGiven :1; /* nfs */ 396 unsigned MOSnarrowFactorGiven :1; /* delta */ 397 unsigned MOSmaxDriftVelGiven :1; /* vmax */ 398 unsigned MOSjunctionDepthGiven :1; 399 400 /* level 3 */ 401 unsigned MOSetaGiven :1; 402 unsigned MOSthetaGiven :1; /* theta */ 403 unsigned MOSkappaGiven :1; /* kappa */ 404 unsigned MOSdeltaGiven :1; /* delta */ 405 406 /* level 6 */ 407 unsigned MOSkvGiven :1; 408 unsigned MOSnvGiven :1; 409 unsigned MOSkcGiven :1; 410 unsigned MOSncGiven :1; 411 unsigned MOSgamma1Given :1; 412 unsigned MOSsigmaGiven :1; 413 unsigned MOSlamda0Given :1; 414 unsigned MOSlamda1Given :1; 415 416 /* level 8, CryoMOS by Luong Huynh 1/19/95 */ 417 unsigned MOSa1Given :1; 418 unsigned MOSa2Given :1; 419 unsigned MOSk1Given :1; 420 unsigned MOSk2Given :1; 421 unsigned MOSk3Given :1; 422 unsigned MOSk4Given :1; 423 unsigned MOSpclmGiven :1; 424 unsigned MOSemGiven :1; 425 426 } MOSmodel; 427 428 #ifndef NMOS 429 #define NMOS 1 430 #define PMOS -1 431 #endif /*NMOS*/ 432 433 /* device parameters */ 434 #define MOS_TEMP 1 435 #define MOS_L 2 436 #define MOS_W 3 437 #define MOS_AD 4 438 #define MOS_AS 5 439 #define MOS_PD 6 440 #define MOS_PS 7 441 #define MOS_NRD 8 442 #define MOS_NRS 9 443 #define MOS_OFF 10 444 #define MOS_IC_VDS 11 445 #define MOS_IC_VGS 12 446 #define MOS_IC_VBS 13 447 #define MOS_IC 14 448 #define MOS_CGD 15 449 #define MOS_CGS 16 450 #define MOS_DNODE 17 451 #define MOS_GNODE 18 452 #define MOS_SNODE 19 453 #define MOS_BNODE 20 454 #define MOS_DNODEPRIME 21 455 #define MOS_SNODEPRIME 22 456 #define MOS_DRAINCONDUCT 23 457 #define MOS_SOURCECONDUCT 24 458 #define MOS_VON 25 459 #define MOS_VDSAT 26 460 #define MOS_DRAINVCRIT 27 461 #define MOS_SOURCEVCRIT 28 462 #define MOS_CD 29 463 #define MOS_CBD 30 464 #define MOS_CBS 31 465 #define MOS_GMBS 32 466 #define MOS_GM 33 467 #define MOS_GDS 34 468 #define MOS_GBD 35 469 #define MOS_GBS 36 470 #define MOS_CAPBD 37 471 #define MOS_CAPBS 38 472 #define MOS_CAPZEROBIASBD 39 473 #define MOS_CAPZEROBIASBDSW 40 474 #define MOS_CAPZEROBIASBS 41 475 #define MOS_CAPZEROBIASBSSW 42 476 #define MOS_VBD 43 477 #define MOS_VBS 44 478 #define MOS_VGS 45 479 #define MOS_VDS 46 480 #define MOS_CAPGD 47 481 #define MOS_QGD 48 482 #define MOS_CQGD 49 483 #define MOS_CAPGS 50 484 #define MOS_QGS 51 485 #define MOS_CQGS 52 486 #define MOS_CAPGB 53 487 #define MOS_QGB 54 488 #define MOS_CQGB 55 489 #define MOS_QBD 56 490 #define MOS_CQBD 57 491 #define MOS_QBS 58 492 #define MOS_CQBS 59 493 #define MOS_CG 60 494 #define MOS_CS 61 495 #define MOS_CB 62 496 #define MOS_POWER 63 497 #define MOS_DRAINRESIST 64 498 #define MOS_SOURCERESIST 65 499 500 /* model parameters */ 501 #define MOS_MOD_TYPE 100 502 #define MOS_MOD_LEVEL 101 503 #define MOS_MOD_TNOM 102 504 #define MOS_MOD_VTO 103 505 #define MOS_MOD_KP 104 506 #define MOS_MOD_GAMMA 105 507 #define MOS_MOD_PHI 106 508 #define MOS_MOD_RD 107 509 #define MOS_MOD_RS 108 510 #define MOS_MOD_CBD 109 511 #define MOS_MOD_CBS 110 512 #define MOS_MOD_IS 111 513 #define MOS_MOD_PB 112 514 #define MOS_MOD_CGSO 113 515 #define MOS_MOD_CGDO 114 516 #define MOS_MOD_CGBO 115 517 #define MOS_MOD_CJ 116 518 #define MOS_MOD_MJ 117 519 #define MOS_MOD_CJSW 118 520 #define MOS_MOD_MJSW 119 521 #define MOS_MOD_JS 120 522 #define MOS_MOD_TOX 121 523 #define MOS_MOD_LD 122 524 #define MOS_MOD_RSH 123 525 #define MOS_MOD_U0 124 526 #define MOS_MOD_FC 125 527 #define MOS_MOD_NSS 126 528 #define MOS_MOD_NSUB 127 529 #define MOS_MOD_TPG 128 530 #define MOS_MOD_NMOS 129 531 #define MOS_MOD_PMOS 130 532 #define MOS_MOD_KF 131 533 #define MOS_MOD_AF 132 534 #define MOS_MOD_LAMBDA 133 535 #define MOS_MOD_UEXP 134 536 #define MOS_MOD_NEFF 135 537 #define MOS_MOD_UCRIT 136 538 #define MOS_MOD_NFS 137 539 #define MOS_MOD_DELTA 138 540 #define MOS_MOD_VMAX 139 541 #define MOS_MOD_XJ 140 542 #define MOS_MOD_ETA 141 543 #define MOS_MOD_THETA 142 544 #define MOS_MOD_ALPHA 143 545 #define MOS_MOD_KAPPA 144 546 #define MOS_MOD_XD 145 547 #define MOS_DELTA 146 548 #define MOS_MOD_KV 147 549 #define MOS_MOD_NV 148 550 #define MOS_MOD_KC 149 551 #define MOS_MOD_NC 150 552 #define MOS_MOD_GAMMA1 151 553 #define MOS_MOD_SIGMA 152 554 #define MOS_MOD_LAMDA0 153 555 #define MOS_MOD_LAMDA1 154 556 /* level 8, CryoMOS by Luong Huynh, 1/19/95 */ 557 #define MOS_MOD_A1 155 558 #define MOS_MOD_A2 156 559 #define MOS_MOD_K1 157 560 #define MOS_MOD_K2 158 561 #define MOS_MOD_K3 159 562 #define MOS_MOD_K4 160 563 #define MOS_MOD_PCLM 161 564 #define MOS_MOD_EM 162 565 566 567 #ifdef __STDC__ 568 569 extern int MOSacLoad(GENmodel*,CKTcircuit*); 570 extern int MOSask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); 571 extern int MOSconvTest(GENmodel*,CKTcircuit*); 572 extern int MOSdisto(int,GENmodel*,CKTcircuit*); 573 extern int MOSgetic(GENmodel*,CKTcircuit*); 574 extern int MOSload(GENmodel*,CKTcircuit*); 575 extern int MOSmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); 576 extern int MOSmParam(int,IFvalue*,GENmodel*); 577 extern int MOSnoise(int,int,GENmodel*,CKTcircuit*,GENERIC*,double*); 578 extern int MOSparam(CKTcircuit*,int,IFvalue*,GENinstance*,IFvalue*); 579 extern int MOSpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); 580 extern int MOSsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); 581 extern int MOStemp(GENmodel*,CKTcircuit*); 582 extern int MOStrunc(GENmodel*,CKTcircuit*,double*); 583 584 #else /* stdc */ 585 586 extern int MOSacLoad(); 587 extern int MOSask(); 588 extern int MOSconvTest(); 589 extern int MOSdisto(); 590 extern int MOSgetic(); 591 extern int MOSload(); 592 extern int MOSmAsk(); 593 extern int MOSmParam(); 594 extern int MOSnoise(); 595 extern int MOSparam(); 596 extern int MOSpzLoad(); 597 extern int MOSsetup(); 598 extern int MOStemp(); 599 extern int MOStrunc(); 600 601 #endif /* stdc */ 602 603 604 /* store some things to pass to functions */ 605 struct mosstuff { 606 double ms_vt; 607 double ms_von; 608 double ms_vdsat; 609 double ms_vgs; 610 double ms_vds; 611 double ms_vbs; 612 double ms_vbd; 613 double ms_vgb; 614 double ms_vgd; 615 double ms_ceqgs; 616 double ms_ceqgd; 617 double ms_ceqgb; 618 double ms_cdrain; 619 double ms_gcgs; 620 double ms_gcgd; 621 double ms_gcgb; 622 double ms_capgs; 623 double ms_capgd; 624 double ms_capgb; 625 }; 626 627 /* semi-private functions... */ 628 #ifdef __STDC__ 629 extern void MOSfd(MOSmodel*,MOSinstance*); 630 extern void MOSfs(MOSmodel*,MOSinstance*); 631 extern double MOSeq1(MOSmodel*,MOSinstance*,struct mosstuff*); 632 extern double MOSeq2(MOSmodel*,MOSinstance*,struct mosstuff*); 633 extern double MOSeq3(MOSmodel*,MOSinstance*,struct mosstuff*); 634 extern double MOSeq6(MOSmodel*,MOSinstance*,struct mosstuff*); 635 /* level 8, CryoMOS by Luong Huynh 1/19/95 */ 636 extern double cryoMOSeq(MOSmodel*,MOSinstance*,struct mosstuff*); 637 /**/ 638 #else 639 extern void MOSfd(); 640 extern void MOSfs(); 641 extern double MOSeq1(); 642 extern double MOSeq2(); 643 extern double MOSeq3(); 644 extern double MOSeq6(); 645 /* level 8, CryoMOS by Luong Huynh 1/19/95 */ 646 extern double cryoMOSeq(); 647 /**/ 648 #endif 649 650 /* ...and a macro */ 651 #define SARGS(arg,bot,side,sarg,sargsw) { \ 652 if(bot==side) \ 653 { if(bot==.5) sarg=sargsw=1/sqrt(arg); \ 654 else sarg=sargsw=exp(-bot*log(arg)); } \ 655 else \ 656 { if(bot==.5) sarg=1/sqrt(arg); \ 657 else sarg=exp(-bot*log(arg)); \ 658 if(side==.5) sargsw=1/sqrt(arg); \ 659 else sargsw=exp(-side*log(arg)); } \ 660 } 661 662 #endif /*MOS*/ 663