1 /**********
2 Based on jfetdefs.h
3 Copyright 1990 Regents of the University of California.  All rights reserved.
4 Author: 1985 Thomas L. Quarles
5 
6 Modified to add PS model and new parameter definitions ( Anthony E. Parker )
7    Copyright 1994  Macquarie University, Sydney Australia.
8    10 Feb 1994: Added xiwoo, d3 and alpha to JFET2instance
9                 JFET2pave, JFET2vtrap ad JFET2_STATE_COUNT
10                 Changed model to call jfetparm.h, added JFET2za to model struct
11                 Defined JFET2_VTRAP and JFET2_PAVE
12 **********/
13 
14 #ifndef JFET2
15 #define JFET2
16 
17 #include "ngspice/ifsim.h"
18 #include "ngspice/gendefs.h"
19 #include "ngspice/cktdefs.h"
20 #include "ngspice/complex.h"
21 #include "ngspice/noisedef.h"
22 
23     /* structures used to describe Junction Field Effect Transistors */
24 
25 /* indices to an array of JFET2 noise sources */
26 
27 enum {
28     JFET2RDNOIZ = 0,
29     JFET2RSNOIZ,
30     JFET2IDNOIZ,
31     JFET2FLNOIZ,
32     JFET2TOTNOIZ,
33     /* finally, the number of noise sources */
34     JFET2NSRCS
35 };
36 
37 /* information used to describe a single instance */
38 
39 typedef struct sJFET2instance {
40 
41     struct GENinstance gen;
42 
43 #define JFET2modPtr(inst) ((struct sJFET2model *)((inst)->gen.GENmodPtr))
44 #define JFET2nextInstance(inst) ((struct sJFET2instance *)((inst)->gen.GENnextInstance))
45 #define JFET2name gen.GENname
46 #define JFET2state gen.GENstate
47 
48     const int JFET2drainNode;  /* number of drain node of jfet */
49     const int JFET2gateNode;   /* number of gate node of jfet */
50     const int JFET2sourceNode; /* number of source node of jfet */
51     int JFET2drainPrimeNode; /* number of internal drain node of jfet */
52     int JFET2sourcePrimeNode;    /* number of internal source node of jfet */
53 
54     double *JFET2drainDrainPrimePtr; /* pointer to sparse matrix at
55                                      * (drain,drain prime) */
56     double *JFET2gateDrainPrimePtr;  /* pointer to sparse matrix at
57                                      * (gate,drain prime) */
58     double *JFET2gateSourcePrimePtr; /* pointer to sparse matrix at
59                                      * (gate,source prime) */
60     double *JFET2sourceSourcePrimePtr;   /* pointer to sparse matrix at
61                                          * (source,source prime) */
62     double *JFET2drainPrimeDrainPtr; /* pointer to sparse matrix at
63                                      * (drain prime,drain) */
64     double *JFET2drainPrimeGatePtr;  /* pointer to sparse matrix at
65                                      * (drain prime,gate) */
66     double *JFET2drainPrimeSourcePrimePtr;   /* pointer to sparse matrix
67                                              * (drain prime,source prime) */
68     double *JFET2sourcePrimeGatePtr; /* pointer to sparse matrix at
69                                      * (source prime,gate) */
70     double *JFET2sourcePrimeSourcePtr;   /* pointer to sparse matrix at
71                                          * (source prime,source) */
72     double *JFET2sourcePrimeDrainPrimePtr;   /* pointer to sparse matrix
73                                              * (source prime,drain prime) */
74     double *JFET2drainDrainPtr;  /* pointer to sparse matrix at
75                                  * (drain,drain) */
76     double *JFET2gateGatePtr;    /* pointer to sparse matrix at
77                                  * (gate,gate) */
78     double *JFET2sourceSourcePtr;    /* pointer to sparse matrix at
79                                      * (source,source) */
80     double *JFET2drainPrimeDrainPrimePtr;    /* pointer to sparse matrix
81                                              * (drain prime,drain prime) */
82     double *JFET2sourcePrimeSourcePrimePtr;  /* pointer to sparse matrix
83                                              * (source prime,source prime) */
84 
85 	int JFET2mode;
86 	/* distortion analysis Taylor coeffs. */
87 
88 /*
89  * naming convention:
90  * x = vgs
91  * y = vds
92  * cdr = cdrain
93  */
94 
95 #define JFET2NDCOEFFS	21
96 
97 #ifndef NODISTO
98 	double JFET2dCoeffs[JFET2NDCOEFFS];
99 #else /* NODISTO */
100 	double *JFET2dCoeffs;
101 #endif /* NODISTO */
102 
103 #ifndef CONFIG
104 
105 #define	cdr_x		JFET2dCoeffs[0]
106 #define	cdr_y		JFET2dCoeffs[1]
107 #define	cdr_x2		JFET2dCoeffs[2]
108 #define	cdr_y2		JFET2dCoeffs[3]
109 #define	cdr_xy		JFET2dCoeffs[4]
110 #define	cdr_x3		JFET2dCoeffs[5]
111 #define	cdr_y3		JFET2dCoeffs[6]
112 #define	cdr_x2y		JFET2dCoeffs[7]
113 #define	cdr_xy2		JFET2dCoeffs[8]
114 
115 #define	ggs1		JFET2dCoeffs[9]
116 #define	ggd1		JFET2dCoeffs[10]
117 #define	ggs2		JFET2dCoeffs[11]
118 #define	ggd2		JFET2dCoeffs[12]
119 #define	ggs3		JFET2dCoeffs[13]
120 #define	ggd3		JFET2dCoeffs[14]
121 #define	capgs1		JFET2dCoeffs[15]
122 #define	capgd1		JFET2dCoeffs[16]
123 #define	capgs2		JFET2dCoeffs[17]
124 #define	capgd2		JFET2dCoeffs[18]
125 #define	capgs3		JFET2dCoeffs[19]
126 #define	capgd3		JFET2dCoeffs[20]
127 
128 #endif
129 
130 #ifndef NONOISE
131     double JFET2nVar[NSTATVARS][JFET2NSRCS];
132 #else /* NONOISE */
133 	double **JFET2nVar;
134 #endif /* NONOISE */
135 
136     unsigned JFET2off :1;            /* 'off' flag for jfet */
137     unsigned JFET2areaGiven  : 1;    /* flag to indicate area was specified */
138     unsigned JFET2mGiven     : 1;    /* flag to indicate multiplier given */
139     unsigned JFET2icVDSGiven : 1;    /* initial condition given flag for V D-S*/
140     unsigned JFET2icVGSGiven : 1;    /* initial condition given flag for V G-S*/
141     unsigned JFET2tempGiven  : 1;    /* flag to indicate instance temp given */
142     unsigned JFET2dtempGiven : 1;    /* flag to indicate temperature difference given */
143 
144 
145     double JFET2area;    /* area factor for the jfet */
146     double JFET2m;       /* parallel multiplier for the diode */
147     double JFET2icVDS;   /* initial condition voltage D-S*/
148     double JFET2icVGS;   /* initial condition voltage G-S*/
149     double JFET2temp;    /* operating temperature */
150     double JFET2dtemp;   /* Instance temperature difference */
151     double JFET2tSatCur; /* temperature adjusted saturation current */
152     double JFET2tGatePot;    /* temperature adjusted gate potential */
153     double JFET2tCGS;    /* temperature corrected G-S capacitance */
154     double JFET2tCGD;    /* temperature corrected G-D capacitance */
155     double JFET2corDepCap;   /* joining point of the fwd bias dep. cap eq.s */
156     double JFET2vcrit;   /* critical voltage for the instance */
157     double JFET2f1;      /* coefficient of capacitance polynomial exp */
158     double JFET2xiwoo;       /* velocity saturation potential */
159     double JFET2d3;          /* Dual Power-law parameter */
160     double JFET2alpha;       /* capacitance model transition parameter */
161 
162 } JFET2instance ;
163 
164 #define JFET2vgs      JFET2state
165 #define JFET2vgd      JFET2state+1
166 #define JFET2cg       JFET2state+2
167 #define JFET2cd       JFET2state+3
168 #define JFET2cgd      JFET2state+4
169 #define JFET2gm       JFET2state+5
170 #define JFET2gds      JFET2state+6
171 #define JFET2ggs      JFET2state+7
172 #define JFET2ggd      JFET2state+8
173 #define JFET2qgs      JFET2state+9
174 #define JFET2cqgs     JFET2state+10
175 #define JFET2qgd      JFET2state+11
176 #define JFET2cqgd     JFET2state+12
177 #define JFET2qds      JFET2state+13
178 #define JFET2cqds     JFET2state+14
179 #define JFET2pave     JFET2state+15
180 #define JFET2vtrap    JFET2state+16
181 #define JFET2vgstrap  JFET2state+17
182 #define JFET2unknown  JFET2state+18
183 
184 #define JFET2numStates 19
185 
186 /* per model data */
187 
188 typedef struct sJFET2model {       /* model structure for a jfet */
189 
190     struct GENmodel gen;
191 
192 #define JFET2modType gen.GENmodType
193 #define JFET2nextModel(inst) ((struct sJFET2model *)((inst)->gen.GENnextModel))
194 #define JFET2instances(inst) ((JFET2instance *)((inst)->gen.GENinstances))
195 #define JFET2modName gen.GENmodName
196 
197     int JFET2type;
198 
199 #define  PARAM(code,id,flag,ref,default,descrip) double ref;
200 #include "jfet2parm.h"
201 
202     double JFET2drainConduct;
203     double JFET2sourceConduct;
204     double JFET2f2;
205     double JFET2f3;
206     double JFET2za;      /* saturation index parameter */
207     double JFET2tnom;    /* temperature at which parameters were measured */
208 
209 #define  PARAM(code,id,flag,ref,default,descrip) unsigned flag : 1;
210 #include "jfet2parm.h"
211     unsigned JFET2tnomGiven : 1; /* user specified Tnom for model */
212 
213 } JFET2model;
214 
215 #ifndef NJF
216 
217 #define NJF 1
218 #define PJF -1
219 
220 #endif /*NJF*/
221 
222 /* device parameters */
223 enum {
224     JFET2_AREA = 1,
225     JFET2_IC_VDS,
226     JFET2_IC_VGS,
227     JFET2_IC,
228     JFET2_OFF,
229     JFET2_TEMP,
230     JFET2_DTEMP,
231     JFET2_M,
232 };
233 
234 /* device questions */
235 enum {
236     JFET2_DRAINNODE = 301,
237     JFET2_GATENODE,
238     JFET2_SOURCENODE,
239     JFET2_DRAINPRIMENODE,
240     JFET2_SOURCEPRIMENODE,
241     JFET2_VGS,
242     JFET2_VGD,
243     JFET2_CG,
244     JFET2_CD,
245     JFET2_CGD,
246     JFET2_GM,
247     JFET2_GDS,
248     JFET2_GGS,
249     JFET2_GGD,
250     JFET2_QGS,
251     JFET2_CQGS,
252     JFET2_QGD,
253     JFET2_CQGD,
254     JFET2_CS,
255     JFET2_POWER,
256     JFET2_VTRAP,
257     JFET2_PAVE,
258 };
259 
260 /* model questions */
261 enum {
262     JFET2_MOD_DRAINCONDUCT = 301,
263     JFET2_MOD_SOURCECONDUCT,
264     JFET2_MOD_DEPLETIONCAP,
265     JFET2_MOD_VCRIT,
266     JFET2_MOD_TYPE,
267 };
268 
269 /* function definitions */
270 
271 #include "jfet2ext.h"
272 
273 #endif /*JFET2*/
274