mobility and substrate related parameters and equations removed
This commit is contained in:
parent
9df45731e9
commit
5b8c8072f3
|
|
@ -115,19 +115,6 @@ IFparm VDMOSmPTable[] = { /* model parameters */
|
|||
IP("vdmosn", VDMOS_MOD_NMOS, IF_FLAG, "N type DMOSfet model"),
|
||||
IP("vdmosp", VDMOS_MOD_PMOS, IF_FLAG, "P type DMOSfet model"),
|
||||
IP("vdmos", VDMOS_MOD_DMOS, IF_REAL, "DMOS transistor"),
|
||||
|
||||
/* MOS1 */
|
||||
IOP("gamma", VDMOS_MOD_GAMMA, IF_REAL, "Bulk threshold parameter"),
|
||||
IOPA("cbd", VDMOS_MOD_CBD, IF_REAL, "B-D junction capacitance"),
|
||||
IOPA("cbs", VDMOS_MOD_CBS, IF_REAL, "B-S junction capacitance"),
|
||||
IOPA("cj", VDMOS_MOD_CJ, IF_REAL, "Bottom junction cap per area"),
|
||||
IOP("js", VDMOS_MOD_JS, IF_REAL, "Bulk jct. sat. current density"),
|
||||
IOP("tox", VDMOS_MOD_TOX, IF_REAL, "Oxide thickness"),
|
||||
IOP("u0", VDMOS_MOD_U0, IF_REAL, "Surface mobility"),
|
||||
IOPR("uo", VDMOS_MOD_U0, IF_REAL, "Surface mobility"),
|
||||
IOP("nsub", VDMOS_MOD_NSUB, IF_REAL, "Substrate doping"),
|
||||
IOP("tpg", VDMOS_MOD_TPG, IF_INTEGER,"Gate type"),
|
||||
IOP("nss", VDMOS_MOD_NSS, IF_REAL, "Surface state density")
|
||||
};
|
||||
|
||||
char *VDMOSnames[] = {
|
||||
|
|
|
|||
|
|
@ -57,18 +57,11 @@ typedef struct sVDMOSinstance {
|
|||
double VDMOSdtemp; /* operating temperature of the instance relative to circuit temperature*/
|
||||
|
||||
double VDMOStTransconductance; /* temperature corrected transconductance*/
|
||||
double VDMOStSurfMob; /* temperature corrected surface mobility */
|
||||
double VDMOStPhi; /* temperature corrected Phi */
|
||||
double VDMOStVto; /* temperature corrected Vto */
|
||||
double VDMOStSatCur; /* temperature corrected saturation Cur. */
|
||||
double VDMOStSatCurDens; /* temperature corrected saturation Cur. density*/
|
||||
double VDMOStCbd; /* temperature corrected B-D Capacitance */
|
||||
double VDMOStCbs; /* temperature corrected B-S Capacitance */
|
||||
double VDMOStCj; /* temperature corrected Bulk bottom Capacitance */
|
||||
double VDMOStBulkPot; /* temperature corrected Bulk potential */
|
||||
double VDMOStDepCap; /* temperature adjusted transition point in */
|
||||
/* the cureve matching Fc * Vj */
|
||||
double VDMOStVbi; /* temperature adjusted Vbi */
|
||||
|
||||
double VDMOSicVBS; /* initial condition B-S voltage */
|
||||
double VDMOSicVDS; /* initial condition D-S voltage */
|
||||
|
|
@ -285,7 +278,6 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
|
|||
|
||||
int VDMOStype; /* device type : 1 = nmos, -1 = pmos */
|
||||
double VDMOStnom; /* temperature at which parameters measured */
|
||||
double VDMOSjctSatCurDensity; /* input - use tSatCurDens */
|
||||
double VDMOSjctSatCur; /* input - use tSatCur */
|
||||
double VDMOSdrainResistance;
|
||||
double VDMOSsourceResistance;
|
||||
|
|
@ -294,20 +286,11 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
|
|||
double VDMOStransconductance; /* input - use tTransconductance */
|
||||
double VDMOSoxideCapFactor;
|
||||
double VDMOSvt0; /* input - use tVto */
|
||||
double VDMOScapBD; /* input - use tCbd */
|
||||
double VDMOScapBS; /* input - use tCbs */
|
||||
double VDMOSbulkCapFactor; /* input - use tCj */
|
||||
double VDMOSbulkJctPotential; /* input - use tBulkPot */
|
||||
double VDMOSbulkJctBotGradingCoeff;
|
||||
double VDMOSfwdCapDepCoeff;
|
||||
double VDMOSphi; /* input - use tPhi */
|
||||
double VDMOSgamma;
|
||||
double VDMOSlambda;
|
||||
double VDMOSsubstrateDoping;
|
||||
int VDMOSgateType;
|
||||
double VDMOSsurfaceStateDensity;
|
||||
double VDMOSoxideThickness;
|
||||
double VDMOSsurfaceMobility; /* input - use tSurfMob */
|
||||
double VDMOSfNcoef;
|
||||
double VDMOSfNexp;
|
||||
double VDMOScgdmin;
|
||||
|
|
@ -316,27 +299,17 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
|
|||
double VDMOScgs;
|
||||
|
||||
unsigned VDMOStypeGiven :1;
|
||||
unsigned VDMOSjctSatCurDensityGiven :1;
|
||||
unsigned VDMOSjctSatCurGiven :1;
|
||||
unsigned VDMOSdrainResistanceGiven :1;
|
||||
unsigned VDMOSsourceResistanceGiven :1;
|
||||
unsigned VDMOSgateResistanceGiven :1;
|
||||
unsigned VDMOStransconductanceGiven :1;
|
||||
unsigned VDMOSvt0Given :1;
|
||||
unsigned VDMOScapBDGiven :1;
|
||||
unsigned VDMOScapBSGiven :1;
|
||||
unsigned VDMOSbulkCapFactorGiven :1;
|
||||
unsigned VDMOSbulkJctPotentialGiven :1;
|
||||
unsigned VDMOSbulkJctBotGradingCoeffGiven :1;
|
||||
unsigned VDMOSfwdCapDepCoeffGiven :1;
|
||||
unsigned VDMOSphiGiven :1;
|
||||
unsigned VDMOSgammaGiven :1;
|
||||
unsigned VDMOSlambdaGiven :1;
|
||||
unsigned VDMOSsubstrateDopingGiven :1;
|
||||
unsigned VDMOSgateTypeGiven :1;
|
||||
unsigned VDMOSsurfaceStateDensityGiven :1;
|
||||
unsigned VDMOSoxideThicknessGiven :1;
|
||||
unsigned VDMOSsurfaceMobilityGiven :1;
|
||||
unsigned VDMOStnomGiven :1;
|
||||
unsigned VDMOSfNcoefGiven :1;
|
||||
unsigned VDMOSfNexpGiven :1;
|
||||
|
|
@ -375,25 +348,15 @@ enum {
|
|||
enum {
|
||||
VDMOS_MOD_VTO = 101,
|
||||
VDMOS_MOD_KP,
|
||||
VDMOS_MOD_GAMMA,
|
||||
VDMOS_MOD_PHI,
|
||||
VDMOS_MOD_LAMBDA,
|
||||
VDMOS_MOD_RD,
|
||||
VDMOS_MOD_RS,
|
||||
VDMOS_MOD_RG,
|
||||
VDMOS_MOD_CBD,
|
||||
VDMOS_MOD_CBS,
|
||||
VDMOS_MOD_IS,
|
||||
VDMOS_MOD_VJ,
|
||||
VDMOS_MOD_CJ,
|
||||
VDMOS_MOD_MJ,
|
||||
VDMOS_MOD_JS,
|
||||
VDMOS_MOD_TOX,
|
||||
VDMOS_MOD_U0,
|
||||
VDMOS_MOD_FC,
|
||||
VDMOS_MOD_NSUB,
|
||||
VDMOS_MOD_TPG,
|
||||
VDMOS_MOD_NSS,
|
||||
VDMOS_MOD_NMOS,
|
||||
VDMOS_MOD_PMOS,
|
||||
VDMOS_MOD_TNOM,
|
||||
|
|
|
|||
|
|
@ -29,16 +29,12 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double ebd;
|
||||
double vgst;
|
||||
double evbs;
|
||||
double sargsw;
|
||||
double vbd;
|
||||
double vbs;
|
||||
double vds;
|
||||
double arg;
|
||||
double sarg;
|
||||
double vdsat;
|
||||
double vgd;
|
||||
double vgs;
|
||||
double von;
|
||||
double vt;
|
||||
double lgbs;
|
||||
double lgbs2;
|
||||
|
|
@ -67,10 +63,10 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double lcapgs3;
|
||||
double lcapgd2;
|
||||
double lcapgd3;
|
||||
double lcapbs2;
|
||||
double lcapbs3;
|
||||
double lcapbd2;
|
||||
double lcapbd3;
|
||||
double lcapbs2 = 0;
|
||||
double lcapbs3 = 0;
|
||||
double lcapbd2 = 0;
|
||||
double lcapbd3 = 0;
|
||||
double gmbds = 0.0;
|
||||
|
||||
|
||||
|
|
@ -158,37 +154,9 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double d2vondvbs2;
|
||||
double d3vondvbs3;
|
||||
|
||||
if ((here->VDMOSmode==1?vbs:vbd) <= 0 ) {
|
||||
sarg=sqrt(here->VDMOStPhi-(here->VDMOSmode==1?vbs:vbd));
|
||||
if (-model->VDMOSgamma != 0.0) {
|
||||
dvondvbs = -model->VDMOSgamma*0.5/sarg;
|
||||
d2vondvbs2 = - dvondvbs*0.5/(sarg*sarg);
|
||||
d3vondvbs3 = 1.5*d2vondvbs2/(sarg*sarg);
|
||||
}
|
||||
else {
|
||||
dvondvbs = d2vondvbs2 = d3vondvbs3 = 0.0;
|
||||
}
|
||||
} else {
|
||||
sarg=sqrt(here->VDMOStPhi);
|
||||
if (model->VDMOSgamma != 0.0) {
|
||||
dvondvbs = -model->VDMOSgamma/(sarg+sarg);
|
||||
}
|
||||
else {
|
||||
dvondvbs = 0.0;
|
||||
}
|
||||
d2vondvbs2 = d3vondvbs3 = 0;
|
||||
sarg=sarg-(here->VDMOSmode==1?vbs:vbd)/(sarg+sarg);
|
||||
sarg=MAX(0,sarg);
|
||||
dvondvbs = (sarg<=0?0:dvondvbs);
|
||||
}
|
||||
von=(here->VDMOStVbi*model->VDMOStype)+model->VDMOSgamma*sarg;
|
||||
vgst=(here->VDMOSmode==1?vgs:vgd)-von;
|
||||
vgst=(here->VDMOSmode==1?vgs:vgd);
|
||||
vdsat=MAX(vgst,0);
|
||||
/* if (sarg <= 0) {
|
||||
arg=0;
|
||||
} else {
|
||||
arg=model->VDMOSgamma/(sarg+sarg);
|
||||
} */
|
||||
if (vgst <= 0) {
|
||||
/*
|
||||
* cutoff region
|
||||
|
|
@ -314,7 +282,7 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
|
||||
|
||||
|
||||
phi = here->VDMOStPhi;
|
||||
phi = 0.6;
|
||||
cox = 0;/*FIXME: can we do disto without knowing the oxide thickness?*/
|
||||
if (vgst <= -phi) {
|
||||
lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0;
|
||||
|
|
|
|||
|
|
@ -394,26 +394,12 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*/
|
||||
double arg;
|
||||
double betap;
|
||||
double sarg;
|
||||
double vgst;
|
||||
|
||||
if ((here->VDMOSmode == 1 ? vbs : vbd) <= 0) {
|
||||
sarg = sqrt(here->VDMOStPhi - (here->VDMOSmode == 1 ? vbs : vbd));
|
||||
}
|
||||
else {
|
||||
sarg = sqrt(here->VDMOStPhi);
|
||||
sarg = sarg - (here->VDMOSmode == 1 ? vbs : vbd) / (sarg + sarg);
|
||||
sarg = MAX(0, sarg);
|
||||
}
|
||||
von = (here->VDMOStVbi*model->VDMOStype) + model->VDMOSgamma*sarg;
|
||||
von = (model->VDMOSvt0*model->VDMOStype);
|
||||
vgst = (here->VDMOSmode == 1 ? vgs : vgd) - von;
|
||||
vdsat = MAX(vgst, 0);
|
||||
if (sarg <= 0) {
|
||||
arg = 0;
|
||||
}
|
||||
else {
|
||||
arg = model->VDMOSgamma / (sarg + sarg);
|
||||
}
|
||||
arg = 0;
|
||||
if (vgst <= 0) {
|
||||
/*
|
||||
* cutoff region
|
||||
|
|
|
|||
|
|
@ -30,9 +30,6 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case VDMOS_MOD_KP:
|
||||
value->rValue = model->VDMOStransconductance;
|
||||
return(OK);
|
||||
case VDMOS_MOD_GAMMA:
|
||||
value->rValue = model->VDMOSgamma;
|
||||
return(OK);
|
||||
case VDMOS_MOD_PHI:
|
||||
value->rValue = model->VDMOSphi;
|
||||
return(OK);
|
||||
|
|
@ -48,9 +45,6 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case VDMOS_MOD_RG:
|
||||
value->rValue = model->VDMOSgateResistance;
|
||||
return(OK);
|
||||
case VDMOS_MOD_CBD:
|
||||
value->rValue = model->VDMOScapBD;
|
||||
return(OK);
|
||||
case VDMOS_MOD_TYPE:
|
||||
if (model->VDMOStype > 0)
|
||||
value->sValue = "vdmosn";
|
||||
|
|
@ -60,9 +54,6 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
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);
|
||||
|
|
@ -78,33 +69,12 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case VDMOS_MOD_VJ:
|
||||
value->rValue = model->VDMOSbulkJctPotential;
|
||||
return(OK);
|
||||
case VDMOS_MOD_CJ:
|
||||
value->rValue = model->VDMOSbulkCapFactor;
|
||||
return(OK);
|
||||
case VDMOS_MOD_MJ:
|
||||
value->rValue = model->VDMOSbulkJctBotGradingCoeff;
|
||||
return(OK);
|
||||
case VDMOS_MOD_JS:
|
||||
value->rValue = model->VDMOSjctSatCurDensity;
|
||||
return(OK);
|
||||
case VDMOS_MOD_TOX:
|
||||
value->rValue = model->VDMOSoxideThickness;
|
||||
return(OK);
|
||||
case VDMOS_MOD_U0:
|
||||
value->rValue = model->VDMOSsurfaceMobility;
|
||||
return(OK);
|
||||
case VDMOS_MOD_FC:
|
||||
value->rValue = model->VDMOSfwdCapDepCoeff;
|
||||
return(OK);
|
||||
case VDMOS_MOD_NSUB:
|
||||
value->rValue = model->VDMOSsubstrateDoping;
|
||||
return(OK);
|
||||
case VDMOS_MOD_TPG:
|
||||
value->iValue = model->VDMOSgateType;
|
||||
return(OK);
|
||||
case VDMOS_MOD_NSS:
|
||||
value->rValue = model->VDMOSsurfaceStateDensity;
|
||||
return(OK);
|
||||
default:
|
||||
return(E_BADPARM);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,10 +27,6 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel)
|
|||
model->VDMOStransconductance = value->rValue;
|
||||
model->VDMOStransconductanceGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_GAMMA:
|
||||
model->VDMOSgamma = value->rValue;
|
||||
model->VDMOSgammaGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_PHI:
|
||||
model->VDMOSphi = value->rValue;
|
||||
model->VDMOSphiGiven = TRUE;
|
||||
|
|
@ -51,14 +47,6 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel)
|
|||
model->VDMOSgateResistance = value->rValue;
|
||||
model->VDMOSgateResistanceGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_CBD:
|
||||
model->VDMOScapBD = value->rValue;
|
||||
model->VDMOScapBDGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_CBS:
|
||||
model->VDMOScapBS = value->rValue;
|
||||
model->VDMOScapBSGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_IS:
|
||||
model->VDMOSjctSatCur = value->rValue;
|
||||
model->VDMOSjctSatCurGiven = TRUE;
|
||||
|
|
@ -67,42 +55,14 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel)
|
|||
model->VDMOSbulkJctPotential = value->rValue;
|
||||
model->VDMOSbulkJctPotentialGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_CJ:
|
||||
model->VDMOSbulkCapFactor = value->rValue;
|
||||
model->VDMOSbulkCapFactorGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_MJ:
|
||||
model->VDMOSbulkJctBotGradingCoeff = value->rValue;
|
||||
model->VDMOSbulkJctBotGradingCoeffGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_JS:
|
||||
model->VDMOSjctSatCurDensity = value->rValue;
|
||||
model->VDMOSjctSatCurDensityGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_TOX:
|
||||
model->VDMOSoxideThickness = value->rValue;
|
||||
model->VDMOSoxideThicknessGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_U0:
|
||||
model->VDMOSsurfaceMobility = value->rValue;
|
||||
model->VDMOSsurfaceMobilityGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_FC:
|
||||
model->VDMOSfwdCapDepCoeff = value->rValue;
|
||||
model->VDMOSfwdCapDepCoeffGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_NSS:
|
||||
model->VDMOSsurfaceStateDensity = value->rValue;
|
||||
model->VDMOSsurfaceStateDensityGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_NSUB:
|
||||
model->VDMOSsubstrateDoping = value->rValue;
|
||||
model->VDMOSsubstrateDopingGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_TPG:
|
||||
model->VDMOSgateType = value->iValue;
|
||||
model->VDMOSgateTypeGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_NMOS:
|
||||
if(value->iValue) {
|
||||
model->VDMOStype = 1;
|
||||
|
|
|
|||
|
|
@ -30,9 +30,6 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
|
|||
if (!model->VDMOStypeGiven) {
|
||||
model->VDMOStype = NMOS;
|
||||
}
|
||||
if (!model->VDMOSjctSatCurDensityGiven) {
|
||||
model->VDMOSjctSatCurDensity = 0;
|
||||
}
|
||||
if (!model->VDMOSjctSatCurGiven) {
|
||||
model->VDMOSjctSatCur = 1e-14;
|
||||
}
|
||||
|
|
@ -42,9 +39,6 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
|
|||
if (!model->VDMOSvt0Given) {
|
||||
model->VDMOSvt0 = 0;
|
||||
}
|
||||
if (!model->VDMOSbulkCapFactorGiven) {
|
||||
model->VDMOSbulkCapFactor = 0;
|
||||
}
|
||||
if (!model->VDMOSbulkJctPotentialGiven) {
|
||||
model->VDMOSbulkJctPotential = .8;
|
||||
}
|
||||
|
|
@ -60,9 +54,6 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
|
|||
if (!model->VDMOSlambdaGiven) {
|
||||
model->VDMOSlambda = 0;
|
||||
}
|
||||
if (!model->VDMOSgammaGiven) {
|
||||
model->VDMOSgamma = 0;
|
||||
}
|
||||
if (!model->VDMOSfNcoefGiven) {
|
||||
model->VDMOSfNcoef = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,17 +22,8 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double kt,kt1;
|
||||
double arg1;
|
||||
double ratio,ratio4;
|
||||
double phio;
|
||||
double pbo;
|
||||
double gmanew,gmaold;
|
||||
double capfact;
|
||||
double pbfact1,pbfact;
|
||||
double vt,vtnom;
|
||||
double wkfngs;
|
||||
double wkfng;
|
||||
double fermig;
|
||||
double fermis;
|
||||
double vfb;
|
||||
/* loop through all the resistor models */
|
||||
for( ; model != NULL; model = VDMOSnextModel(model)) {
|
||||
|
||||
|
|
@ -52,65 +43,7 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
|
||||
/* now model parameter preprocessing */
|
||||
|
||||
if (model->VDMOSphi <= 0.0) {
|
||||
SPfrontEnd->IFerrorf (ERR_FATAL,
|
||||
"%s: Phi is not positive.", model->VDMOSmodName);
|
||||
return(E_BADPARM);
|
||||
}
|
||||
|
||||
if(!model->VDMOSoxideThicknessGiven || model->VDMOSoxideThickness == 0) {
|
||||
model->VDMOSoxideCapFactor = 0;
|
||||
} else {
|
||||
model->VDMOSoxideCapFactor = 3.9 * 8.854214871e-12/
|
||||
model->VDMOSoxideThickness;
|
||||
if(!model->VDMOStransconductanceGiven) {
|
||||
if(!model->VDMOSsurfaceMobilityGiven) {
|
||||
model->VDMOSsurfaceMobility=600;
|
||||
}
|
||||
model->VDMOStransconductance = model->VDMOSsurfaceMobility *
|
||||
model->VDMOSoxideCapFactor * 1e-4 /*(m**2/cm**2)*/;
|
||||
}
|
||||
if(model->VDMOSsubstrateDopingGiven) {
|
||||
if(model->VDMOSsubstrateDoping*1e6 /*(cm**3/m**3)*/ >1.45e16) {
|
||||
if(!model->VDMOSphiGiven) {
|
||||
model->VDMOSphi = 2*vtnom*
|
||||
log(model->VDMOSsubstrateDoping*
|
||||
1e6/*(cm**3/m**3)*//1.45e16);
|
||||
model->VDMOSphi = MAX(.1,model->VDMOSphi);
|
||||
}
|
||||
fermis = model->VDMOStype * .5 * model->VDMOSphi;
|
||||
wkfng = 3.2;
|
||||
if(!model->VDMOSgateTypeGiven) model->VDMOSgateType=1;
|
||||
if(model->VDMOSgateType != 0) {
|
||||
fermig = model->VDMOStype *model->VDMOSgateType*.5*egfet1;
|
||||
wkfng = 3.25 + .5 * egfet1 - fermig;
|
||||
}
|
||||
wkfngs = wkfng - (3.25 + .5 * egfet1 +fermis);
|
||||
if(!model->VDMOSgammaGiven) {
|
||||
model->VDMOSgamma = sqrt(2 * 11.70 * 8.854214871e-12 *
|
||||
CHARGE * model->VDMOSsubstrateDoping*
|
||||
1e6/*(cm**3/m**3)*/)/
|
||||
model->VDMOSoxideCapFactor;
|
||||
}
|
||||
if(!model->VDMOSvt0Given) {
|
||||
if(!model->VDMOSsurfaceStateDensityGiven)
|
||||
model->VDMOSsurfaceStateDensity=0;
|
||||
vfb = wkfngs -
|
||||
model->VDMOSsurfaceStateDensity *
|
||||
1e4 /*(cm**2/m**2)*/ *
|
||||
CHARGE/model->VDMOSoxideCapFactor;
|
||||
model->VDMOSvt0 = vfb + model->VDMOStype *
|
||||
(model->VDMOSgamma * sqrt(model->VDMOSphi)+
|
||||
model->VDMOSphi);
|
||||
}
|
||||
} else {
|
||||
model->VDMOSsubstrateDoping = 0;
|
||||
SPfrontEnd->IFerrorf (ERR_FATAL,
|
||||
"%s: Nsub < Ni", model->VDMOSmodName);
|
||||
return(E_BADPARM);
|
||||
}
|
||||
}
|
||||
}
|
||||
model->VDMOSoxideCapFactor = 0;
|
||||
|
||||
|
||||
/* loop through all instances of the model */
|
||||
|
|
@ -147,39 +80,7 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
|
||||
ratio4 = ratio * sqrt(ratio);
|
||||
here->VDMOStTransconductance = model->VDMOStransconductance / ratio4;
|
||||
here->VDMOStSurfMob = model->VDMOSsurfaceMobility/ratio4;
|
||||
phio= (model->VDMOSphi-pbfact1)/fact1;
|
||||
here->VDMOStPhi = fact2 * phio + pbfact;
|
||||
here->VDMOStVbi =
|
||||
model->VDMOSvt0 - model->VDMOStype *
|
||||
(model->VDMOSgamma* sqrt(model->VDMOSphi))
|
||||
+.5*(egfet1-egfet)
|
||||
+ model->VDMOStype*.5* (here->VDMOStPhi-model->VDMOSphi);
|
||||
here->VDMOStVto = here->VDMOStVbi + model->VDMOStype *
|
||||
model->VDMOSgamma * sqrt(here->VDMOStPhi);
|
||||
here->VDMOStSatCur = model->VDMOSjctSatCur*
|
||||
exp(-egfet/vt+egfet1/vtnom);
|
||||
here->VDMOStSatCurDens = model->VDMOSjctSatCurDensity *
|
||||
exp(-egfet/vt+egfet1/vtnom);
|
||||
pbo = (model->VDMOSbulkJctPotential - pbfact1)/fact1;
|
||||
gmaold = (model->VDMOSbulkJctPotential-pbo)/pbo;
|
||||
capfact = 1/(1+model->VDMOSbulkJctBotGradingCoeff*
|
||||
(4e-4*(model->VDMOStnom-REFTEMP)-gmaold));
|
||||
here->VDMOStCbd = model->VDMOScapBD * capfact;
|
||||
here->VDMOStCbs = model->VDMOScapBS * capfact;
|
||||
here->VDMOStCj = model->VDMOSbulkCapFactor * capfact;
|
||||
here->VDMOStBulkPot = fact2 * pbo+pbfact;
|
||||
gmanew = (here->VDMOStBulkPot-pbo)/pbo;
|
||||
capfact = (1+model->VDMOSbulkJctBotGradingCoeff*
|
||||
(4e-4*(here->VDMOStemp-REFTEMP)-gmanew));
|
||||
here->VDMOStCbd *= capfact;
|
||||
here->VDMOStCbs *= capfact;
|
||||
here->VDMOStCj *= capfact;
|
||||
here->VDMOStDepCap = model->VDMOSfwdCapDepCoeff * here->VDMOStBulkPot;
|
||||
if (here->VDMOStSatCurDens == 0) {
|
||||
here->VDMOSsourceVcrit = here->VDMOSdrainVcrit =
|
||||
vt*log(vt/(CONSTroot2*here->VDMOSm*here->VDMOStSatCur));
|
||||
}
|
||||
here->VDMOStVto = model->VDMOSvt0;
|
||||
|
||||
here->VDMOSCbd = 0;
|
||||
here->VDMOSf2d = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue