From a4dc84ae35ae1f30e2bd416a8940ae151d8f9990 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Fri, 6 Apr 2018 00:25:23 +0200 Subject: [PATCH] missing model parameters added --- src/spicelib/devices/vdmos/vdmos.c | 12 ++++++------ src/spicelib/devices/vdmos/vdmosdefs.h | 14 ++++++++++++++ src/spicelib/devices/vdmos/vdmosmask.c | 12 ++++++++++++ src/spicelib/devices/vdmos/vdmosmpar.c | 16 ++++++++++++++++ src/spicelib/devices/vdmos/vdmosset.c | 9 +++++++++ 5 files changed, 57 insertions(+), 6 deletions(-) diff --git a/src/spicelib/devices/vdmos/vdmos.c b/src/spicelib/devices/vdmos/vdmos.c index 7a7adedfd..54aaba301 100644 --- a/src/spicelib/devices/vdmos/vdmos.c +++ b/src/spicelib/devices/vdmos/vdmos.c @@ -90,12 +90,12 @@ IFparm VDMOSmPTable[] = { /* model parameters */ IOP("rd", VDMOS_MOD_RD, IF_REAL, "Drain ohmic resistance"), IOP("rs", VDMOS_MOD_RS, IF_REAL, "Source ohmic resistance"), IOP("rg", VDMOS_MOD_RG, IF_REAL, "Gate ohmic resistance"), -/* - N Bulk diode emission coefficient - tt Body diode transit time - Eg Body diode activation energy for temperature effect on Is - Xti Body diode saturation current temperature exponent -*/ + +/* body diode */ + IOP("n", VDMOS_MOD_N, IF_REAL, "Bulk diode emission coefficient"), + IOP("tt", VDMOS_MOD_TT, IF_REAL, "Body diode transit time"), + IOP("eg", VDMOS_MOD_EG, IF_REAL, "Body diode activation energy for temperature effect on Is"), + IOP("Xti", VDMOS_MOD_XTI, IF_REAL, "Body diode saturation current temperature exponent"), IOP("is", VDMOS_MOD_IS, IF_REAL, "Body diode saturation current"), IOP("vj", VDMOS_MOD_VJ, IF_REAL, "Body diode junction potential"), diff --git a/src/spicelib/devices/vdmos/vdmosdefs.h b/src/spicelib/devices/vdmos/vdmosdefs.h index 166981e44..3c7339a4e 100644 --- a/src/spicelib/devices/vdmos/vdmosdefs.h +++ b/src/spicelib/devices/vdmos/vdmosdefs.h @@ -299,6 +299,11 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */ double VDMOSa; double VDMOScgs; + double VDMOSDn; + double VDIOtransitTime; + double VDMOSDeg; + double VDMOSDxti; + unsigned VDMOStypeGiven :1; unsigned VDMOSjctSatCurGiven :1; unsigned VDMOSdrainResistanceGiven :1; @@ -320,6 +325,11 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */ unsigned VDMOScgsGiven :1; unsigned VDMOSaGiven :1; + unsigned VDMOSDnGiven :1; + unsigned VDIOtransitTimeGiven :1; + unsigned VDMOSDegGiven :1; + unsigned VDMOSDxtiGiven :1; + } VDMOSmodel; #ifndef NMOS @@ -369,6 +379,10 @@ enum { VDMOS_MOD_CGDMAX, VDMOS_MOD_A, VDMOS_MOD_CGS, + VDMOS_MOD_N, + VDMOS_MOD_TT, + VDMOS_MOD_EG, + VDMOS_MOD_XTI, }; /* device questions */ diff --git a/src/spicelib/devices/vdmos/vdmosmask.c b/src/spicelib/devices/vdmos/vdmosmask.c index 50da90b3b..50427ffcb 100644 --- a/src/spicelib/devices/vdmos/vdmosmask.c +++ b/src/spicelib/devices/vdmos/vdmosmask.c @@ -66,6 +66,9 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) case VDMOS_MOD_IS: value->rValue = model->VDMOSjctSatCur; return(OK); + case VDMOS_MOD_N: + value->rValue = model->VDMOSDn; + return(OK); case VDMOS_MOD_VJ: value->rValue = model->VDMOSbulkJctPotential; return(OK); @@ -75,6 +78,15 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) case VDMOS_MOD_FC: value->rValue = model->VDMOSfwdCapDepCoeff; return(OK); + case VDMOS_MOD_TT: + value->rValue = model->VDIOtransitTime; + return(OK); + case VDMOS_MOD_EG: + value->rValue = model->VDMOSDeg; + return(OK); + case VDMOS_MOD_XTI: + value->rValue = model->VDMOSDxti; + return(OK); default: return(E_BADPARM); } diff --git a/src/spicelib/devices/vdmos/vdmosmpar.c b/src/spicelib/devices/vdmos/vdmosmpar.c index ca979acd8..ac3f3be40 100644 --- a/src/spicelib/devices/vdmos/vdmosmpar.c +++ b/src/spicelib/devices/vdmos/vdmosmpar.c @@ -105,6 +105,22 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel) model->VDMOScgs = value->rValue; model->VDMOScgsGiven = TRUE; break; + case VDMOS_MOD_N: + model->VDMOSDn = value->rValue; + model->VDMOSDnGiven = TRUE; + break; + case VDMOS_MOD_TT: + model->VDIOtransitTime = value->rValue; + model->VDIOtransitTimeGiven = TRUE; + break; + case VDMOS_MOD_EG: + model->VDMOSDeg = value->rValue; + model->VDMOSDegGiven = TRUE; + break; + case VDMOS_MOD_XTI: + model->VDMOSDxti = value->rValue; + model->VDMOSDxtiGiven = TRUE; + break; default: return(E_BADPARM); } diff --git a/src/spicelib/devices/vdmos/vdmosset.c b/src/spicelib/devices/vdmos/vdmosset.c index cd66c5b8b..c4fcfd135 100644 --- a/src/spicelib/devices/vdmos/vdmosset.c +++ b/src/spicelib/devices/vdmos/vdmosset.c @@ -72,6 +72,15 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, if (!model->VDMOSaGiven) { model->VDMOSa = 1.; } + if (!model->VDMOSDnGiven) { + model->VDMOSDn = 1.; + } + if (!model->VDIOtransitTimeGiven) { + model->VDIOtransitTime = 0.; + } + if (!model->VDMOSDegGiven) { + model->VDMOSDeg = 1.11; + } /* loop through all the instances of the model */ for (here = VDMOSinstances(model); here != NULL;