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.
190 lines
8.2 KiB
190 lines
8.2 KiB
/**********
|
|
Copyright 1990 Regents of the University of California. All rights reserved.
|
|
Author: 1985 Thomas L. Quarles
|
|
Modified: 2000 AlansFixes
|
|
**********/
|
|
|
|
#ifndef RES
|
|
#define RES
|
|
|
|
#include "ngspice/ifsim.h"
|
|
#include "ngspice/cktdefs.h"
|
|
#include "ngspice/gendefs.h"
|
|
#include "ngspice/complex.h"
|
|
#include "ngspice/noisedef.h"
|
|
|
|
/* definitions used to describe resistors */
|
|
|
|
|
|
/* information used to describe a single instance */
|
|
|
|
typedef struct sRESinstance {
|
|
struct sRESmodel *RESmodPtr; /* backpointer to model */
|
|
struct sRESinstance *RESnextInstance; /* pointer to next instance of
|
|
* current model*/
|
|
|
|
IFuid RESname; /* pointer to character string naming this instance */
|
|
int RESstate; /* not used but needed for sructure consistency */
|
|
int RESposNode; /* number of positive node of resistor */
|
|
int RESnegNode; /* number of negative node of resistor */
|
|
|
|
double REStemp; /* temperature at which this resistor operates */
|
|
double RESdtemp; /* delta-temperature of a particular instance */
|
|
double RESconduct; /* conductance at current analysis temperature */
|
|
double RESresist; /* resistance at temperature Tnom */
|
|
double REScurrent; /* The dc current in the resistor */
|
|
/* serban */
|
|
double RESacResist; /* AC resistance, useful for fancy .ac analyses */
|
|
double RESacConduct; /* AC conductance */
|
|
double RESwidth; /* width of the resistor */
|
|
double RESlength; /* length of the resistor */
|
|
double RESscale; /* Scale factor */
|
|
double RESm; /* Multiplicity factor for this instance */
|
|
double REStc1; /* first temperature coefficient of resistors */
|
|
double REStc2; /* second temperature coefficient of resistors */
|
|
double REStce; /* exponential temperature coefficient of resistors */
|
|
double RESbv_max; /* Maximum resistor voltage */
|
|
int RESnoisy; /* Set if the resistor generates noise */
|
|
double RESeffNoiseArea; /* effective resistor area for noise calculation */
|
|
double *RESposPosptr; /* pointer to sparse matrix diagonal at
|
|
* (positive,positive) */
|
|
double *RESnegNegptr; /* pointer to sparse matrix diagonal at
|
|
* (negative,negative) */
|
|
double *RESposNegptr; /* pointer to sparse matrix offdiagonal at
|
|
* (positive,negative) */
|
|
double *RESnegPosptr; /* pointer to sparse matrix offdiagonal at
|
|
* (negative,positive) */
|
|
unsigned RESresGiven : 1; /* flag to indicate resistance was specified */
|
|
unsigned RESwidthGiven : 1; /* flag to indicate width given */
|
|
unsigned RESlengthGiven : 1; /* flag to indicate length given */
|
|
unsigned RESscaleGiven : 1; /* flag to indicate scale given */
|
|
unsigned REStempGiven : 1; /* indicates temperature specified */
|
|
unsigned RESdtempGiven : 1; /* indicates delta-temp specified */
|
|
/* serban */
|
|
unsigned RESacresGiven : 1; /* indicates AC value specified */
|
|
unsigned RESmGiven : 1; /* indicates M parameter specified */
|
|
unsigned REStc1Given : 1; /* indicates tc1 parameter specified */
|
|
unsigned REStc2Given : 1; /* indicates tc2 parameter specified */
|
|
unsigned REStceGiven : 1; /* indicates tce parameter specified */
|
|
unsigned RESnoisyGiven : 1; /* indicates if noisy is specified */
|
|
unsigned RESbv_maxGiven : 1; /* flags indicates maximum voltage is given */
|
|
int RESsenParmNo; /* parameter # for sensitivity use;
|
|
* set equal to 0 if not a design parameter*/
|
|
|
|
/* indices to array of RES noise sources */
|
|
|
|
#define RESTHNOIZ 0 /* Thermal noise source */
|
|
#define RESFLNOIZ 1 /* Flicker noise source */
|
|
#define RESTOTNOIZ 2 /* Total noise */
|
|
|
|
#define RESNSRCS 3 /* the number of RES noise sources */
|
|
|
|
|
|
#ifndef NONOISE
|
|
double RESnVar[NSTATVARS][RESNSRCS];
|
|
#else /* NONOISE */
|
|
double **RESnVar;
|
|
#endif /* NONOISE */
|
|
|
|
} RESinstance ;
|
|
|
|
|
|
/* per model data */
|
|
|
|
typedef struct sRESmodel { /* model structure for a resistor */
|
|
int RESmodType; /* type index of this device type */
|
|
struct sRESmodel *RESnextModel; /* pointer to next possible model in
|
|
* linked list */
|
|
RESinstance * RESinstances; /* pointer to list of instances that have this
|
|
* model */
|
|
IFuid RESmodName; /* pointer to character string naming this model */
|
|
|
|
/* --- end of generic struct GENmodel --- */
|
|
|
|
double REStnom; /* temperature at which resistance measured */
|
|
double REStempCoeff1; /* first temperature coefficient of resistors */
|
|
double REStempCoeff2; /* second temperature coefficient of resistors */
|
|
double REStempCoeffe; /* exponential temperature coefficient of resistors */
|
|
double RESsheetRes; /* sheet resistance of devices in ohms/square */
|
|
double RESdefWidth; /* default width of a resistor */
|
|
double RESdefLength; /* default length of a resistor */
|
|
double RESnarrow; /* amount by which device is narrower than drawn */
|
|
double RESshort; /* amount by which device is shorter than drawn */
|
|
double RESfNcoef; /* Flicker noise coefficient */
|
|
double RESfNexp; /* Flicker noise exponent */
|
|
double RESres; /* Default model resistance */
|
|
double RESbv_max; /* Maximum resistor voltage */
|
|
double RESlf; /* length exponent for noise calculation */
|
|
double RESwf; /* width exponent for noise calculation */
|
|
double RESef; /* frequncy exponent for noise calculation */
|
|
unsigned REStnomGiven :1; /* flag to indicate nominal temp. was given */
|
|
unsigned REStc1Given :1; /* flag to indicate tc1 was specified */
|
|
unsigned REStc2Given :1; /* flag to indicate tc2 was specified */
|
|
unsigned REStceGiven :1; /* flag to indicate tce was specified */
|
|
unsigned RESsheetResGiven :1; /* flag to indicate sheet resistance given*/
|
|
unsigned RESdefWidthGiven :1; /* flag to indicate default width given */
|
|
unsigned RESdefLengthGiven :1; /* flag to indicate default length given */
|
|
unsigned RESnarrowGiven :1; /* flag to indicate narrow effect given */
|
|
unsigned RESshortGiven :1; /* flag to indicate short effect given */
|
|
unsigned RESfNcoefGiven :1; /* flag to indicate kf given */
|
|
unsigned RESfNexpGiven :1; /* flag to indicate af given */
|
|
unsigned RESresGiven :1; /* flag to indicate model resistance given */
|
|
unsigned RESbv_maxGiven :1; /* flags indicates maximum voltage is given */
|
|
unsigned RESlfGiven :1; /* flags indicates lf is given */
|
|
unsigned RESwfGiven :1; /* flags indicates wf is given */
|
|
unsigned RESefGiven :1; /* flags indicates ef is given */
|
|
} RESmodel;
|
|
|
|
/* device parameters */
|
|
#define RES_RESIST 1
|
|
#define RES_WIDTH 2
|
|
#define RES_LENGTH 3
|
|
#define RES_CONDUCT 4
|
|
#define RES_RESIST_SENS 5
|
|
#define RES_CURRENT 6
|
|
#define RES_POWER 7
|
|
#define RES_TEMP 8
|
|
/* serban */
|
|
#define RES_ACRESIST 10
|
|
#define RES_ACCONDUCT 11
|
|
#define RES_M 12 /* pn */
|
|
#define RES_SCALE 13 /* pn */
|
|
#define RES_DTEMP 14 /* pn */
|
|
#define RES_NOISY 15 /* pn */
|
|
/* tanaka */
|
|
#define RES_TC1 16
|
|
#define RES_TC2 17
|
|
#define RES_BV_MAX 18
|
|
#define RES_TCE 19
|
|
|
|
/* model parameters */
|
|
#define RES_MOD_TC1 101
|
|
#define RES_MOD_TC2 102
|
|
#define RES_MOD_RSH 103
|
|
#define RES_MOD_DEFWIDTH 104
|
|
#define RES_MOD_DEFLENGTH 105
|
|
#define RES_MOD_NARROW 106
|
|
#define RES_MOD_R 107
|
|
#define RES_MOD_TNOM 108
|
|
#define RES_MOD_SHORT 109
|
|
#define RES_MOD_KF 110
|
|
#define RES_MOD_AF 111
|
|
#define RES_MOD_BV_MAX 112
|
|
#define RES_MOD_LF 113
|
|
#define RES_MOD_WF 114
|
|
#define RES_MOD_EF 115
|
|
#define RES_MOD_TCE 116
|
|
|
|
/* device questions */
|
|
#define RES_QUEST_SENS_REAL 201
|
|
#define RES_QUEST_SENS_IMAG 202
|
|
#define RES_QUEST_SENS_MAG 203
|
|
#define RES_QUEST_SENS_PH 204
|
|
#define RES_QUEST_SENS_CPLX 205
|
|
#define RES_QUEST_SENS_DC 206
|
|
|
|
/* model questions */
|
|
|
|
#include "resext.h"
|
|
|
|
#endif /*RES*/
|