From 2474c28a5449f77350b4eaf6d7619bf226a32410 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Sat, 28 Apr 2018 20:46:51 +0200 Subject: [PATCH] Alternative simple weak inversion model according to https://www.anasoft.co.uk/MOS1Model.htm. Fits existing LTSPICE models by adapting the slope parameter. --- src/spicelib/devices/vdmos/vdmosload.c | 30 +++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/spicelib/devices/vdmos/vdmosload.c b/src/spicelib/devices/vdmos/vdmosload.c index 219c8d959..a14932b3c 100644 --- a/src/spicelib/devices/vdmos/vdmosload.c +++ b/src/spicelib/devices/vdmos/vdmosload.c @@ -906,7 +906,7 @@ scalef(double nf2, double vgst) */ static double -cweakinv(double slope, double shift, double vgst, double vds, double lambda, double beta, double vt, double mtr) +cweakinv2(double slope, double shift, double vgst, double vds, double lambda, double beta, double vt, double mtr) { vgst += shift * (1 - scalef(0.5, vgst)); double n = slope / 2.3 / 0.0256; /* Tsividis, p. 208 */ @@ -918,3 +918,31 @@ cweakinv(double slope, double shift, double vgst, double vds, double lambda, dou (first * first - second * second); return cds; } + + +/* Alternative simple weak inversion model, according to https://www.anasoft.co.uk/MOS1Model.htm + * Scale the voltage overdrive vgst logarithmically in weak inversion. + * Best fits LTSPICE curves with shift=0 + */ + +static double +cweakinv(double slope, double shift, double vgst, double vds, double lambda, double beta, double vt, double mtr) +{ + NG_IGNORE(vt); + double cdrain, betap; + vgst = slope * log(1 + exp((vgst - shift) / slope)); + + betap = beta*(1 + lambda*vds); + /* scale vds with mtr (except with lambda) */ + + if (vgst <= vds * mtr) { + /* saturation region */ + cdrain = betap*vgst*vgst*.5; + } + else { + /* linear region */ + cdrain = betap * vds * mtr * + (vgst - .5 * vds * mtr); + } + return cdrain; +}