Browse Source

capacitance parameters cgdmin, cgdmax, a, cgs completely installed

pre-master-46
Holger Vogt 8 years ago
committed by rlar
parent
commit
389c888948
  1. 6
      src/spicelib/devices/vdmos/vdmos.c
  2. 13
      src/spicelib/devices/vdmos/vdmosdefs.h
  3. 12
      src/spicelib/devices/vdmos/vdmosmask.c
  4. 16
      src/spicelib/devices/vdmos/vdmosmpar.c
  5. 12
      src/spicelib/devices/vdmos/vdmosset.c

6
src/spicelib/devices/vdmos/vdmos.c

@ -107,6 +107,12 @@ IFparm VDMOSmPTable[] = { /* model parameters */
Xti Body diode saturation current temperature exponent 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("tnom", VDMOS_MOD_TNOM, IF_REAL, "Parameter measurement temperature"),
IOP("kf", VDMOS_MOD_KF, IF_REAL, "Flicker noise coefficient"), IOP("kf", VDMOS_MOD_KF, IF_REAL, "Flicker noise coefficient"),
IOP("af", VDMOS_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP("af", VDMOS_MOD_AF, IF_REAL, "Flicker noise exponent"),

13
src/spicelib/devices/vdmos/vdmosdefs.h

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

12
src/spicelib/devices/vdmos/vdmosmask.c

@ -54,9 +54,21 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
else else
value->sValue = "vdmosp"; value->sValue = "vdmosp";
return(OK); return(OK);
case VDMOS_MOD_CGDMIN:
value->rValue = model->VDMOScgdmin;
return(OK);
case VDMOS_MOD_CBS: case VDMOS_MOD_CBS:
value->rValue = model->VDMOScapBS; value->rValue = model->VDMOScapBS;
return(OK); 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: case VDMOS_MOD_IS:
value->rValue = model->VDMOSjctSatCur; value->rValue = model->VDMOSjctSatCur;
return(OK); return(OK);

16
src/spicelib/devices/vdmos/vdmosmpar.c

@ -153,6 +153,22 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel)
model->VDMOStypeGiven = TRUE; model->VDMOStypeGiven = TRUE;
} }
break; 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: default:
return(E_BADPARM); return(E_BADPARM);
} }

12
src/spicelib/devices/vdmos/vdmosset.c

@ -87,6 +87,18 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
if(!model->VDMOSfNexpGiven) { if(!model->VDMOSfNexpGiven) {
model->VDMOSfNexp = 1; 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 */ /* loop through all the instances of the model */
for (here = VDMOSinstances(model); here != NULL ; for (here = VDMOSinstances(model); here != NULL ;

Loading…
Cancel
Save