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