From 0dc0aa06c4c848a164da3fc8bed5c2c655885913 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Fri, 6 Apr 2018 08:28:11 +0200 Subject: [PATCH] re-introdeuce parameter phi Resulting temperature dependency of vto still not available --- src/spicelib/devices/vdmos/vdmosdefs.h | 1 + src/spicelib/devices/vdmos/vdmosdset.c | 2 +- src/spicelib/devices/vdmos/vdmostemp.c | 9 +++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/spicelib/devices/vdmos/vdmosdefs.h b/src/spicelib/devices/vdmos/vdmosdefs.h index c495a6d0d..166981e44 100644 --- a/src/spicelib/devices/vdmos/vdmosdefs.h +++ b/src/spicelib/devices/vdmos/vdmosdefs.h @@ -57,6 +57,7 @@ typedef struct sVDMOSinstance { double VDMOSdtemp; /* operating temperature of the instance relative to circuit temperature*/ double VDMOStTransconductance; /* temperature corrected transconductance*/ + double VDMOStPhi; /* temperature corrected Phi */ double VDMOStVto; /* temperature corrected Vto */ double VDMOStSatCur; /* temperature corrected saturation Cur. */ double VDMOStBulkPot; /* temperature corrected Bulk potential */ diff --git a/src/spicelib/devices/vdmos/vdmosdset.c b/src/spicelib/devices/vdmos/vdmosdset.c index 3dbac23d9..ca1627942 100644 --- a/src/spicelib/devices/vdmos/vdmosdset.c +++ b/src/spicelib/devices/vdmos/vdmosdset.c @@ -282,7 +282,7 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt) - phi = 0.6; + phi = here->VDMOStPhi; cox = 0;/*FIXME: can we do disto without knowing the oxide thickness?*/ if (vgst <= -phi) { lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; diff --git a/src/spicelib/devices/vdmos/vdmostemp.c b/src/spicelib/devices/vdmos/vdmostemp.c index c4d218928..e63080930 100644 --- a/src/spicelib/devices/vdmos/vdmostemp.c +++ b/src/spicelib/devices/vdmos/vdmostemp.c @@ -22,6 +22,7 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt) double kt,kt1; double arg1; double ratio,ratio4; + double phio; double pbfact1,pbfact; double vt,vtnom; /* loop through all the resistor models */ @@ -43,6 +44,12 @@ 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); + } + model->VDMOSoxideCapFactor = 0; @@ -80,6 +87,8 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt) ratio4 = ratio * sqrt(ratio); here->VDMOStTransconductance = model->VDMOStransconductance / ratio4; + phio = (model->VDMOSphi - pbfact1) / fact1; + here->VDMOStPhi = fact2 * phio + pbfact; here->VDMOStVto = model->VDMOSvt0; here->VDMOSCbd = 0;