lateral diffusion and overlap capacitance removed
This commit is contained in:
parent
e0ddc38519
commit
84005efe8b
|
|
@ -132,7 +132,6 @@ IFparm VDMOSmPTable[] = { /* model parameters */
|
||||||
IOP("mjsw", VDMOS_MOD_MJSW, IF_REAL, "Side grading coefficient"),
|
IOP("mjsw", VDMOS_MOD_MJSW, IF_REAL, "Side grading coefficient"),
|
||||||
IOP("js", VDMOS_MOD_JS, IF_REAL, "Bulk jct. sat. current density"),
|
IOP("js", VDMOS_MOD_JS, IF_REAL, "Bulk jct. sat. current density"),
|
||||||
IOP("tox", VDMOS_MOD_TOX, IF_REAL, "Oxide thickness"),
|
IOP("tox", VDMOS_MOD_TOX, IF_REAL, "Oxide thickness"),
|
||||||
IOP("ld", VDMOS_MOD_LD, IF_REAL, "Lateral diffusion"),
|
|
||||||
IOP("u0", VDMOS_MOD_U0, IF_REAL, "Surface mobility"),
|
IOP("u0", VDMOS_MOD_U0, IF_REAL, "Surface mobility"),
|
||||||
IOPR("uo", VDMOS_MOD_U0, IF_REAL, "Surface mobility"),
|
IOPR("uo", VDMOS_MOD_U0, IF_REAL, "Surface mobility"),
|
||||||
IOP("fc", VDMOS_MOD_FC, IF_REAL, "Forward bias jct. fit parm."),
|
IOP("fc", VDMOS_MOD_FC, IF_REAL, "Forward bias jct. fit parm."),
|
||||||
|
|
|
||||||
|
|
@ -300,7 +300,6 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
|
||||||
|
|
||||||
int VDMOStype; /* device type : 1 = nmos, -1 = pmos */
|
int VDMOStype; /* device type : 1 = nmos, -1 = pmos */
|
||||||
double VDMOStnom; /* temperature at which parameters measured */
|
double VDMOStnom; /* temperature at which parameters measured */
|
||||||
double VDMOSlatDiff;
|
|
||||||
double VDMOSjctSatCurDensity; /* input - use tSatCurDens */
|
double VDMOSjctSatCurDensity; /* input - use tSatCurDens */
|
||||||
double VDMOSjctSatCur; /* input - use tSatCur */
|
double VDMOSjctSatCur; /* input - use tSatCur */
|
||||||
double VDMOSdrainResistance;
|
double VDMOSdrainResistance;
|
||||||
|
|
@ -334,7 +333,6 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
|
||||||
double VDMOScgs;
|
double VDMOScgs;
|
||||||
|
|
||||||
unsigned VDMOStypeGiven :1;
|
unsigned VDMOStypeGiven :1;
|
||||||
unsigned VDMOSlatDiffGiven :1;
|
|
||||||
unsigned VDMOSjctSatCurDensityGiven :1;
|
unsigned VDMOSjctSatCurDensityGiven :1;
|
||||||
unsigned VDMOSjctSatCurGiven :1;
|
unsigned VDMOSjctSatCurGiven :1;
|
||||||
unsigned VDMOSdrainResistanceGiven :1;
|
unsigned VDMOSdrainResistanceGiven :1;
|
||||||
|
|
@ -419,7 +417,6 @@ enum {
|
||||||
VDMOS_MOD_MJSW,
|
VDMOS_MOD_MJSW,
|
||||||
VDMOS_MOD_JS,
|
VDMOS_MOD_JS,
|
||||||
VDMOS_MOD_TOX,
|
VDMOS_MOD_TOX,
|
||||||
VDMOS_MOD_LD,
|
|
||||||
VDMOS_MOD_RSH,
|
VDMOS_MOD_RSH,
|
||||||
VDMOS_MOD_U0,
|
VDMOS_MOD_U0,
|
||||||
VDMOS_MOD_FC,
|
VDMOS_MOD_FC,
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,6 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
VDMOSinstance *here;
|
VDMOSinstance *here;
|
||||||
double Beta;
|
double Beta;
|
||||||
double DrainSatCur;
|
double DrainSatCur;
|
||||||
double EffectiveLength;
|
|
||||||
double OxideCap;
|
|
||||||
double SourceSatCur;
|
double SourceSatCur;
|
||||||
double gm;
|
double gm;
|
||||||
double gds;
|
double gds;
|
||||||
|
|
@ -83,7 +81,6 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
here=VDMOSnextInstance(here)) {
|
here=VDMOSnextInstance(here)) {
|
||||||
|
|
||||||
vt = CONSTKoverQ * here->VDMOStemp;
|
vt = CONSTKoverQ * here->VDMOStemp;
|
||||||
EffectiveLength=here->VDMOSl - 2*model->VDMOSlatDiff;
|
|
||||||
|
|
||||||
if( (here->VDMOStSatCurDens == 0) ||
|
if( (here->VDMOStSatCurDens == 0) ||
|
||||||
(here->VDMOSdrainArea == 0) ||
|
(here->VDMOSdrainArea == 0) ||
|
||||||
|
|
@ -97,9 +94,7 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
here->VDMOSm * here->VDMOSsourceArea;
|
here->VDMOSm * here->VDMOSsourceArea;
|
||||||
}
|
}
|
||||||
Beta = here->VDMOStTransconductance * here->VDMOSm *
|
Beta = here->VDMOStTransconductance * here->VDMOSm *
|
||||||
here->VDMOSw/EffectiveLength;
|
here->VDMOSw/here->VDMOSl;
|
||||||
OxideCap = model->VDMOSoxideCapFactor * EffectiveLength *
|
|
||||||
here->VDMOSm * here->VDMOSw;
|
|
||||||
|
|
||||||
vbs = model->VDMOStype * (
|
vbs = model->VDMOStype * (
|
||||||
*(ckt->CKTrhsOld+here->VDMOSbNode) -
|
*(ckt->CKTrhsOld+here->VDMOSbNode) -
|
||||||
|
|
@ -440,7 +435,7 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
|
|
||||||
|
|
||||||
phi = here->VDMOStPhi;
|
phi = here->VDMOStPhi;
|
||||||
cox = OxideCap;
|
cox = 0;/*FIXME: can we do disto without knowing the oxide thickness?*/
|
||||||
if (vgst <= -phi) {
|
if (vgst <= -phi) {
|
||||||
lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0;
|
lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0;
|
||||||
} else if (vgst <= -phi/2) {
|
} else if (vgst <= -phi/2) {
|
||||||
|
|
|
||||||
|
|
@ -96,9 +96,6 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
||||||
case VDMOS_MOD_TOX:
|
case VDMOS_MOD_TOX:
|
||||||
value->rValue = model->VDMOSoxideThickness;
|
value->rValue = model->VDMOSoxideThickness;
|
||||||
return(OK);
|
return(OK);
|
||||||
case VDMOS_MOD_LD:
|
|
||||||
value->rValue = model->VDMOSlatDiff;
|
|
||||||
return(OK);
|
|
||||||
case VDMOS_MOD_RSH:
|
case VDMOS_MOD_RSH:
|
||||||
value->rValue = model->VDMOSsheetResistance;
|
value->rValue = model->VDMOSsheetResistance;
|
||||||
return(OK);
|
return(OK);
|
||||||
|
|
|
||||||
|
|
@ -91,10 +91,6 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel)
|
||||||
model->VDMOSoxideThickness = value->rValue;
|
model->VDMOSoxideThickness = value->rValue;
|
||||||
model->VDMOSoxideThicknessGiven = TRUE;
|
model->VDMOSoxideThicknessGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case VDMOS_MOD_LD:
|
|
||||||
model->VDMOSlatDiff = value->rValue;
|
|
||||||
model->VDMOSlatDiffGiven = TRUE;
|
|
||||||
break;
|
|
||||||
case VDMOS_MOD_RSH:
|
case VDMOS_MOD_RSH:
|
||||||
model->VDMOSsheetResistance = value->rValue;
|
model->VDMOSsheetResistance = value->rValue;
|
||||||
model->VDMOSsheetResistanceGiven = TRUE;
|
model->VDMOSsheetResistanceGiven = TRUE;
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ VDMOSnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt,
|
||||||
log(MAX(fabs(inst->VDMOScd),N_MINLOG))) /
|
log(MAX(fabs(inst->VDMOScd),N_MINLOG))) /
|
||||||
(data->freq * inst->VDMOSw *
|
(data->freq * inst->VDMOSw *
|
||||||
inst->VDMOSm *
|
inst->VDMOSm *
|
||||||
(inst->VDMOSl - 2*model->VDMOSlatDiff) * coxSquared);
|
inst->VDMOSl * coxSquared);
|
||||||
lnNdens[VDMOSFLNOIZ] =
|
lnNdens[VDMOSFLNOIZ] =
|
||||||
log(MAX(noizDens[VDMOSFLNOIZ],N_MINLOG));
|
log(MAX(noizDens[VDMOSFLNOIZ],N_MINLOG));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,9 +30,6 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
|
||||||
if (!model->VDMOStypeGiven) {
|
if (!model->VDMOStypeGiven) {
|
||||||
model->VDMOStype = NMOS;
|
model->VDMOStype = NMOS;
|
||||||
}
|
}
|
||||||
if (!model->VDMOSlatDiffGiven) {
|
|
||||||
model->VDMOSlatDiff = 0;
|
|
||||||
}
|
|
||||||
if (!model->VDMOSjctSatCurDensityGiven) {
|
if (!model->VDMOSjctSatCurDensityGiven) {
|
||||||
model->VDMOSjctSatCurDensity = 0;
|
model->VDMOSjctSatCurDensity = 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -157,11 +157,6 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
here->VDMOSw = 1;
|
here->VDMOSw = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(here->VDMOSl - 2 * model->VDMOSlatDiff <=0) {
|
|
||||||
SPfrontEnd->IFerrorf (ERR_WARNING,
|
|
||||||
"%s: effective channel length less than zero",
|
|
||||||
model->VDMOSmodName);
|
|
||||||
}
|
|
||||||
ratio4 = ratio * sqrt(ratio);
|
ratio4 = ratio * sqrt(ratio);
|
||||||
here->VDMOStTransconductance = model->VDMOStransconductance / ratio4;
|
here->VDMOStTransconductance = model->VDMOStransconductance / ratio4;
|
||||||
here->VDMOStSurfMob = model->VDMOSsurfaceMobility/ratio4;
|
here->VDMOStSurfMob = model->VDMOSsurfaceMobility/ratio4;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue