ngspice/src/spicelib/devices/numos/numosdef.h

221 lines
8.3 KiB
C

/**********
Copyright 1991 Regents of the University of California. All rights reserved.
Authors: 1987 Karti Mayaram, 1991 David Gates
**********/
#ifndef NUMOS_H
#define NUMOS_H
/* data structures used to describe 2D Numerical MOSFETs */
/* circuit level includes */
#include "ngspice/ifsim.h"
#include "ngspice/cktdefs.h"
#include "ngspice/gendefs.h"
/* device level includes */
#include "ngspice/twomesh.h"
#include "ngspice/twodev.h"
#include "ngspice/profile.h"
#include "ngspice/numglobs.h"
#include "ngspice/carddefs.h"
/* information needed per instance */
typedef struct sNUMOSinstance {
struct sNUMOSmodel *NUMOSmodPtr; /* back pointer to model */
struct sNUMOSinstance *NUMOSnextInstance; /* pointer to next instance
* of current model */
IFuid NUMOSname; /* pointer to character string naming this
* instance */
int NUMOSstate; /* pointer to start of state vector for
* mosfet */
/* entries in the state vector for mosfet: */
#define NUMOSvdb NUMOSstate
#define NUMOSvsb NUMOSstate+1
#define NUMOSvgb NUMOSstate+2
#define NUMOSid NUMOSstate+3
#define NUMOSis NUMOSstate+4
#define NUMOSig NUMOSstate+5
#define NUMOSdIdDVdb NUMOSstate+6
#define NUMOSdIdDVsb NUMOSstate+7
#define NUMOSdIdDVgb NUMOSstate+8
#define NUMOSdIsDVdb NUMOSstate+9
#define NUMOSdIsDVsb NUMOSstate+10
#define NUMOSdIsDVgb NUMOSstate+11
#define NUMOSdIgDVdb NUMOSstate+12
#define NUMOSdIgDVsb NUMOSstate+13
#define NUMOSdIgDVgb NUMOSstate+14
#define NUMOSnumStates 15
const int NUMOSdrainNode; /* number of drain node of MOSFET */
const int NUMOSgateNode; /* number of gate node of MOSFET */
const int NUMOSsourceNode; /* number of source node of MOSFET */
const int NUMOSbulkNode; /* number of bulk node of MOSFET */
double NUMOSarea; /* area factor for the mosfet */
double NUMOSwidth; /* width factor for the mosfet */
double NUMOSlength; /* length factor for the mosfet */
TWOdevice *NUMOSpDevice;
int NUMOStype;
double NUMOStemp; /* Instance Temperature */
double NUMOSc11; /* small-signal capacitance */
double NUMOSy11r; /* small-signal admittance, real part */
double NUMOSy11i; /* small-signal admittance, imag part */
double NUMOSc12; /* small-signal capacitance */
double NUMOSy12r; /* small-signal admittance, real part */
double NUMOSy12i; /* small-signal admittance, imag part */
double NUMOSc13; /* small-signal capacitance */
double NUMOSy13r; /* small-signal admittance, real part */
double NUMOSy13i; /* small-signal admittance, imag part */
double NUMOSc21; /* small-signal capacitance */
double NUMOSy21r; /* small-signal admittance, real part */
double NUMOSy21i; /* small-signal admittance, imag part */
double NUMOSc22; /* small-signal capacitance */
double NUMOSy22r; /* small-signal admittance, real part */
double NUMOSy22i; /* small-signal admittance, imag part */
double NUMOSc23; /* small-signal capacitance */
double NUMOSy23r; /* small-signal admittance, real part */
double NUMOSy23i; /* small-signal admittance, imag part */
double NUMOSc31; /* small-signal capacitance */
double NUMOSy31r; /* small-signal admittance, real part */
double NUMOSy31i; /* small-signal admittance, imag part */
double NUMOSc32; /* small-signal capacitance */
double NUMOSy32r; /* small-signal admittance, real part */
double NUMOSy32i; /* small-signal admittance, imag part */
double NUMOSc33; /* small-signal capacitance */
double NUMOSy33r; /* small-signal admittance, real part */
double NUMOSy33i; /* small-signal admittance, imag part */
GLOBvalues NUMOSglobals; /* Temp.-Dep. Global Parameters */
int NUMOSprint; /* print timepoints */
char *NUMOSicFile; /* Name of initial condition file */
double *NUMOSdrainDrainPtr; /* pointer to sparse matrix at (drain,drain) */
double *NUMOSdrainSourcePtr; /* pointer to sparse matrix at (drain,source) */
double *NUMOSdrainGatePtr; /* pointer to sparse matrix at (drain,gate) */
double *NUMOSdrainBulkPtr; /* pointer to sparse matrix at (drain,bulk) */
double *NUMOSsourceDrainPtr; /* pointer to sparse matrix at (source,drain) */
double *NUMOSsourceSourcePtr; /* pointer to sparse matrix at
* (source,source) */
double *NUMOSsourceGatePtr; /* pointer to sparse matrix at (source,gate) */
double *NUMOSsourceBulkPtr; /* pointer to sparse matrix at (source,bulk) */
double *NUMOSgateDrainPtr; /* pointer to sparse matrix at (gate,drain) */
double *NUMOSgateSourcePtr; /* pointer to sparse matrix at (gate,source) */
double *NUMOSgateGatePtr; /* pointer to sparse matrix at (gate,gate) */
double *NUMOSgateBulkPtr; /* pointer to sparse matrix at (gate,bulk) */
double *NUMOSbulkDrainPtr; /* pointer to sparse matrix at (bulk,drain) */
double *NUMOSbulkSourcePtr; /* pointer to sparse matrix at (bulk,source) */
double *NUMOSbulkGatePtr; /* pointer to sparse matrix at (bulk,gate) */
double *NUMOSbulkBulkPtr; /* pointer to sparse matrix at (bulk,bulk) */
int NUMOSoff; /* 'off' flag for mosfet */
unsigned NUMOSsmSigAvail:1; /* flag to indicate small-signal done */
unsigned NUMOSareaGiven:1; /* flag to indicate area was specified */
unsigned NUMOSwidthGiven:1; /* flag to indicate width was specified */
unsigned NUMOSlengthGiven:1; /* flag to indicate length was specified */
unsigned NUMOSicFileGiven:1; /* flag to indicate init. cond. file given */
unsigned NUMOSprintGiven:1; /* flag to indicate print was given */
unsigned NUMOStempGiven:1; /* flag to indicate temp was given */
} NUMOSinstance;
/* per model data */
typedef struct sNUMOSmodel { /* model structure for a numerical device */
int NUMOSmodType; /* type index of this device type */
struct sNUMOSmodel *NUMOSnextModel; /* pointer to next model in list */
NUMOSinstance *NUMOSinstances;/* pointer to list of instances */
IFuid NUMOSmodName; /* pointer to string naming this model */
/* --- end of generic struct GENmodel --- */
/* Everything below here is numerical-device-specific */
MESHcard *NUMOSxMeshes; /* list of xmesh cards */
MESHcard *NUMOSyMeshes; /* list of ymesh cards */
DOMNcard *NUMOSdomains; /* list of domain cards */
BDRYcard *NUMOSboundaries; /* list of boundary cards */
DOPcard *NUMOSdopings; /* list of doping cards */
ELCTcard *NUMOSelectrodes; /* list of electrode cards */
CONTcard *NUMOScontacts; /* list of contact cards */
MODLcard *NUMOSmodels; /* list of model cards */
MATLcard *NUMOSmaterials; /* list of material cards */
MOBcard *NUMOSmobility; /* list of mobility cards */
METHcard *NUMOSmethods; /* list of method cards */
OPTNcard *NUMOSoptions; /* list of option cards */
OUTPcard *NUMOSoutputs; /* list of output cards */
TWOtranInfo *NUMOSpInfo; /* transient analysis information */
DOPprofile *NUMOSprofiles; /* expanded list of doping profiles */
DOPtable *NUMOSdopTables; /* list of tables used by profiles */
TWOmaterial *NUMOSmatlInfo; /* list of material info structures */
} NUMOSmodel;
/* type of 2D MOSFET */
#define N_CH 1
#define P_CH -1
/* device parameters */
#define NUMOS_AREA 1
#define NUMOS_WIDTH 2
#define NUMOS_LENGTH 3
#define NUMOS_OFF 4
#define NUMOS_IC_FILE 5
#define NUMOS_PRINT 9
#define NUMOS_TEMP 10
#define NUMOS_G11 11
#define NUMOS_C11 12
#define NUMOS_Y11 13
#define NUMOS_G12 14
#define NUMOS_C12 15
#define NUMOS_Y12 16
#define NUMOS_G13 17
#define NUMOS_C13 18
#define NUMOS_Y13 19
#define NUMOS_G14 20
#define NUMOS_C14 21
#define NUMOS_Y14 22
#define NUMOS_G21 23
#define NUMOS_C21 24
#define NUMOS_Y21 25
#define NUMOS_G22 26
#define NUMOS_C22 27
#define NUMOS_Y22 28
#define NUMOS_G23 29
#define NUMOS_C23 30
#define NUMOS_Y23 31
#define NUMOS_G24 32
#define NUMOS_C24 33
#define NUMOS_Y24 34
#define NUMOS_G31 35
#define NUMOS_C31 36
#define NUMOS_Y31 37
#define NUMOS_G32 38
#define NUMOS_C32 39
#define NUMOS_Y32 40
#define NUMOS_G33 41
#define NUMOS_C33 42
#define NUMOS_Y33 43
#define NUMOS_G34 44
#define NUMOS_C34 45
#define NUMOS_Y34 46
#define NUMOS_G41 47
#define NUMOS_C41 48
#define NUMOS_Y41 49
#define NUMOS_G42 50
#define NUMOS_C42 51
#define NUMOS_Y42 52
#define NUMOS_G43 53
#define NUMOS_C43 54
#define NUMOS_Y43 55
#define NUMOS_G44 56
#define NUMOS_C44 57
#define NUMOS_Y44 58
/* model parameters */
/* NOTE: all true model parameters have been moved to IFcardInfo structures */
#define NUMOS_MOD_NUMOS 1
/* device questions */
/* model questions */
#include "numosext.h"
#endif /* NUMOS_H */