missing model parameters added

This commit is contained in:
Holger Vogt 2018-04-06 00:25:23 +02:00 committed by rlar
parent 0dc0aa06c4
commit a4dc84ae35
5 changed files with 57 additions and 6 deletions

View File

@ -90,12 +90,12 @@ IFparm VDMOSmPTable[] = { /* model parameters */
IOP("rd", VDMOS_MOD_RD, IF_REAL, "Drain ohmic resistance"),
IOP("rs", VDMOS_MOD_RS, IF_REAL, "Source ohmic resistance"),
IOP("rg", VDMOS_MOD_RG, IF_REAL, "Gate ohmic resistance"),
/*
N Bulk diode emission coefficient
tt Body diode transit time
Eg Body diode activation energy for temperature effect on Is
Xti Body diode saturation current temperature exponent
*/
/* body diode */
IOP("n", VDMOS_MOD_N, IF_REAL, "Bulk diode emission coefficient"),
IOP("tt", VDMOS_MOD_TT, IF_REAL, "Body diode transit time"),
IOP("eg", VDMOS_MOD_EG, IF_REAL, "Body diode activation energy for temperature effect on Is"),
IOP("Xti", VDMOS_MOD_XTI, IF_REAL, "Body diode saturation current temperature exponent"),
IOP("is", VDMOS_MOD_IS, IF_REAL, "Body diode saturation current"),
IOP("vj", VDMOS_MOD_VJ, IF_REAL, "Body diode junction potential"),

View File

@ -299,6 +299,11 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
double VDMOSa;
double VDMOScgs;
double VDMOSDn;
double VDIOtransitTime;
double VDMOSDeg;
double VDMOSDxti;
unsigned VDMOStypeGiven :1;
unsigned VDMOSjctSatCurGiven :1;
unsigned VDMOSdrainResistanceGiven :1;
@ -320,6 +325,11 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
unsigned VDMOScgsGiven :1;
unsigned VDMOSaGiven :1;
unsigned VDMOSDnGiven :1;
unsigned VDIOtransitTimeGiven :1;
unsigned VDMOSDegGiven :1;
unsigned VDMOSDxtiGiven :1;
} VDMOSmodel;
#ifndef NMOS
@ -369,6 +379,10 @@ enum {
VDMOS_MOD_CGDMAX,
VDMOS_MOD_A,
VDMOS_MOD_CGS,
VDMOS_MOD_N,
VDMOS_MOD_TT,
VDMOS_MOD_EG,
VDMOS_MOD_XTI,
};
/* device questions */

View File

@ -66,6 +66,9 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
case VDMOS_MOD_IS:
value->rValue = model->VDMOSjctSatCur;
return(OK);
case VDMOS_MOD_N:
value->rValue = model->VDMOSDn;
return(OK);
case VDMOS_MOD_VJ:
value->rValue = model->VDMOSbulkJctPotential;
return(OK);
@ -75,6 +78,15 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
case VDMOS_MOD_FC:
value->rValue = model->VDMOSfwdCapDepCoeff;
return(OK);
case VDMOS_MOD_TT:
value->rValue = model->VDIOtransitTime;
return(OK);
case VDMOS_MOD_EG:
value->rValue = model->VDMOSDeg;
return(OK);
case VDMOS_MOD_XTI:
value->rValue = model->VDMOSDxti;
return(OK);
default:
return(E_BADPARM);
}

View File

@ -105,6 +105,22 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel)
model->VDMOScgs = value->rValue;
model->VDMOScgsGiven = TRUE;
break;
case VDMOS_MOD_N:
model->VDMOSDn = value->rValue;
model->VDMOSDnGiven = TRUE;
break;
case VDMOS_MOD_TT:
model->VDIOtransitTime = value->rValue;
model->VDIOtransitTimeGiven = TRUE;
break;
case VDMOS_MOD_EG:
model->VDMOSDeg = value->rValue;
model->VDMOSDegGiven = TRUE;
break;
case VDMOS_MOD_XTI:
model->VDMOSDxti = value->rValue;
model->VDMOSDxtiGiven = TRUE;
break;
default:
return(E_BADPARM);
}

View File

@ -72,6 +72,15 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
if (!model->VDMOSaGiven) {
model->VDMOSa = 1.;
}
if (!model->VDMOSDnGiven) {
model->VDMOSDn = 1.;
}
if (!model->VDIOtransitTimeGiven) {
model->VDIOtransitTime = 0.;
}
if (!model->VDMOSDegGiven) {
model->VDMOSDeg = 1.11;
}
/* loop through all the instances of the model */
for (here = VDMOSinstances(model); here != NULL;