From 84005efe8b67ab34642003d4d29a3d1f92810982 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Wed, 4 Apr 2018 10:03:44 +0200 Subject: [PATCH] lateral diffusion and overlap capacitance removed --- src/spicelib/devices/vdmos/vdmos.c | 1 - src/spicelib/devices/vdmos/vdmosdefs.h | 3 --- src/spicelib/devices/vdmos/vdmosdset.c | 9 ++------- src/spicelib/devices/vdmos/vdmosmask.c | 3 --- src/spicelib/devices/vdmos/vdmosmpar.c | 4 ---- src/spicelib/devices/vdmos/vdmosnoi.c | 2 +- src/spicelib/devices/vdmos/vdmosset.c | 3 --- src/spicelib/devices/vdmos/vdmostemp.c | 5 ----- 8 files changed, 3 insertions(+), 27 deletions(-) diff --git a/src/spicelib/devices/vdmos/vdmos.c b/src/spicelib/devices/vdmos/vdmos.c index 8169c712c..45dc7a190 100644 --- a/src/spicelib/devices/vdmos/vdmos.c +++ b/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."), diff --git a/src/spicelib/devices/vdmos/vdmosdefs.h b/src/spicelib/devices/vdmos/vdmosdefs.h index d8bf78c84..c399ce73e 100644 --- a/src/spicelib/devices/vdmos/vdmosdefs.h +++ b/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, diff --git a/src/spicelib/devices/vdmos/vdmosdset.c b/src/spicelib/devices/vdmos/vdmosdset.c index 6d84a50eb..75121e26d 100644 --- a/src/spicelib/devices/vdmos/vdmosdset.c +++ b/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) { diff --git a/src/spicelib/devices/vdmos/vdmosmask.c b/src/spicelib/devices/vdmos/vdmosmask.c index 8241a58fe..7f68e3a31 100644 --- a/src/spicelib/devices/vdmos/vdmosmask.c +++ b/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); diff --git a/src/spicelib/devices/vdmos/vdmosmpar.c b/src/spicelib/devices/vdmos/vdmosmpar.c index f3aaf8f81..35929ac47 100644 --- a/src/spicelib/devices/vdmos/vdmosmpar.c +++ b/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; diff --git a/src/spicelib/devices/vdmos/vdmosnoi.c b/src/spicelib/devices/vdmos/vdmosnoi.c index 6809dccbc..6c5ffefea 100644 --- a/src/spicelib/devices/vdmos/vdmosnoi.c +++ b/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)); diff --git a/src/spicelib/devices/vdmos/vdmosset.c b/src/spicelib/devices/vdmos/vdmosset.c index 86a8d9557..3eef8aa5b 100644 --- a/src/spicelib/devices/vdmos/vdmosset.c +++ b/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; } diff --git a/src/spicelib/devices/vdmos/vdmostemp.c b/src/spicelib/devices/vdmos/vdmostemp.c index cf8e915a5..3c2e2ea33 100644 --- a/src/spicelib/devices/vdmos/vdmostemp.c +++ b/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;