Alternative simple weak inversion model

according to https://www.anasoft.co.uk/MOS1Model.htm.
Fits existing LTSPICE models by adapting the slope parameter.
This commit is contained in:
Holger Vogt 2018-04-28 20:46:51 +02:00 committed by rlar
parent 0ece0d0c1c
commit 2474c28a54
1 changed files with 29 additions and 1 deletions

View File

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