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 84 double MESdCoeffs[MESNDCOEFFS]; 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 135 double MESnVar[NSTATVARS][MESNSRCS]; 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; 171 double MESlModulation; 172 double MESb; 173 double MESdrainResist; 174 double MESsourceResist; 175 double MEScapGS; 176 double MEScapGD; 177 double MESgatePotential; 178 double MESgateSatCurrent; 179 double MESdepletionCapCoeff; 180 double MESfNcoef; 181 double MESfNexp; 182 183 double MESdrainConduct; 184 double MESsourceConduct; 185 double MESdepletionCap; 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; 201 unsigned MESgateSatCurrentGiven : 1; 202 unsigned MESdepletionCapCoeffGiven : 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*/ 317