Browse Source

lateral diffusion and overlap capacitance removed

pre-master-46
Holger Vogt 8 years ago
committed by rlar
parent
commit
84005efe8b
  1. 1
      src/spicelib/devices/vdmos/vdmos.c
  2. 3
      src/spicelib/devices/vdmos/vdmosdefs.h
  3. 9
      src/spicelib/devices/vdmos/vdmosdset.c
  4. 3
      src/spicelib/devices/vdmos/vdmosmask.c
  5. 4
      src/spicelib/devices/vdmos/vdmosmpar.c
  6. 2
      src/spicelib/devices/vdmos/vdmosnoi.c
  7. 3
      src/spicelib/devices/vdmos/vdmosset.c
  8. 5
      src/spicelib/devices/vdmos/vdmostemp.c

1
src/spicelib/devices/vdmos/vdmos.c

@ -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."),

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

@ -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,

9
src/spicelib/devices/vdmos/vdmosdset.c

@ -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) {

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

@ -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);

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

@ -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;

2
src/spicelib/devices/vdmos/vdmosnoi.c

@ -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));

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

@ -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;
}

5
src/spicelib/devices/vdmos/vdmostemp.c

@ -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…
Cancel
Save