Jspice3
mesdefs.h
Go to the documentation of this file.
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 S. Hwang
5  1993 Stephen R. Whiteley
6 ****************************************************************************/
7 
8 #ifndef MES
9 #define MES
10 
11 #include "devdefs.h"
12 
13 #define MESnumStates 13
14 
15  /* structures used to describe MESFET Transistors */
16 
17 
18 /* information used to describe a single instance */
19 
20 typedef struct sMESinstance {
21  struct sMESmodel *MESmodPtr; /* backpointer to model */
22  struct sMESinstance *MESnextInstance; /* pointer to next instance of
23  * current model*/
24  IFuid MESname; /* pointer to character string naming this instance */
25  int MESstate; /* pointer to start of state vector for mesfet */
26 
27  int MESdrainNode; /* number of drain node of mesfet */
28  int MESgateNode; /* number of gate node of mesfet */
29  int MESsourceNode; /* number of source node of mesfet */
30  int MESdrainPrimeNode; /* number of internal drain node of mesfet */
31  int MESsourcePrimeNode; /* number of internal source node of mesfet */
32  double MESarea; /* area factor for the mesfet */
33  double MESicVDS; /* initial condition voltage D-S*/
34  double MESicVGS; /* initial condition voltage G-S*/
35  double *MESdrainDrainPrimePtr; /* pointer to sparse matrix at
36  * (drain,drain prime) */
37  double *MESgateDrainPrimePtr; /* pointer to sparse matrix at
38  * (gate,drain prime) */
39  double *MESgateSourcePrimePtr; /* pointer to sparse matrix at
40  * (gate,source prime) */
41  double *MESsourceSourcePrimePtr; /* pointer to sparse matrix at
42  * (source,source prime) */
43  double *MESdrainPrimeDrainPtr; /* pointer to sparse matrix at
44  * (drain prime,drain) */
45  double *MESdrainPrimeGatePtr; /* pointer to sparse matrix at
46  * (drain prime,gate) */
47  double *MESdrainPrimeSourcePrimePtr; /* pointer to sparse matrix
48  * (drain prime,source prime) */
49  double *MESsourcePrimeGatePtr; /* pointer to sparse matrix at
50  * (source prime,gate) */
51  double *MESsourcePrimeSourcePtr; /* pointer to sparse matrix at
52  * (source prime,source) */
53  double *MESsourcePrimeDrainPrimePtr; /* pointer to sparse matrix
54  * (source prime,drain prime) */
55  double *MESdrainDrainPtr; /* pointer to sparse matrix at
56  * (drain,drain) */
57  double *MESgateGatePtr; /* pointer to sparse matrix at
58  * (gate,gate) */
59  double *MESsourceSourcePtr; /* pointer to sparse matrix at
60  * (source,source) */
61  double *MESdrainPrimeDrainPrimePtr; /* pointer to sparse matrix
62  * (drain prime,drain prime) */
63  double *MESsourcePrimeSourcePrimePtr; /* pointer to sparse matrix
64  * (source prime,source prime) */
65 
66  int MESoff; /* 'off' flag for mesfet */
67  unsigned MESareaGiven : 1; /* flag to indicate area was specified */
68  unsigned MESicVDSGiven : 1; /* initial condition given flag for V D-S*/
69  unsigned MESicVGSGiven : 1; /* initial condition given flag for V G-S*/
70 
71 int MESmode;
72 
73 /*
74  * naming convention:
75  * x = vgs
76  * y = vgd
77  * z = vds
78  * cdr = cdrain
79  */
80 
81 #define MESNDCOEFFS 27
82 
83 #ifndef NODISTO
85 #else /* NODISTO */
86  double *MESdCoeffs;
87 #endif /* NODISTO */
88 
89 #ifndef CONFIG
90 
91 #define cdr_x MESdCoeffs[0]
92 #define cdr_z MESdCoeffs[1]
93 #define cdr_x2 MESdCoeffs[2]
94 #define cdr_z2 MESdCoeffs[3]
95 #define cdr_xz MESdCoeffs[4]
96 #define cdr_x3 MESdCoeffs[5]
97 #define cdr_z3 MESdCoeffs[6]
98 #define cdr_x2z MESdCoeffs[7]
99 #define cdr_xz2 MESdCoeffs[8]
100 
101 #define ggs3 MESdCoeffs[9]
102 #define ggd3 MESdCoeffs[10]
103 #define ggs2 MESdCoeffs[11]
104 #define ggd2 MESdCoeffs[12]
105 
106 #define qgs_x2 MESdCoeffs[13]
107 #define qgs_y2 MESdCoeffs[14]
108 #define qgs_xy MESdCoeffs[15]
109 #define qgs_x3 MESdCoeffs[16]
110 #define qgs_y3 MESdCoeffs[17]
111 #define qgs_x2y MESdCoeffs[18]
112 #define qgs_xy2 MESdCoeffs[19]
113 
114 #define qgd_x2 MESdCoeffs[20]
115 #define qgd_y2 MESdCoeffs[21]
116 #define qgd_xy MESdCoeffs[22]
117 #define qgd_x3 MESdCoeffs[23]
118 #define qgd_y3 MESdCoeffs[24]
119 #define qgd_x2y MESdCoeffs[25]
120 #define qgd_xy2 MESdCoeffs[26]
121 
122 #endif
123 
124 /* indices to the array of MESFET noise sources */
125 
126 #define MESRDNOIZ 0
127 #define MESRSNOIZ 1
128 #define MESIDNOIZ 2
129 #define MESFLNOIZ 3
130 #define MESTOTNOIZ 4
131 
132 #define MESNSRCS 5 /* the number of MESFET noise sources */
133 
134 #ifndef NONOISE
136 #else /* NONOISE */
137  double **MESnVar;
138 #endif /* NONOISE */
139 
140 } MESinstance ;
141 
142 #define MESvgs MESstate
143 #define MESvgd MESstate+1
144 #define MEScg MESstate+2
145 #define MEScd MESstate+3
146 #define MEScgd MESstate+4
147 #define MESgm MESstate+5
148 #define MESgds MESstate+6
149 #define MESggs MESstate+7
150 #define MESggd MESstate+8
151 #define MESqgs MESstate+9
152 #define MEScqgs MESstate+10
153 #define MESqgd MESstate+11
154 #define MEScqgd MESstate+12
155 
156 
157 /* per model data */
158 
159 typedef struct sMESmodel { /* model structure for a mesfet */
160  int MESmodType; /* type index of this device type */
161  struct sMESmodel *MESnextModel; /* pointer to next possible model in
162  * linked list */
163  MESinstance * MESinstances; /* pointer to list of instances
164  * that have this model */
165  IFuid MESmodName; /* pointer to character string naming this model */
166  int MEStype;
167 
168  double MESthreshold;
169  double MESalpha;
170  double MESbeta;
172  double MESb;
175  double MEScapGS;
176  double MEScapGD;
180  double MESfNcoef;
181  double MESfNexp;
182 
186  double MESf1;
187  double MESf2;
188  double MESf3;
189  double MESvcrit;
190 
191  unsigned MESthresholdGiven : 1;
192  unsigned MESalphaGiven : 1;
193  unsigned MESbetaGiven : 1;
194  unsigned MESlModulationGiven : 1;
195  unsigned MESbGiven : 1;
196  unsigned MESdrainResistGiven : 1;
197  unsigned MESsourceResistGiven : 1;
198  unsigned MEScapGSGiven : 1;
199  unsigned MEScapGDGiven : 1;
200  unsigned MESgatePotentialGiven : 1;
203  unsigned MESfNcoefGiven : 1;
204  unsigned MESfNexpGiven : 1;
205 
206 
207 } MESmodel;
208 
209 #ifndef NMF
210 
211 #define NMF 1
212 #define PMF -1
213 
214 #endif /*NMF*/
215 
216 /* device parameters */
217 #define MES_AREA 1
218 #define MES_IC_VDS 2
219 #define MES_IC_VGS 3
220 #define MES_IC 4
221 #define MES_OFF 5
222 #define MES_CS 6
223 #define MES_POWER 7
224 
225 /* model parameters */
226 #define MES_MOD_VTO 101
227 #define MES_MOD_ALPHA 102
228 #define MES_MOD_BETA 103
229 #define MES_MOD_LAMBDA 104
230 #define MES_MOD_B 105
231 #define MES_MOD_RD 106
232 #define MES_MOD_RS 107
233 #define MES_MOD_CGS 108
234 #define MES_MOD_CGD 109
235 #define MES_MOD_PB 110
236 #define MES_MOD_IS 111
237 #define MES_MOD_FC 112
238 #define MES_MOD_NMF 113
239 #define MES_MOD_PMF 114
240 #define MES_MOD_KF 115
241 #define MES_MOD_AF 116
242 
243 /* device questions */
244 
245 #define MES_DRAINNODE 201
246 #define MES_GATENODE 202
247 #define MES_SOURCENODE 203
248 #define MES_DRAINPRIMENODE 204
249 #define MES_SOURCEPRIMENODE 205
250 #define MES_VGS 206
251 #define MES_VGD 207
252 #define MES_CG 208
253 #define MES_CD 209
254 #define MES_CGD 210
255 #define MES_GM 211
256 #define MES_GDS 212
257 #define MES_GGS 213
258 #define MES_GGD 214
259 #define MES_QGS 215
260 #define MES_CQGS 216
261 #define MES_QGD 217
262 #define MES_CQGD 218
263 
264 /* model questions */
265 
266 #define MES_MOD_DRAINCONDUCT 301
267 #define MES_MOD_SOURCECONDUCT 302
268 #define MES_MOD_DEPLETIONCAP 303
269 #define MES_MOD_VCRIT 304
270 #define MES_MOD_TYPE 305
271 
272 
273 #ifdef __STDC__
274 
275 extern int MESacLoad(GENmodel*,CKTcircuit*);
276 extern int MESask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*);
277 extern int MESdelete(GENmodel*,IFuid,GENinstance**);
278 extern void MESdestroy(GENmodel**);
279 extern int MESdisto(int,GENmodel*,CKTcircuit*);
280 extern int MESgetic(GENmodel*,CKTcircuit*);
281 extern int MESload(GENmodel*,CKTcircuit*);
282 extern int MESmAsk(CKTcircuit*,GENmodel*,int,IFvalue*);
283 extern int MESmDelete(GENmodel**,IFuid,GENmodel*);
284 extern int MESmParam(int,IFvalue*,GENmodel*);
285 extern int MESnoise(int,int,GENmodel*,CKTcircuit*,GENERIC*,double*);
286 extern int MESparam(CKTcircuit*,int,IFvalue*,GENinstance*,IFvalue*);
287 extern void MESparse(int,GENERIC*,GENERIC*,GENERIC*);
288 extern int MESpzLoad(GENmodel*,CKTcircuit*,SPcomplex*);
289 extern int MESsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*);
290 extern int MEStemp(GENmodel*,CKTcircuit*);
291 extern int MEStrunc(GENmodel*,CKTcircuit*,double*);
292 
293 #else /* stdc */
294 
295 extern int MESacLoad();
296 extern int MESask();
297 extern int MESdelete();
298 extern void MESdestroy();
299 extern int MESdisto();
300 extern int MESgetic();
301 extern int MESload();
302 extern int MESmAsk();
303 extern int MESmDelete();
304 extern int MESmParam();
305 extern int MESnoise();
306 extern int MESparam();
307 extern void MESparse();
308 extern int MESpzLoad();
309 extern int MESsetup();
310 extern int MEStemp();
311 extern int MEStrunc();
312 
313 #endif /* stdc */
314 
315 
316 #endif /*MES*/
int MEStype
Definition: mesdefs.h:166
unsigned MESfNexpGiven
Definition: mesdefs.h:204
#define MESNDCOEFFS
Definition: mesdefs.h:81
IFuid MESname
Definition: mesdefs.h:24
double MESf1
Definition: mesdefs.h:186
unsigned MEScapGSGiven
Definition: mesdefs.h:198
unsigned MESfNcoefGiven
Definition: mesdefs.h:203
double MESsourceResist
Definition: mesdefs.h:174
double MESnVar[NSTATVARS][MESNSRCS]
Definition: mesdefs.h:135
unsigned MESsourceResistGiven
Definition: mesdefs.h:197
unsigned MEScapGDGiven
Definition: mesdefs.h:199
double MESlModulation
Definition: mesdefs.h:171
double MESfNexp
Definition: mesdefs.h:181
struct sMESmodel MESmodel
double * MESdrainDrainPrimePtr
Definition: mesdefs.h:35
double * MESgateSourcePrimePtr
Definition: mesdefs.h:39
double * MESdrainDrainPtr
Definition: mesdefs.h:55
IFuid MESmodName
Definition: mesdefs.h:165
int MESmode
Definition: mesdefs.h:71
double MESdrainResist
Definition: mesdefs.h:173
MESinstance * MESinstances
Definition: mesdefs.h:163
struct sMESinstance MESinstance
unsigned MESgateSatCurrentGiven
Definition: mesdefs.h:201
int MESstate
Definition: mesdefs.h:25
#define MESNSRCS
Definition: mesdefs.h:132
int MESsetup()
int MESmParam()
double MESdepletionCapCoeff
Definition: mesdefs.h:179
void MESparse()
int MEStrunc()
unsigned MESlModulationGiven
Definition: mesdefs.h:194
double MESdrainConduct
Definition: mesdefs.h:183
struct sMESmodel * MESnextModel
Definition: mesdefs.h:161
double MEScapGS
Definition: mesdefs.h:175
double MESalpha
Definition: mesdefs.h:169
unsigned MESthresholdGiven
Definition: mesdefs.h:191
double MESdCoeffs[MESNDCOEFFS]
Definition: mesdefs.h:84
unsigned MESbetaGiven
Definition: mesdefs.h:193
struct sMESmodel * MESmodPtr
Definition: mesdefs.h:21
int MESpzLoad()
double MESsourceConduct
Definition: mesdefs.h:184
struct sMESinstance * MESnextInstance
Definition: mesdefs.h:22
unsigned MESdepletionCapCoeffGiven
Definition: mesdefs.h:202
void MESdestroy()
double * MESgateGatePtr
Definition: mesdefs.h:57
GENERIC * IFuid
Definition: ifsim.h:72
int MESgateNode
Definition: mesdefs.h:28
int MESgetic()
unsigned MESicVGSGiven
Definition: mesdefs.h:69
int MESmodType
Definition: mesdefs.h:160
double * MESdrainPrimeDrainPtr
Definition: mesdefs.h:43
int MESdrainPrimeNode
Definition: mesdefs.h:30
double * MESsourceSourcePtr
Definition: mesdefs.h:59
int MESload()
double * MESsourcePrimeSourcePtr
Definition: mesdefs.h:51
unsigned MESbGiven
Definition: mesdefs.h:195
unsigned MESicVDSGiven
Definition: mesdefs.h:68
unsigned MESareaGiven
Definition: mesdefs.h:67
double MESgatePotential
Definition: mesdefs.h:177
double * MESdrainPrimeSourcePrimePtr
Definition: mesdefs.h:47
int MESask()
double MESarea
Definition: mesdefs.h:32
double MESdepletionCap
Definition: mesdefs.h:185
double * MESsourcePrimeGatePtr
Definition: mesdefs.h:49
double MESb
Definition: mesdefs.h:172
int MESmDelete()
double MESthreshold
Definition: mesdefs.h:168
double * MESsourcePrimeDrainPrimePtr
Definition: mesdefs.h:53
unsigned MESgatePotentialGiven
Definition: mesdefs.h:200
int MESsourceNode
Definition: mesdefs.h:29
int MESnoise()
unsigned MESdrainResistGiven
Definition: mesdefs.h:196
double MEScapGD
Definition: mesdefs.h:176
double MESicVGS
Definition: mesdefs.h:34
int MEStemp()
double * MESdrainPrimeGatePtr
Definition: mesdefs.h:45
double * MESsourcePrimeSourcePrimePtr
Definition: mesdefs.h:63
int MESdisto()
double MESvcrit
Definition: mesdefs.h:189
int MESdrainNode
Definition: mesdefs.h:27
double * MESdrainPrimeDrainPrimePtr
Definition: mesdefs.h:61
double MESicVDS
Definition: mesdefs.h:33
double MESf3
Definition: mesdefs.h:188
int MESparam()
int MESacLoad()
int MESoff
Definition: mesdefs.h:66
#define NSTATVARS
Definition: cktdefs.h:21
#define SMPmatrix
Definition: smpdefs.h:11
int MESsourcePrimeNode
Definition: mesdefs.h:31
unsigned MESalphaGiven
Definition: mesdefs.h:192
double MESbeta
Definition: mesdefs.h:170
double MESfNcoef
Definition: mesdefs.h:180
int MESdelete()
int MESmAsk()
double MESf2
Definition: mesdefs.h:187
char GENERIC
Definition: ifsim.h:27
double * MESsourceSourcePrimePtr
Definition: mesdefs.h:41
double MESgateSatCurrent
Definition: mesdefs.h:178
double * MESgateDrainPrimePtr
Definition: mesdefs.h:37