capacitance parameters cgdmin, cgdmax, a, cgs completely installed

This commit is contained in:
Holger Vogt 2018-04-02 14:30:26 +02:00 committed by rlar
parent eb1df52743
commit 389c888948
5 changed files with 59 additions and 0 deletions

View File

@ -107,6 +107,12 @@ IFparm VDMOSmPTable[] = { /* model parameters */
Xti Body diode saturation current temperature exponent
*/
/* gate-source and gate-drain capacitances */
IOPA("cgdmin", VDMOS_MOD_CGDMIN, IF_REAL, "Minimum non-linear G-D capacitance"),
IOPA("cgdmax", VDMOS_MOD_CGDMAX, IF_REAL, "Maximum non-linear G-D capacitance"),
IOPA("a", VDMOS_MOD_A, IF_REAL, "Non-linear Cgd capacitance parameter"),
IOPA("cgs", VDMOS_MOD_CGS, IF_REAL, "Gate-source capacitance"),
IOP("tnom", VDMOS_MOD_TNOM, IF_REAL, "Parameter measurement temperature"),
IOP("kf", VDMOS_MOD_KF, IF_REAL, "Flicker noise coefficient"),
IOP("af", VDMOS_MOD_AF, IF_REAL, "Flicker noise exponent"),

View File

@ -309,6 +309,10 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
double VDMOSsurfaceMobility; /* input - use tSurfMob */
double VDMOSfNcoef;
double VDMOSfNexp;
double VDMOScgdmin;
double VDMOScgdmax;
double VDMOSa;
double VDMOScgs;
unsigned VDMOStypeGiven :1;
unsigned VDMOSlatDiffGiven :1;
@ -342,6 +346,11 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
unsigned VDMOSfNcoefGiven :1;
unsigned VDMOSfNexpGiven :1;
unsigned VDMOScgdminGiven :1;
unsigned VDMOScgdmaxGiven :1;
unsigned VDMOScgsGiven :1;
unsigned VDMOSaGiven :1;
} VDMOSmodel;
#ifndef NMOS
@ -409,6 +418,10 @@ enum {
VDMOS_MOD_AF,
VDMOS_MOD_TYPE,
VDMOS_MOD_DMOS,
VDMOS_MOD_CGDMIN,
VDMOS_MOD_CGDMAX,
VDMOS_MOD_A,
VDMOS_MOD_CGS,
};
/* device questions */

View File

@ -54,9 +54,21 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
else
value->sValue = "vdmosp";
return(OK);
case VDMOS_MOD_CGDMIN:
value->rValue = model->VDMOScgdmin;
return(OK);
case VDMOS_MOD_CBS:
value->rValue = model->VDMOScapBS;
return(OK);
case VDMOS_MOD_CGDMAX:
value->rValue = model->VDMOScgdmax;
return(OK);
case VDMOS_MOD_A:
value->rValue = model->VDMOSa;
return(OK);
case VDMOS_MOD_CGS:
value->rValue = model->VDMOScgs;
return(OK);
case VDMOS_MOD_IS:
value->rValue = model->VDMOSjctSatCur;
return(OK);

View File

@ -153,6 +153,22 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel)
model->VDMOStypeGiven = TRUE;
}
break;
case VDMOS_MOD_CGDMIN:
model->VDMOScgdmin = value->rValue;
model->VDMOScgdminGiven = TRUE;
break;
case VDMOS_MOD_CGDMAX:
model->VDMOScgdmax = value->rValue;
model->VDMOScgdmaxGiven = TRUE;
break;
case VDMOS_MOD_A:
model->VDMOSa = value->rValue;
model->VDMOSaGiven = TRUE;
break;
case VDMOS_MOD_CGS:
model->VDMOScgs = value->rValue;
model->VDMOScgsGiven = TRUE;
break;
default:
return(E_BADPARM);
}

View File

@ -87,6 +87,18 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
if(!model->VDMOSfNexpGiven) {
model->VDMOSfNexp = 1;
}
if (!model->VDMOScgdminGiven) {
model->VDMOScgdmin = 0;
}
if (!model->VDMOScgdmaxGiven) {
model->VDMOScgdmax = 0;
}
if (!model->VDMOScgsGiven) {
model->VDMOScgs = 0;
}
if (!model->VDMOSaGiven) {
model->VDMOSa = 1.;
}
/* loop through all the instances of the model */
for (here = VDMOSinstances(model); here != NULL ;