You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
293 lines
9.7 KiB
293 lines
9.7 KiB
/**********
|
|
Copyright 1990 Regents of the University of California. All rights reserved.
|
|
Author: 1985 Thomas L. Quarles
|
|
Sydney University mods Copyright(c) 1989 Anthony E. Parker, David J. Skellern
|
|
Laboratory for Communication Science Engineering
|
|
Sydney University Department of Electrical Engineering, Australia
|
|
**********/
|
|
|
|
#ifndef JFET
|
|
#define JFET
|
|
|
|
#include "ifsim.h"
|
|
#include "gendefs.h"
|
|
#include "cktdefs.h"
|
|
#include "complex.h"
|
|
#include "noisedef.h"
|
|
|
|
/* structures used to describe Junction Field Effect Transistors */
|
|
|
|
|
|
/* information used to describe a single instance */
|
|
|
|
typedef struct sJFETinstance {
|
|
struct sJFETmodel *JFETmodPtr; /* backpointer to model */
|
|
struct sJFETinstance *JFETnextInstance; /* pointer to next instance of
|
|
* current model*/
|
|
IFuid JFETname; /* pointer to character string naming this instance */
|
|
int JFETowner; /* number of owner process */
|
|
int JFETstate; /* pointer to start of state vector for jfet */
|
|
int JFETdrainNode; /* number of drain node of jfet */
|
|
int JFETgateNode; /* number of gate node of jfet */
|
|
int JFETsourceNode; /* number of source node of jfet */
|
|
int JFETdrainPrimeNode; /* number of internal drain node of jfet */
|
|
int JFETsourcePrimeNode; /* number of internal source node of jfet */
|
|
|
|
double *JFETdrainDrainPrimePtr; /* pointer to sparse matrix at
|
|
* (drain,drain prime) */
|
|
double *JFETgateDrainPrimePtr; /* pointer to sparse matrix at
|
|
* (gate,drain prime) */
|
|
double *JFETgateSourcePrimePtr; /* pointer to sparse matrix at
|
|
* (gate,source prime) */
|
|
double *JFETsourceSourcePrimePtr; /* pointer to sparse matrix at
|
|
* (source,source prime) */
|
|
double *JFETdrainPrimeDrainPtr; /* pointer to sparse matrix at
|
|
* (drain prime,drain) */
|
|
double *JFETdrainPrimeGatePtr; /* pointer to sparse matrix at
|
|
* (drain prime,gate) */
|
|
double *JFETdrainPrimeSourcePrimePtr; /* pointer to sparse matrix
|
|
* (drain prime,source prime) */
|
|
double *JFETsourcePrimeGatePtr; /* pointer to sparse matrix at
|
|
* (source prime,gate) */
|
|
double *JFETsourcePrimeSourcePtr; /* pointer to sparse matrix at
|
|
* (source prime,source) */
|
|
double *JFETsourcePrimeDrainPrimePtr; /* pointer to sparse matrix
|
|
* (source prime,drain prime) */
|
|
double *JFETdrainDrainPtr; /* pointer to sparse matrix at
|
|
* (drain,drain) */
|
|
double *JFETgateGatePtr; /* pointer to sparse matrix at
|
|
* (gate,gate) */
|
|
double *JFETsourceSourcePtr; /* pointer to sparse matrix at
|
|
* (source,source) */
|
|
double *JFETdrainPrimeDrainPrimePtr; /* pointer to sparse matrix
|
|
* (drain prime,drain prime) */
|
|
double *JFETsourcePrimeSourcePrimePtr; /* pointer to sparse matrix
|
|
* (source prime,source prime) */
|
|
|
|
int JFETmode;
|
|
/* distortion analysis Taylor coeffs. */
|
|
|
|
/*
|
|
* naming convention:
|
|
* x = vgs
|
|
* y = vds
|
|
* cdr = cdrain
|
|
*/
|
|
|
|
#define JFETNDCOEFFS 21
|
|
|
|
#ifndef NODISTO
|
|
double JFETdCoeffs[JFETNDCOEFFS];
|
|
#else /* NODISTO */
|
|
double *JFETdCoeffs;
|
|
#endif /* NODISTO */
|
|
|
|
#ifndef CONFIG
|
|
|
|
#define cdr_x JFETdCoeffs[0]
|
|
#define cdr_y JFETdCoeffs[1]
|
|
#define cdr_x2 JFETdCoeffs[2]
|
|
#define cdr_y2 JFETdCoeffs[3]
|
|
#define cdr_xy JFETdCoeffs[4]
|
|
#define cdr_x3 JFETdCoeffs[5]
|
|
#define cdr_y3 JFETdCoeffs[6]
|
|
#define cdr_x2y JFETdCoeffs[7]
|
|
#define cdr_xy2 JFETdCoeffs[8]
|
|
|
|
#define ggs1 JFETdCoeffs[9]
|
|
#define ggd1 JFETdCoeffs[10]
|
|
#define ggs2 JFETdCoeffs[11]
|
|
#define ggd2 JFETdCoeffs[12]
|
|
#define ggs3 JFETdCoeffs[13]
|
|
#define ggd3 JFETdCoeffs[14]
|
|
#define capgs1 JFETdCoeffs[15]
|
|
#define capgd1 JFETdCoeffs[16]
|
|
#define capgs2 JFETdCoeffs[17]
|
|
#define capgd2 JFETdCoeffs[18]
|
|
#define capgs3 JFETdCoeffs[19]
|
|
#define capgd3 JFETdCoeffs[20]
|
|
|
|
#endif
|
|
|
|
/* indices to an array of JFET noise sources */
|
|
|
|
#define JFETRDNOIZ 0
|
|
#define JFETRSNOIZ 1
|
|
#define JFETIDNOIZ 2
|
|
#define JFETFLNOIZ 3
|
|
#define JFETTOTNOIZ 4
|
|
|
|
#define JFETNSRCS 5
|
|
|
|
#ifndef NONOISE
|
|
double JFETnVar[NSTATVARS][JFETNSRCS];
|
|
#else /* NONOISE */
|
|
double **JFETnVar;
|
|
#endif /* NONOISE */
|
|
|
|
unsigned JFEToff :1; /* 'off' flag for jfet */
|
|
unsigned JFETareaGiven : 1; /* flag to indicate area was specified */
|
|
unsigned JFETmGiven : 1; /* flag to indicate parallel multiplier given */
|
|
unsigned JFETicVDSGiven : 1; /* initial condition given flag for V D-S*/
|
|
unsigned JFETicVGSGiven : 1; /* initial condition given flag for V G-S*/
|
|
unsigned JFETtempGiven : 1; /* flag to indicate instance temp given */
|
|
unsigned JFETdtempGiven : 1; /* flag to indicate instance dtemp given */
|
|
|
|
|
|
double JFETarea; /* area factor for the jfet */
|
|
double JFETm; /* Parallel multiplier */
|
|
double JFETicVDS; /* initial condition voltage D-S*/
|
|
double JFETicVGS; /* initial condition voltage G-S*/
|
|
double JFETtemp; /* operating temperature */
|
|
double JFETdtemp; /* instance temperature difference */
|
|
double JFETtSatCur; /* temperature adjusted saturation current */
|
|
double JFETtGatePot; /* temperature adjusted gate potential */
|
|
double JFETtCGS; /* temperature corrected G-S capacitance */
|
|
double JFETtCGD; /* temperature corrected G-D capacitance */
|
|
double JFETcorDepCap; /* joining point of the fwd bias dep. cap eq.s */
|
|
double JFETvcrit; /* critical voltage for the instance */
|
|
double JFETf1; /* coefficient of capacitance polynomial exp */
|
|
|
|
|
|
} JFETinstance ;
|
|
|
|
#define JFETvgs JFETstate
|
|
#define JFETvgd JFETstate+1
|
|
#define JFETcg JFETstate+2
|
|
#define JFETcd JFETstate+3
|
|
#define JFETcgd JFETstate+4
|
|
#define JFETgm JFETstate+5
|
|
#define JFETgds JFETstate+6
|
|
#define JFETggs JFETstate+7
|
|
#define JFETggd JFETstate+8
|
|
#define JFETqgs JFETstate+9
|
|
#define JFETcqgs JFETstate+10
|
|
#define JFETqgd JFETstate+11
|
|
#define JFETcqgd JFETstate+12
|
|
|
|
/* per model data */
|
|
|
|
typedef struct sJFETmodel { /* model structure for a jfet */
|
|
int JFETmodType; /* type index of this device type */
|
|
struct sJFETmodel *JFETnextModel; /* pointer to next possible model in
|
|
* linked list */
|
|
JFETinstance * JFETinstances; /* pointer to list of instances
|
|
* that have this model */
|
|
IFuid JFETmodName; /* pointer to character string naming this model */
|
|
int JFETtype;
|
|
|
|
double JFETthreshold;
|
|
double JFETbeta;
|
|
double JFETlModulation;
|
|
double JFETdrainResist;
|
|
double JFETsourceResist;
|
|
double JFETcapGS;
|
|
double JFETcapGD;
|
|
double JFETgatePotential;
|
|
double JFETgateSatCurrent;
|
|
double JFETdepletionCapCoeff;
|
|
double JFETfNcoef;
|
|
double JFETfNexp;
|
|
|
|
|
|
double JFETdrainConduct;
|
|
double JFETsourceConduct;
|
|
double JFETf2;
|
|
double JFETf3;
|
|
/* Modification for Sydney University JFET model */
|
|
double JFETb; /* doping profile parameter */
|
|
double JFETbFac; /* internal derived doping profile parameter */
|
|
/* end Sydney University mod */
|
|
double JFETtnom; /* temperature at which parameters were measured */
|
|
|
|
unsigned JFETthresholdGiven : 1;
|
|
unsigned JFETbetaGiven : 1;
|
|
unsigned JFETlModulationGiven : 1;
|
|
unsigned JFETdrainResistGiven : 1;
|
|
unsigned JFETsourceResistGiven : 1;
|
|
unsigned JFETcapGSGiven : 1;
|
|
unsigned JFETcapGDGiven : 1;
|
|
unsigned JFETgatePotentialGiven : 1;
|
|
unsigned JFETgateSatCurrentGiven : 1;
|
|
unsigned JFETdepletionCapCoeffGiven : 1;
|
|
/* Modification for Sydney University JFET model */
|
|
unsigned JFETbGiven : 1;
|
|
/* end Sydney University mod */
|
|
unsigned JFETtnomGiven : 1; /* user specified Tnom for model */
|
|
unsigned JFETfNcoefGiven : 1;
|
|
unsigned JFETfNexpGiven : 1;
|
|
|
|
|
|
} JFETmodel;
|
|
|
|
#ifndef NJF
|
|
|
|
#define NJF 1
|
|
#define PJF -1
|
|
|
|
#endif /*NJF*/
|
|
|
|
/* device parameters */
|
|
#define JFET_AREA 1
|
|
#define JFET_IC_VDS 2
|
|
#define JFET_IC_VGS 3
|
|
#define JFET_IC 4
|
|
#define JFET_OFF 5
|
|
#define JFET_TEMP 6
|
|
#define JFET_DTEMP 7
|
|
#define JFET_M 8
|
|
|
|
/* model parameters */
|
|
#define JFET_MOD_VTO 101
|
|
#define JFET_MOD_BETA 102
|
|
#define JFET_MOD_LAMBDA 103
|
|
#define JFET_MOD_RD 104
|
|
#define JFET_MOD_RS 105
|
|
#define JFET_MOD_CGS 106
|
|
#define JFET_MOD_CGD 107
|
|
#define JFET_MOD_PB 108
|
|
#define JFET_MOD_IS 109
|
|
#define JFET_MOD_FC 110
|
|
#define JFET_MOD_NJF 111
|
|
#define JFET_MOD_PJF 112
|
|
#define JFET_MOD_TNOM 113
|
|
#define JFET_MOD_KF 114
|
|
#define JFET_MOD_AF 115
|
|
/* Modification for Sydney University JFET model */
|
|
#define JFET_MOD_B 116
|
|
/* end Sydney University mod */
|
|
|
|
/* device questions */
|
|
#define JFET_DRAINNODE 301
|
|
#define JFET_GATENODE 302
|
|
#define JFET_SOURCENODE 303
|
|
#define JFET_DRAINPRIMENODE 304
|
|
#define JFET_SOURCEPRIMENODE 305
|
|
#define JFET_VGS 306
|
|
#define JFET_VGD 307
|
|
#define JFET_CG 308
|
|
#define JFET_CD 309
|
|
#define JFET_CGD 310
|
|
#define JFET_GM 311
|
|
#define JFET_GDS 312
|
|
#define JFET_GGS 313
|
|
#define JFET_GGD 314
|
|
#define JFET_QGS 315
|
|
#define JFET_CQGS 316
|
|
#define JFET_QGD 317
|
|
#define JFET_CQGD 318
|
|
#define JFET_CS 319
|
|
#define JFET_POWER 320
|
|
|
|
/* model questions */
|
|
#define JFET_MOD_DRAINCONDUCT 301
|
|
#define JFET_MOD_SOURCECONDUCT 302
|
|
#define JFET_MOD_DEPLETIONCAP 303
|
|
#define JFET_MOD_VCRIT 304
|
|
#define JFET_MOD_TYPE 305
|
|
|
|
/* function definitions */
|
|
|
|
#include "jfetext.h"
|
|
|
|
#endif /*JFET*/
|