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