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("js", VDMOS_MOD_JS, IF_REAL, "Bulk jct. sat. current density"),
|
||||
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"),
|
||||
IOPR("uo", VDMOS_MOD_U0, IF_REAL, "Surface mobility"),
|
||||
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 */
|
||||
double VDMOStnom; /* temperature at which parameters measured */
|
||||
double VDMOSlatDiff;
|
||||
double VDMOSjctSatCurDensity; /* input - use tSatCurDens */
|
||||
double VDMOSjctSatCur; /* input - use tSatCur */
|
||||
double VDMOSdrainResistance;
|
||||
|
|
@ -334,7 +333,6 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
|
|||
double VDMOScgs;
|
||||
|
||||
unsigned VDMOStypeGiven :1;
|
||||
unsigned VDMOSlatDiffGiven :1;
|
||||
unsigned VDMOSjctSatCurDensityGiven :1;
|
||||
unsigned VDMOSjctSatCurGiven :1;
|
||||
unsigned VDMOSdrainResistanceGiven :1;
|
||||
|
|
@ -419,7 +417,6 @@ enum {
|
|||
VDMOS_MOD_MJSW,
|
||||
VDMOS_MOD_JS,
|
||||
VDMOS_MOD_TOX,
|
||||
VDMOS_MOD_LD,
|
||||
VDMOS_MOD_RSH,
|
||||
VDMOS_MOD_U0,
|
||||
VDMOS_MOD_FC,
|
||||
|
|
|
|||
|
|
@ -22,8 +22,6 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
VDMOSinstance *here;
|
||||
double Beta;
|
||||
double DrainSatCur;
|
||||
double EffectiveLength;
|
||||
double OxideCap;
|
||||
double SourceSatCur;
|
||||
double gm;
|
||||
double gds;
|
||||
|
|
@ -83,7 +81,6 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
here=VDMOSnextInstance(here)) {
|
||||
|
||||
vt = CONSTKoverQ * here->VDMOStemp;
|
||||
EffectiveLength=here->VDMOSl - 2*model->VDMOSlatDiff;
|
||||
|
||||
if( (here->VDMOStSatCurDens == 0) ||
|
||||
(here->VDMOSdrainArea == 0) ||
|
||||
|
|
@ -97,9 +94,7 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
here->VDMOSm * here->VDMOSsourceArea;
|
||||
}
|
||||
Beta = here->VDMOStTransconductance * here->VDMOSm *
|
||||
here->VDMOSw/EffectiveLength;
|
||||
OxideCap = model->VDMOSoxideCapFactor * EffectiveLength *
|
||||
here->VDMOSm * here->VDMOSw;
|
||||
here->VDMOSw/here->VDMOSl;
|
||||
|
||||
vbs = model->VDMOStype * (
|
||||
*(ckt->CKTrhsOld+here->VDMOSbNode) -
|
||||
|
|
@ -440,7 +435,7 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
|
||||
|
||||
phi = here->VDMOStPhi;
|
||||
cox = OxideCap;
|
||||
cox = 0;/*FIXME: can we do disto without knowing the oxide thickness?*/
|
||||
if (vgst <= -phi) {
|
||||
lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0;
|
||||
} else if (vgst <= -phi/2) {
|
||||
|
|
|
|||
|
|
@ -96,9 +96,6 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case VDMOS_MOD_TOX:
|
||||
value->rValue = model->VDMOSoxideThickness;
|
||||
return(OK);
|
||||
case VDMOS_MOD_LD:
|
||||
value->rValue = model->VDMOSlatDiff;
|
||||
return(OK);
|
||||
case VDMOS_MOD_RSH:
|
||||
value->rValue = model->VDMOSsheetResistance;
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -91,10 +91,6 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel)
|
|||
model->VDMOSoxideThickness = value->rValue;
|
||||
model->VDMOSoxideThicknessGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_LD:
|
||||
model->VDMOSlatDiff = value->rValue;
|
||||
model->VDMOSlatDiffGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_RSH:
|
||||
model->VDMOSsheetResistance = value->rValue;
|
||||
model->VDMOSsheetResistanceGiven = TRUE;
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ VDMOSnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt,
|
|||
log(MAX(fabs(inst->VDMOScd),N_MINLOG))) /
|
||||
(data->freq * inst->VDMOSw *
|
||||
inst->VDMOSm *
|
||||
(inst->VDMOSl - 2*model->VDMOSlatDiff) * coxSquared);
|
||||
inst->VDMOSl * coxSquared);
|
||||
lnNdens[VDMOSFLNOIZ] =
|
||||
log(MAX(noizDens[VDMOSFLNOIZ],N_MINLOG));
|
||||
|
||||
|
|
|
|||
|
|
@ -30,9 +30,6 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
|
|||
if (!model->VDMOStypeGiven) {
|
||||
model->VDMOStype = NMOS;
|
||||
}
|
||||
if (!model->VDMOSlatDiffGiven) {
|
||||
model->VDMOSlatDiff = 0;
|
||||
}
|
||||
if (!model->VDMOSjctSatCurDensityGiven) {
|
||||
model->VDMOSjctSatCurDensity = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -157,11 +157,6 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
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);
|
||||
here->VDMOStTransconductance = model->VDMOStransconductance / ratio4;
|
||||
here->VDMOStSurfMob = model->VDMOSsurfaceMobility/ratio4;
|
||||
|
|
|
|||
Loading…
Reference in New Issue