|
|
@ -54,8 +54,6 @@ typedef struct sVDMOSinstance { |
|
|
|
|
|
|
|
|
double VDMOSm; /* parallel device multiplier */ |
|
|
double VDMOSm; /* parallel device multiplier */ |
|
|
|
|
|
|
|
|
double VDMOSl; /* the length of the channel region */ |
|
|
|
|
|
double VDMOSw; /* the width of the channel region */ |
|
|
|
|
|
double VDMOSsourceConductance; /*conductance of source(or 0):set in setup*/ |
|
|
double VDMOSsourceConductance; /*conductance of source(or 0):set in setup*/ |
|
|
double VDMOSdrainConductance; /*conductance of drain(or 0):set in setup*/ |
|
|
double VDMOSdrainConductance; /*conductance of drain(or 0):set in setup*/ |
|
|
double VDMOSdrainResistance; /*resistance of drain(or 0): set in temp*/ |
|
|
double VDMOSdrainResistance; /*resistance of drain(or 0): set in temp*/ |
|
|
@ -107,6 +105,7 @@ typedef struct sVDMOSinstance { |
|
|
double VDMOScdT; |
|
|
double VDMOScdT; |
|
|
double VDMOScth; /* current alias power */ |
|
|
double VDMOScth; /* current alias power */ |
|
|
|
|
|
|
|
|
|
|
|
// double VDIOdIth_dVdio; |
|
|
/* |
|
|
/* |
|
|
* naming convention: |
|
|
* naming convention: |
|
|
* x = vgs |
|
|
* x = vgs |
|
|
@ -151,8 +150,6 @@ typedef struct sVDMOSinstance { |
|
|
unsigned VDMOStempGiven :1; /* instance temperature specified */ |
|
|
unsigned VDMOStempGiven :1; /* instance temperature specified */ |
|
|
unsigned VDMOSdtempGiven :1; /* instance delta temperature specified */ |
|
|
unsigned VDMOSdtempGiven :1; /* instance delta temperature specified */ |
|
|
unsigned VDMOSmGiven :1; |
|
|
unsigned VDMOSmGiven :1; |
|
|
unsigned VDMOSlGiven :1; |
|
|
|
|
|
unsigned VDMOSwGiven :1; |
|
|
|
|
|
unsigned VDMOSdNodePrimeSet :1; |
|
|
unsigned VDMOSdNodePrimeSet :1; |
|
|
unsigned VDMOSsNodePrimeSet :1; |
|
|
unsigned VDMOSsNodePrimeSet :1; |
|
|
unsigned VDMOSicVDSGiven :1; |
|
|
unsigned VDMOSicVDSGiven :1; |
|
|
@ -163,68 +160,68 @@ typedef struct sVDMOSinstance { |
|
|
unsigned VDMOSmodeGiven :1; |
|
|
unsigned VDMOSmodeGiven :1; |
|
|
|
|
|
|
|
|
double *VDMOSDdPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSDdPtr; /* pointer to sparse matrix element at |
|
|
* (Drain node,drain node) */ |
|
|
|
|
|
|
|
|
(Drain node,drain node) */ |
|
|
double *VDMOSGgPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSGgPtr; /* pointer to sparse matrix element at |
|
|
* (gate node,gate node) */ |
|
|
|
|
|
|
|
|
(gate node,gate node) */ |
|
|
double *VDMOSSsPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSSsPtr; /* pointer to sparse matrix element at |
|
|
* (source node,source node) */ |
|
|
|
|
|
|
|
|
(source node,source node) */ |
|
|
double *VDMOSDPdpPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSDPdpPtr; /* pointer to sparse matrix element at |
|
|
* (drain prime node,drain prime node) */ |
|
|
|
|
|
|
|
|
(drain prime node,drain prime node) */ |
|
|
double *VDMOSSPspPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSSPspPtr; /* pointer to sparse matrix element at |
|
|
* (source prime node,source prime node) */ |
|
|
|
|
|
|
|
|
(source prime node,source prime node) */ |
|
|
double *VDMOSDdpPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSDdpPtr; /* pointer to sparse matrix element at |
|
|
* (drain node,drain prime node) */ |
|
|
|
|
|
|
|
|
(drain node,drain prime node) */ |
|
|
double *VDMOSGdpPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSGdpPtr; /* pointer to sparse matrix element at |
|
|
* (gate node,drain prime node) */ |
|
|
|
|
|
|
|
|
(gate node,drain prime node) */ |
|
|
double *VDMOSGspPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSGspPtr; /* pointer to sparse matrix element at |
|
|
* (gate node,source prime node) */ |
|
|
|
|
|
|
|
|
(gate node,source prime node) */ |
|
|
double *VDMOSSspPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSSspPtr; /* pointer to sparse matrix element at |
|
|
* (source node,source prime node) */ |
|
|
|
|
|
|
|
|
(source node,source prime node) */ |
|
|
double *VDMOSDPspPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSDPspPtr; /* pointer to sparse matrix element at |
|
|
* (drain prime node,source prime node) */ |
|
|
|
|
|
|
|
|
(drain prime node,source prime node) */ |
|
|
double *VDMOSDPdPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSDPdPtr; /* pointer to sparse matrix element at |
|
|
* (drain prime node,drain node) */ |
|
|
|
|
|
|
|
|
(drain prime node,drain node) */ |
|
|
double *VDMOSDPgPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSDPgPtr; /* pointer to sparse matrix element at |
|
|
* (drain prime node,gate node) */ |
|
|
|
|
|
|
|
|
(drain prime node,gate node) */ |
|
|
|
|
|
|
|
|
double *VDMOSSPgPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSSPgPtr; /* pointer to sparse matrix element at |
|
|
* (source prime node,gate node) */ |
|
|
|
|
|
|
|
|
(source prime node,gate node) */ |
|
|
double *VDMOSSPsPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSSPsPtr; /* pointer to sparse matrix element at |
|
|
* (source prime node,source node) */ |
|
|
|
|
|
|
|
|
(source prime node,source node) */ |
|
|
double *VDMOSSPdpPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSSPdpPtr; /* pointer to sparse matrix element at |
|
|
* (source prime node,drain prime node) */ |
|
|
|
|
|
|
|
|
(source prime node,drain prime node) */ |
|
|
/* added for VDMOS */ |
|
|
/* added for VDMOS */ |
|
|
double *VDMOSGPgpPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSGPgpPtr; /* pointer to sparse matrix element at |
|
|
* (gate prime node, gate prime node) */ |
|
|
|
|
|
|
|
|
(gate prime node, gate prime node) */ |
|
|
double *VDMOSGPdpPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSGPdpPtr; /* pointer to sparse matrix element at |
|
|
* (gate prime node, drain prime node) */ |
|
|
|
|
|
|
|
|
(gate prime node, drain prime node) */ |
|
|
double *VDMOSGPspPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSGPspPtr; /* pointer to sparse matrix element at |
|
|
* (gate prime node, source prime node) */ |
|
|
|
|
|
|
|
|
(gate prime node, source prime node) */ |
|
|
double *VDMOSDPgpPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSDPgpPtr; /* pointer to sparse matrix element at |
|
|
* (drain prime node, gate prime node) */ |
|
|
|
|
|
|
|
|
(drain prime node, gate prime node) */ |
|
|
double *VDMOSSPgpPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSSPgpPtr; /* pointer to sparse matrix element at |
|
|
* (source prime node, gate prime node) */ |
|
|
|
|
|
|
|
|
(source prime node, gate prime node) */ |
|
|
double *VDMOSGgpPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSGgpPtr; /* pointer to sparse matrix element at |
|
|
* (gate node, gate prime node) */ |
|
|
|
|
|
|
|
|
(gate node, gate prime node) */ |
|
|
double *VDMOSGPgPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSGPgPtr; /* pointer to sparse matrix element at |
|
|
* (gate prime node, gate node) */ |
|
|
|
|
|
|
|
|
(gate prime node, gate node) */ |
|
|
double *VDMOSDsPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSDsPtr; /* pointer to sparse matrix element at |
|
|
* (source node, drain node) */ |
|
|
|
|
|
|
|
|
(source node, drain node) */ |
|
|
double *VDMOSSdPtr; /* pointer to sparse matrix element at |
|
|
double *VDMOSSdPtr; /* pointer to sparse matrix element at |
|
|
* (drain node, source node) */ |
|
|
|
|
|
|
|
|
(drain node, source node) */ |
|
|
/* body diode */ |
|
|
/* body diode */ |
|
|
double *VDIORPdPtr; /* pointer to sparse matrix element at |
|
|
double *VDIORPdPtr; /* pointer to sparse matrix element at |
|
|
* (diode prime node, drain node) */ |
|
|
|
|
|
|
|
|
(diode prime node, drain node) */ |
|
|
double *VDIODrpPtr; /* pointer to sparse matrix element at |
|
|
double *VDIODrpPtr; /* pointer to sparse matrix element at |
|
|
* (drain node, diode prime node) */ |
|
|
|
|
|
|
|
|
(drain node, diode prime node) */ |
|
|
double *VDIORPrpPtr; /* pointer to sparse matrix element at |
|
|
double *VDIORPrpPtr; /* pointer to sparse matrix element at |
|
|
* (diode prime node, diode prime node) */ |
|
|
|
|
|
|
|
|
(diode prime node, diode prime node) */ |
|
|
double *VDIOSrpPtr; /* pointer to sparse matrix element at |
|
|
double *VDIOSrpPtr; /* pointer to sparse matrix element at |
|
|
* (source node, diode prime node) */ |
|
|
|
|
|
|
|
|
(source node, diode prime node) */ |
|
|
double *VDIORPsPtr; /* pointer to sparse matrix element at |
|
|
double *VDIORPsPtr; /* pointer to sparse matrix element at |
|
|
* (diode prime node, source node) */ |
|
|
|
|
|
|
|
|
(diode prime node, source node) */ |
|
|
/* self heating */ |
|
|
/* self heating */ |
|
|
double *VDMOSTemptempPtr; |
|
|
|
|
|
|
|
|
double *VDMOSTemptempPtr; /* Transistor thermal contribution */ |
|
|
double *VDMOSTempdpPtr; |
|
|
double *VDMOSTempdpPtr; |
|
|
double *VDMOSTempspPtr; |
|
|
double *VDMOSTempspPtr; |
|
|
double *VDMOSTempgpPtr; |
|
|
double *VDMOSTempgpPtr; |
|
|
@ -232,14 +229,17 @@ typedef struct sVDMOSinstance { |
|
|
double *VDMOSDPtempPtr; |
|
|
double *VDMOSDPtempPtr; |
|
|
double *VDMOSSPtempPtr; |
|
|
double *VDMOSSPtempPtr; |
|
|
|
|
|
|
|
|
|
|
|
double *VDIOTempposPrimePtr; /* Diode thermal contribution */ |
|
|
|
|
|
double *VDIOTempnegPtr; |
|
|
|
|
|
double *VDIOPosPrimetempPtr; |
|
|
|
|
|
double *VDIONegtempPtr; |
|
|
|
|
|
|
|
|
double *VDMOSTcasetcasePtr; /* for Rthjc */ |
|
|
double *VDMOSTcasetcasePtr; /* for Rthjc */ |
|
|
double *VDMOSTcasetempPtr; |
|
|
double *VDMOSTcasetempPtr; |
|
|
double *VDMOSTemptcasePtr; |
|
|
double *VDMOSTemptcasePtr; |
|
|
|
|
|
|
|
|
double *VDMOSTptpPtr; /* for Rthca */ |
|
|
double *VDMOSTptpPtr; /* for Rthca */ |
|
|
double *VDMOSTptcasePtr; |
|
|
double *VDMOSTptcasePtr; |
|
|
double *VDMOSTcasetpPtr; |
|
|
double *VDMOSTcasetpPtr; |
|
|
|
|
|
|
|
|
double *VDMOSCktTcktTPtr; /* for VcktTemp */ |
|
|
double *VDMOSCktTcktTPtr; /* for VcktTemp */ |
|
|
double *VDMOSCktTtpPtr; |
|
|
double *VDMOSCktTtpPtr; |
|
|
double *VDMOSTpcktTPtr; |
|
|
double *VDMOSTpcktTPtr; |
|
|
@ -248,7 +248,7 @@ typedef struct sVDMOSinstance { |
|
|
|
|
|
|
|
|
#define VDMOSvgs VDMOSstates+ 0 /* gate-source voltage */ |
|
|
#define VDMOSvgs VDMOSstates+ 0 /* gate-source voltage */ |
|
|
#define VDMOSvds VDMOSstates+ 1 /* drain-source voltage */ |
|
|
#define VDMOSvds VDMOSstates+ 1 /* drain-source voltage */ |
|
|
#define VDMOSdelTemp VDMOSstates+ 2 |
|
|
|
|
|
|
|
|
#define VDMOSdelTemp VDMOSstates+ 2 /* thermal voltage over rth0 */ |
|
|
|
|
|
|
|
|
#define VDMOScapgs VDMOSstates+3 /* gate-source capacitor value */ |
|
|
#define VDMOScapgs VDMOSstates+3 /* gate-source capacitor value */ |
|
|
#define VDMOSqgs VDMOSstates+ 4 /* gate-source capacitor charge */ |
|
|
#define VDMOSqgs VDMOSstates+ 4 /* gate-source capacitor charge */ |
|
|
@ -261,14 +261,17 @@ typedef struct sVDMOSinstance { |
|
|
#define VDIOvoltage VDMOSstates+ 9 |
|
|
#define VDIOvoltage VDMOSstates+ 9 |
|
|
#define VDIOcurrent VDMOSstates+ 10 |
|
|
#define VDIOcurrent VDMOSstates+ 10 |
|
|
#define VDIOconduct VDMOSstates+ 11 |
|
|
#define VDIOconduct VDMOSstates+ 11 |
|
|
|
|
|
|
|
|
#define VDIOcapCharge VDMOSstates+ 12 |
|
|
#define VDIOcapCharge VDMOSstates+ 12 |
|
|
#define VDIOcapCurrent VDMOSstates+ 13 |
|
|
#define VDIOcapCurrent VDMOSstates+ 13 |
|
|
|
|
|
|
|
|
#define VDMOScapth VDMOSstates+ 14 /* thermal capacitor value */ |
|
|
|
|
|
#define VDMOSqth VDMOSstates+ 15 /* thermal capacitor charge */ |
|
|
|
|
|
#define VDMOScqth VDMOSstates+ 16 /* thermal capacitor current */ |
|
|
|
|
|
|
|
|
#define VDMOScapth VDMOSstates+ 14 /* thermal capacitor value */ |
|
|
|
|
|
#define VDMOSqth VDMOSstates+ 15 /* thermal capacitor charge */ |
|
|
|
|
|
#define VDMOScqth VDMOSstates+ 16 /* thermal capacitor current */ |
|
|
|
|
|
|
|
|
|
|
|
#define VDIOdIdio_dT VDMOSstates+ 17 |
|
|
|
|
|
|
|
|
#define VDMOSnumStates 17 |
|
|
|
|
|
|
|
|
#define VDMOSnumStates 18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* per model data */ |
|
|
/* per model data */ |
|
|
@ -428,9 +431,7 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */ |
|
|
|
|
|
|
|
|
/* device parameters */ |
|
|
/* device parameters */ |
|
|
enum { |
|
|
enum { |
|
|
VDMOS_W = 1, |
|
|
|
|
|
VDMOS_L, |
|
|
|
|
|
VDMOS_OFF, |
|
|
|
|
|
|
|
|
VDMOS_OFF = 1, |
|
|
VDMOS_IC, |
|
|
VDMOS_IC, |
|
|
VDMOS_IC_VDS, |
|
|
VDMOS_IC_VDS, |
|
|
VDMOS_IC_VGS, |
|
|
VDMOS_IC_VGS, |
|
|
|