1 /********** 2 Imported from MacSpice3f4 - Antony Wilson 3 Modified: Paolo Nenzi 4 **********/ 5 6 #ifndef HFETA 7 #define HFETA 8 9 #include "ngspice/ifsim.h" 10 #include "ngspice/cktdefs.h" 11 #include "ngspice/gendefs.h" 12 #include "ngspice/complex.h" 13 #include "ngspice/noisedef.h" 14 15 typedef struct sHFETAinstance { 16 17 struct GENinstance gen; 18 19 #define HFETAmodPtr(inst) ((struct sHFETAmodel *)((inst)->gen.GENmodPtr)) 20 #define HFETAnextInstance(inst) ((struct sHFETAinstance *)((inst)->gen.GENnextInstance)) 21 #define HFETAname gen.GENname 22 #define HFETAstate gen.GENstate 23 24 const int HFETAdrainNode; 25 const int HFETAgateNode; 26 const int HFETAsourceNode; 27 int HFETAdrainPrimeNode; 28 int HFETAgatePrimeNode; 29 int HFETAsourcePrimeNode; 30 int HFETAdrainPrmPrmNode; 31 int HFETAsourcePrmPrmNode; 32 double HFETAlength; 33 double HFETAwidth; 34 double HFETAm; 35 double HFETAicVDS; 36 double HFETAicVGS; 37 double HFETAtemp; 38 double HFETAdtemp; 39 double HFETAtVto; 40 double HFETAtMu; 41 double HFETAtLambda; 42 double HFETAtLambdahf; 43 double *HFETAdrainDrainPrimePtr; 44 double *HFETAgatePrimeDrainPrimePtr; 45 double *HFETAgatePrimeSourcePrimePtr; 46 double *HFETAsourceSourcePrimePtr; 47 double *HFETAdrainPrimeDrainPtr; 48 double *HFETAdrainPrimeGatePrimePtr; 49 double *HFETAdrainPrimeSourcePrimePtr; 50 double *HFETAsourcePrimeGatePrimePtr; 51 double *HFETAsourcePrimeSourcePtr; 52 double *HFETAsourcePrimeDrainPrimePtr; 53 double *HFETAdrainDrainPtr; 54 double *HFETAgatePrimeGatePrimePtr; 55 double *HFETAsourceSourcePtr; 56 double *HFETAdrainPrimeDrainPrimePtr; 57 double *HFETAsourcePrimeSourcePrimePtr; 58 double *HFETAdrainPrmPrmDrainPrmPrmPtr; 59 double *HFETAdrainPrmPrmDrainPrimePtr; 60 double *HFETAdrainPrimeDrainPrmPrmPtr; 61 double *HFETAdrainPrmPrmGatePrimePtr; 62 double *HFETAgatePrimeDrainPrmPrmPtr; 63 double *HFETAsourcePrmPrmSourcePrmPrmPtr; 64 double *HFETAsourcePrmPrmSourcePrimePtr; 65 double *HFETAsourcePrimeSourcePrmPrmPtr; 66 double *HFETAsourcePrmPrmGatePrimePtr; 67 double *HFETAgatePrimeSourcePrmPrmPtr; 68 double *HFETAgateGatePtr; 69 double *HFETAgateGatePrimePtr; 70 double *HFETAgatePrimeGatePtr; 71 72 73 #define HFETAvgs HFETAstate 74 #define HFETAvgd HFETAstate+1 75 #define HFETAcg HFETAstate+2 76 #define HFETAcd HFETAstate+3 77 #define HFETAcgd HFETAstate+4 78 #define HFETAcgs HFETAstate+5 79 #define HFETAgm HFETAstate+6 80 #define HFETAgds HFETAstate+7 81 #define HFETAggs HFETAstate+8 82 #define HFETAggd HFETAstate+9 83 #define HFETAqgs HFETAstate+10 84 #define HFETAcqgs HFETAstate+11 85 #define HFETAqgd HFETAstate+12 86 #define HFETAcqgd HFETAstate+13 87 #define HFETAvgspp HFETAstate+14 88 #define HFETAggspp HFETAstate+15 89 #define HFETAcgspp HFETAstate+16 90 #define HFETAvgdpp HFETAstate+17 91 #define HFETAggdpp HFETAstate+18 92 #define HFETAcgdpp HFETAstate+19 93 #define HFETAqds HFETAstate+20 94 #define HFETAcqds HFETAstate+21 95 #define HFETAgmg HFETAstate+22 96 #define HFETAgmd HFETAstate+23 97 98 #define HFETAnumStates 24 99 100 101 102 int HFETAoff; 103 unsigned HFETAlengthGiven : 1; 104 unsigned HFETAwidthGiven : 1; 105 unsigned HFETAmGiven : 1; 106 unsigned HFETAicVDSGiven : 1; 107 unsigned HFETAicVGSGiven : 1; 108 unsigned HFETAtempGiven : 1; 109 unsigned HFETAdtempGiven : 1; 110 int HFETAmode; 111 112 double HFETAn0; 113 double HFETAn01; 114 double HFETAn02; 115 double HFETAgchi0; 116 double HFETAcf; 117 double HFETAis1d; 118 double HFETAis2d; 119 double HFETAis1s; 120 double HFETAis2s; 121 double HFETAiso; 122 double HFETAimax; 123 double HFETAvcrit; 124 double HFETAdelf; 125 double HFETAfgds; 126 double HFETAggrwl; 127 128 } HFETAinstance ; 129 130 131 /* per model data */ 132 133 typedef struct sHFETAmodel { 134 135 struct GENmodel gen; 136 137 #define HFETAmodType gen.GENmodType 138 #define HFETAnextModel(inst) ((struct sHFETAmodel *)((inst)->gen.GENnextModel)) 139 #define HFETAinstances(inst) ((HFETAinstance *)((inst)->gen.GENinstances)) 140 #define HFETAmodName gen.GENmodName 141 142 int HFETAtype; 143 int HFETAgatemod; 144 145 double HFETAthreshold; 146 double HFETAlambda; 147 double HFETAeta; 148 double HFETAm; 149 double HFETAmc; 150 double HFETAgamma; 151 double HFETAsigma0; 152 double HFETAvsigmat; 153 double HFETAvsigma; 154 double HFETAmu; 155 double HFETAdi; 156 double HFETAdelta; 157 double HFETAvs; 158 double HFETAnmax; 159 double HFETAdeltad; 160 double HFETAjs1d; 161 double HFETAjs2d; 162 double HFETAjs1s; 163 double HFETAjs2s; 164 double HFETAm1d; 165 double HFETAm2d; 166 double HFETAm1s; 167 double HFETAm2s; 168 double HFETArd; 169 double HFETArs; 170 double HFETArg; 171 double HFETArdi; 172 double HFETArsi; 173 double HFETArgs; 174 double HFETArgd; 175 double HFETAri; 176 double HFETArf; 177 double HFETAepsi; 178 double HFETAa1; 179 double HFETAa2; 180 double HFETAmv1; 181 double HFETAp; 182 double HFETAkappa; 183 double HFETAdelf; 184 double HFETAfgds; 185 double HFETAtf; 186 double HFETAcds; 187 double HFETAphib; 188 double HFETAtalpha; 189 double HFETAmt1; 190 double HFETAmt2; 191 double HFETAck1; 192 double HFETAck2; 193 double HFETAcm1; 194 double HFETAcm2; 195 double HFETAcm3; 196 double HFETAastar; 197 double HFETAeta1; 198 double HFETAd1; 199 double HFETAvt1; 200 double HFETAeta2; 201 double HFETAd2; 202 double HFETAvt2; 203 double HFETAggr; 204 double HFETAdel; 205 double HFETAklambda; 206 double HFETAkmu; 207 double HFETAkvto; 208 209 double HFETAdrainConduct; 210 double HFETAsourceConduct; 211 double HFETAgateConduct; 212 double HFETAgi; 213 double HFETAgf; 214 double HFETAdeltaSqr; 215 216 unsigned HFETAgatemodGiven:1; 217 unsigned HFETAthresholdGiven:1; 218 unsigned HFETAlambdaGiven:1; 219 unsigned HFETAetaGiven:1; 220 unsigned HFETAmGiven:1; 221 unsigned HFETAmcGiven:1; 222 unsigned HFETAgammaGiven:1; 223 unsigned HFETAsigma0Given:1; 224 unsigned HFETAvsigmatGiven:1; 225 unsigned HFETAvsigmaGiven:1; 226 unsigned HFETAmuGiven:1; 227 unsigned HFETAdiGiven:1; 228 unsigned HFETAdeltaGiven:1; 229 unsigned HFETAvsGiven:1; 230 unsigned HFETAnmaxGiven:1; 231 unsigned HFETAdeltadGiven:1; 232 unsigned HFETAjs1dGiven:1; 233 unsigned HFETAjs2dGiven:1; 234 unsigned HFETAjs1sGiven:1; 235 unsigned HFETAjs2sGiven:1; 236 unsigned HFETAm1dGiven:1; 237 unsigned HFETAm2dGiven:1; 238 unsigned HFETAm1sGiven:1; 239 unsigned HFETAm2sGiven:1; 240 unsigned HFETArdGiven:1; 241 unsigned HFETArsGiven:1; 242 unsigned HFETArgGiven:1; 243 unsigned HFETArdiGiven:1; 244 unsigned HFETArsiGiven:1; 245 unsigned HFETArgsGiven:1; 246 unsigned HFETArgdGiven:1; 247 unsigned HFETAriGiven:1; 248 unsigned HFETArfGiven:1; 249 unsigned HFETAepsiGiven:1; 250 unsigned HFETAa1Given:1; 251 unsigned HFETAa2Given:1; 252 unsigned HFETAmv1Given:1; 253 unsigned HFETApGiven:1; 254 unsigned HFETAkappaGiven:1; 255 unsigned HFETAdelfGiven:1; 256 unsigned HFETAfgdsGiven:1; 257 unsigned HFETAtfGiven:1; 258 unsigned HFETAcdsGiven:1; 259 unsigned HFETAphibGiven:1; 260 unsigned HFETAtalphaGiven:1; 261 unsigned HFETAmt1Given:1; 262 unsigned HFETAmt2Given:1; 263 unsigned HFETAck1Given:1; 264 unsigned HFETAck2Given:1; 265 unsigned HFETAcm1Given:1; 266 unsigned HFETAcm2Given:1; 267 unsigned HFETAcm3Given:1; 268 unsigned HFETAastarGiven:1; 269 unsigned HFETAeta1Given:1; 270 unsigned HFETAd1Given:1; 271 unsigned HFETAvt1Given:1; 272 unsigned HFETAeta2Given:1; 273 unsigned HFETAd2Given:1; 274 unsigned HFETAvt2Given:1; 275 unsigned HFETAggrGiven:1; 276 unsigned HFETAdelGiven:1; 277 unsigned HFETAklambdaGiven:1; 278 unsigned HFETAkmuGiven:1; 279 unsigned HFETAkvtoGiven:1; 280 281 } HFETAmodel; 282 283 #ifndef NHFET 284 #define NHFET 1 285 #define PHFET -1 286 #endif 287 288 /* device parameters */ 289 enum { 290 HFETA_LENGTH = 1, 291 HFETA_WIDTH, 292 HFETA_IC_VDS, 293 HFETA_IC_VGS, 294 HFETA_TEMP, 295 HFETA_IC, 296 HFETA_OFF, 297 HFETA_CS, 298 HFETA_POWER, 299 HFETA_DTEMP, 300 HFETA_M, 301 }; 302 303 /* model parameters */ 304 enum { 305 HFETA_MOD_VTO = 101, 306 HFETA_MOD_LAMBDA, 307 HFETA_MOD_RD, 308 HFETA_MOD_RS, 309 HFETA_MOD_RG, 310 HFETA_MOD_RGS, 311 HFETA_MOD_RGD, 312 HFETA_MOD_RI, 313 HFETA_MOD_RF, 314 HFETA_MOD_ETA, 315 HFETA_MOD_M, 316 HFETA_MOD_MC, 317 HFETA_MOD_GAMMA, 318 HFETA_MOD_SIGMA0, 319 HFETA_MOD_VSIGMAT, 320 HFETA_MOD_VSIGMA, 321 HFETA_MOD_MU, 322 HFETA_MOD_DI, 323 HFETA_MOD_DELTA, 324 HFETA_MOD_VS, 325 HFETA_MOD_NMAX, 326 HFETA_MOD_DELTAD, 327 HFETA_MOD_JS1D, 328 HFETA_MOD_JS2D, 329 HFETA_MOD_JS1S, 330 HFETA_MOD_JS2S, 331 HFETA_MOD_M1D, 332 HFETA_MOD_M2D, 333 HFETA_MOD_M1S, 334 HFETA_MOD_M2S, 335 }; 336 337 enum { 338 HFETA_MOD_EPSI = 132, 339 HFETA_MOD_RDI, 340 HFETA_MOD_RSI, 341 HFETA_MOD_A1, 342 HFETA_MOD_A2, 343 HFETA_MOD_MV1, 344 HFETA_MOD_P, 345 HFETA_MOD_KAPPA, 346 HFETA_MOD_DELF, 347 HFETA_MOD_FGDS, 348 HFETA_MOD_TF, 349 HFETA_MOD_CDS, 350 HFETA_MOD_PHIB, 351 HFETA_MOD_TALPHA, 352 HFETA_MOD_MT1, 353 HFETA_MOD_MT2, 354 HFETA_MOD_CK1, 355 HFETA_MOD_CK2, 356 HFETA_MOD_CM1, 357 HFETA_MOD_CM2, 358 HFETA_MOD_CM3, 359 HFETA_MOD_ASTAR, 360 HFETA_MOD_ETA1, 361 HFETA_MOD_D1, 362 HFETA_MOD_VT1, 363 HFETA_MOD_ETA2, 364 HFETA_MOD_D2, 365 HFETA_MOD_VT2, 366 HFETA_MOD_GGR, 367 HFETA_MOD_DEL, 368 HFETA_MOD_GATEMOD, 369 HFETA_MOD_KLAMBDA, 370 HFETA_MOD_KMU, 371 HFETA_MOD_KVTO, 372 HFETA_MOD_NHFET, 373 HFETA_MOD_PHFET, 374 HFETA_MOD_TYPE, 375 }; 376 377 /* device questions */ 378 379 enum { 380 HFETA_DRAINNODE = 201, 381 HFETA_GATENODE, 382 HFETA_SOURCENODE, 383 HFETA_DRAINPRIMENODE, 384 HFETA_SOURCEPRIMENODE, 385 HFETA_VGS, 386 HFETA_VGD, 387 HFETA_CG, 388 HFETA_CD, 389 HFETA_CGD, 390 HFETA_GM, 391 HFETA_GDS, 392 HFETA_GGS, 393 HFETA_GGD, 394 HFETA_QGS, 395 HFETA_CQGS, 396 HFETA_QGD, 397 HFETA_CQGD, 398 }; 399 400 /* model questions */ 401 402 enum { 403 HFETA_MOD_DRAINCONDUCT = 301, 404 HFETA_MOD_SOURCECONDUCT, 405 HFETA_MOD_DEPLETIONCAP, 406 HFETA_MOD_VCRIT, 407 }; 408 409 #define L (here->HFETAlength) 410 #define W (here->HFETAwidth) 411 #define VTO (model->HFETAthreshold) 412 #define LAMBDA (model->HFETAlambda) 413 #define RDI (model->HFETArdi) 414 #define RSI (model->HFETArsi) 415 #define RD (model->HFETArd) 416 #define RS (model->HFETArs) 417 #define RG (model->HFETArg) 418 #define RF (model->HFETArf) 419 #define RI (model->HFETAri) 420 #define RGS (model->HFETArgs) 421 #define RGD (model->HFETArgd) 422 #define ETA (model->HFETAeta) 423 #define M (model->HFETAm) 424 #define MC (model->HFETAmc) 425 #define GAMMA (model->HFETAgamma) 426 #define SIGMA0 (model->HFETAsigma0) 427 #define VSIGMAT (model->HFETAvsigmat) 428 #define VSIGMA (model->HFETAvsigma) 429 #define MU (model->HFETAmu) 430 #define DI (model->HFETAdi) 431 #define DELTAD (model->HFETAdeltad) 432 #define DELTASQR (model->HFETAdeltaSqr) 433 #define VS (model->HFETAvs) 434 #define NMAX (model->HFETAnmax) 435 #define EPSI (model->HFETAepsi) 436 #define JS1D (model->HFETAjs1d) 437 #define JS2D (model->HFETAjs2d) 438 #define JS1S (model->HFETAjs1s) 439 #define JS2S (model->HFETAjs2s) 440 #define M1D (model->HFETAm1d) 441 #define M2D (model->HFETAm2d) 442 #define M1S (model->HFETAm1s) 443 #define M2S (model->HFETAm2s) 444 #define ASTAR (model->HFETAastar) 445 #define PHIB (model->HFETAphib) 446 #define TALPHA (model->HFETAtalpha) 447 #define MT1 (model->HFETAmt1) 448 #define MT2 (model->HFETAmt2) 449 #define CK1 (model->HFETAck1) 450 #define CK2 (model->HFETAck2) 451 #define CM1 (model->HFETAcm1) 452 #define CM2 (model->HFETAcm2) 453 #define CM3 (model->HFETAcm3) 454 #define A1 (model->HFETAa1) 455 #define A2 (model->HFETAa2) 456 #define MV1 (model->HFETAmv1) 457 #define PM (model->HFETAp) 458 #define CDS (model->HFETAcds) 459 #define ETA1 (model->HFETAeta1) 460 #define D1 (model->HFETAd1) 461 #define IN_VT1 (model->HFETAvt1) /* VT1 was defined in termios.h */ 462 #define ETA2 (model->HFETAeta2) 463 #define D2 (model->HFETAd2) 464 #define VT2 (model->HFETAvt2) 465 #define GGR (model->HFETAggr) 466 #define DEL (model->HFETAdel) 467 #define KLAMBDA (model->HFETAklambda) 468 #define KMU (model->HFETAkmu) 469 #define KVTO (model->HFETAkvto) 470 471 #define GCHI0 (here->HFETAgchi0) 472 #define N0 (here->HFETAn0) 473 #define N01 (here->HFETAn01) 474 #define N02 (here->HFETAn02) 475 #define CF (here->HFETAcf) 476 #define IMAX (here->HFETAimax) 477 #define ISO (here->HFETAiso) 478 #define TEMP (here->HFETAtemp) 479 #define IS1D (here->HFETAis1d) 480 #define IS2D (here->HFETAis2d) 481 #define IS1S (here->HFETAis1s) 482 #define IS2S (here->HFETAis2s) 483 #define FGDS (here->HFETAfgds) 484 #define DELF (here->HFETAdelf) 485 #define GGRWL (here->HFETAggrwl) 486 #define TLAMBDA (here->HFETAtLambda) 487 #define TMU (here->HFETAtMu) 488 #define TVTO (here->HFETAtVto) 489 490 #include "hfetext.h" 491 492 #endif /*HFETA*/ 493