missing model parameters added

This commit is contained in:
Holger Vogt 2018-04-09 20:11:45 +02:00 committed by rlar
parent a4dc84ae35
commit 1ce7fef519
5 changed files with 59 additions and 0 deletions

View File

@ -92,6 +92,10 @@ IFparm VDMOSmPTable[] = { /* model parameters */
IOP("rg", VDMOS_MOD_RG, IF_REAL, "Gate ohmic resistance"),
/* body diode */
IOP("bv", VDMOS_MOD_BV, IF_REAL, "Vds breakdown voltage"),
IOP("ibv", VDMOS_MOD_IBV, IF_REAL, "Current at Vds=bv"),
IOP("nbv", VDMOS_MOD_NBV, IF_REAL, "Vds breakdown emission coefficient"),
IOP("rb", VDMOS_MOD_RB, IF_REAL, "Body diode ohmic resistance"),
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"),

View File

@ -299,6 +299,12 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
double VDMOSa;
double VDMOScgs;
double VDMOSDbv;
double VDMOSDibv;
double VDIObrkdEmissionCoeff;
double VDIOresistance;
double VDIOresistTemp1;
double VDIOresistTemp2;
double VDMOSDn;
double VDIOtransitTime;
double VDMOSDeg;
@ -325,6 +331,10 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
unsigned VDMOScgsGiven :1;
unsigned VDMOSaGiven :1;
unsigned VDMOSDbvGiven :1;
unsigned VDMOSDibvGiven :1;
unsigned VDIObrkdEmissionCoeffGiven :1;
unsigned VDIOresistanceGiven :1;
unsigned VDMOSDnGiven :1;
unsigned VDIOtransitTimeGiven :1;
unsigned VDMOSDegGiven :1;
@ -379,6 +389,10 @@ enum {
VDMOS_MOD_CGDMAX,
VDMOS_MOD_A,
VDMOS_MOD_CGS,
VDMOS_MOD_RB,
VDMOS_MOD_BV,
VDMOS_MOD_IBV,
VDMOS_MOD_NBV,
VDMOS_MOD_N,
VDMOS_MOD_TT,
VDMOS_MOD_EG,

View File

@ -63,6 +63,11 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
case VDMOS_MOD_CGS:
value->rValue = model->VDMOScgs;
return(OK);
/* body diode */
case VDMOS_MOD_RB:
value->rValue = model->VDIOresistance;
return(OK);
case VDMOS_MOD_IS:
value->rValue = model->VDMOSjctSatCur;
return(OK);
@ -75,6 +80,15 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
case VDMOS_MOD_MJ:
value->rValue = model->VDMOSbulkJctBotGradingCoeff;
return(OK);
case VDMOS_MOD_BV:
value->rValue = model->VDMOSDbv;
return(OK);
case VDMOS_MOD_IBV:
value->rValue = model->VDMOSDibv;
return(OK);
case VDMOS_MOD_NBV:
value->rValue = model->VDIObrkdEmissionCoeff;
return(OK);
case VDMOS_MOD_FC:
value->rValue = model->VDMOSfwdCapDepCoeff;
return(OK);

View File

@ -47,6 +47,12 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel)
model->VDMOSgateResistance = value->rValue;
model->VDMOSgateResistanceGiven = TRUE;
break;
case VDMOS_MOD_RB:
model->VDIOresistance = value->rValue;
model->VDIOresistanceGiven = TRUE;
model->VDIOresistTemp1 = 0;
model->VDIOresistTemp2 = 0;
break;
case VDMOS_MOD_IS:
model->VDMOSjctSatCur = value->rValue;
model->VDMOSjctSatCurGiven = TRUE;
@ -105,6 +111,18 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel)
model->VDMOScgs = value->rValue;
model->VDMOScgsGiven = TRUE;
break;
case VDMOS_MOD_BV:
model->VDMOSDbv = value->rValue;
model->VDMOSDbvGiven = TRUE;
break;
case VDMOS_MOD_IBV:
model->VDMOSDibv = value->rValue;
model->VDMOSDibvGiven = TRUE;
break;
case VDMOS_MOD_NBV:
model->VDIObrkdEmissionCoeff = value->rValue;
model->VDIObrkdEmissionCoeffGiven = TRUE;
break;
case VDMOS_MOD_N:
model->VDMOSDn = value->rValue;
model->VDMOSDnGiven = TRUE;

View File

@ -72,6 +72,15 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
if (!model->VDMOSaGiven) {
model->VDMOSa = 1.;
}
if (!model->VDMOSDbvGiven) {
model->VDMOSDbv = 1.0e30;
}
if (!model->VDMOSDibvGiven) {
model->VDMOSDibv = 1.0e-10;
}
if (!model->VDIObrkdEmissionCoeffGiven) {
model->VDIObrkdEmissionCoeff = 1.;
}
if (!model->VDMOSDnGiven) {
model->VDMOSDn = 1.;
}