From 1ce7fef51942d143e3db0113cd2a9cf32563a249 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Mon, 9 Apr 2018 20:11:45 +0200 Subject: [PATCH] missing model parameters added --- src/spicelib/devices/vdmos/vdmos.c | 4 ++++ src/spicelib/devices/vdmos/vdmosdefs.h | 14 ++++++++++++++ src/spicelib/devices/vdmos/vdmosmask.c | 14 ++++++++++++++ src/spicelib/devices/vdmos/vdmosmpar.c | 18 ++++++++++++++++++ src/spicelib/devices/vdmos/vdmosset.c | 9 +++++++++ 5 files changed, 59 insertions(+) diff --git a/src/spicelib/devices/vdmos/vdmos.c b/src/spicelib/devices/vdmos/vdmos.c index 54aaba301..e124e1135 100644 --- a/src/spicelib/devices/vdmos/vdmos.c +++ b/src/spicelib/devices/vdmos/vdmos.c @@ -92,6 +92,10 @@ IFparm VDMOSmPTable[] = { /* model parameters */ IOP("rg", VDMOS_MOD_RG, IF_REAL, "Gate ohmic resistance"), /* body diode */ + IOP("bv", VDMOS_MOD_BV, IF_REAL, "Vds breakdown voltage"), + IOP("ibv", VDMOS_MOD_IBV, IF_REAL, "Current at Vds=bv"), + IOP("nbv", VDMOS_MOD_NBV, IF_REAL, "Vds breakdown emission coefficient"), + IOP("rb", VDMOS_MOD_RB, IF_REAL, "Body diode ohmic resistance"), 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"), diff --git a/src/spicelib/devices/vdmos/vdmosdefs.h b/src/spicelib/devices/vdmos/vdmosdefs.h index 3c7339a4e..5492fd327 100644 --- a/src/spicelib/devices/vdmos/vdmosdefs.h +++ b/src/spicelib/devices/vdmos/vdmosdefs.h @@ -299,6 +299,12 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */ double VDMOSa; double VDMOScgs; + double VDMOSDbv; + double VDMOSDibv; + double VDIObrkdEmissionCoeff; + double VDIOresistance; + double VDIOresistTemp1; + double VDIOresistTemp2; double VDMOSDn; double VDIOtransitTime; double VDMOSDeg; @@ -325,6 +331,10 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */ unsigned VDMOScgsGiven :1; unsigned VDMOSaGiven :1; + unsigned VDMOSDbvGiven :1; + unsigned VDMOSDibvGiven :1; + unsigned VDIObrkdEmissionCoeffGiven :1; + unsigned VDIOresistanceGiven :1; unsigned VDMOSDnGiven :1; unsigned VDIOtransitTimeGiven :1; unsigned VDMOSDegGiven :1; @@ -379,6 +389,10 @@ enum { VDMOS_MOD_CGDMAX, VDMOS_MOD_A, VDMOS_MOD_CGS, + VDMOS_MOD_RB, + VDMOS_MOD_BV, + VDMOS_MOD_IBV, + VDMOS_MOD_NBV, VDMOS_MOD_N, VDMOS_MOD_TT, VDMOS_MOD_EG, diff --git a/src/spicelib/devices/vdmos/vdmosmask.c b/src/spicelib/devices/vdmos/vdmosmask.c index 50427ffcb..f77ebece1 100644 --- a/src/spicelib/devices/vdmos/vdmosmask.c +++ b/src/spicelib/devices/vdmos/vdmosmask.c @@ -63,6 +63,11 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) case VDMOS_MOD_CGS: value->rValue = model->VDMOScgs; return(OK); + + /* body diode */ + case VDMOS_MOD_RB: + value->rValue = model->VDIOresistance; + return(OK); case VDMOS_MOD_IS: value->rValue = model->VDMOSjctSatCur; return(OK); @@ -75,6 +80,15 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) case VDMOS_MOD_MJ: value->rValue = model->VDMOSbulkJctBotGradingCoeff; return(OK); + case VDMOS_MOD_BV: + value->rValue = model->VDMOSDbv; + return(OK); + case VDMOS_MOD_IBV: + value->rValue = model->VDMOSDibv; + return(OK); + case VDMOS_MOD_NBV: + value->rValue = model->VDIObrkdEmissionCoeff; + return(OK); case VDMOS_MOD_FC: value->rValue = model->VDMOSfwdCapDepCoeff; return(OK); diff --git a/src/spicelib/devices/vdmos/vdmosmpar.c b/src/spicelib/devices/vdmos/vdmosmpar.c index ac3f3be40..af65a0b7d 100644 --- a/src/spicelib/devices/vdmos/vdmosmpar.c +++ b/src/spicelib/devices/vdmos/vdmosmpar.c @@ -47,6 +47,12 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel) model->VDMOSgateResistance = value->rValue; model->VDMOSgateResistanceGiven = TRUE; break; + case VDMOS_MOD_RB: + model->VDIOresistance = value->rValue; + model->VDIOresistanceGiven = TRUE; + model->VDIOresistTemp1 = 0; + model->VDIOresistTemp2 = 0; + break; case VDMOS_MOD_IS: model->VDMOSjctSatCur = value->rValue; model->VDMOSjctSatCurGiven = TRUE; @@ -105,6 +111,18 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel) model->VDMOScgs = value->rValue; model->VDMOScgsGiven = TRUE; break; + case VDMOS_MOD_BV: + model->VDMOSDbv = value->rValue; + model->VDMOSDbvGiven = TRUE; + break; + case VDMOS_MOD_IBV: + model->VDMOSDibv = value->rValue; + model->VDMOSDibvGiven = TRUE; + break; + case VDMOS_MOD_NBV: + model->VDIObrkdEmissionCoeff = value->rValue; + model->VDIObrkdEmissionCoeffGiven = TRUE; + break; case VDMOS_MOD_N: model->VDMOSDn = value->rValue; model->VDMOSDnGiven = TRUE; diff --git a/src/spicelib/devices/vdmos/vdmosset.c b/src/spicelib/devices/vdmos/vdmosset.c index c4fcfd135..fce93e1f0 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->VDMOSDbvGiven) { + model->VDMOSDbv = 1.0e30; + } + if (!model->VDMOSDibvGiven) { + model->VDMOSDibv = 1.0e-10; + } + if (!model->VDIObrkdEmissionCoeffGiven) { + model->VDIObrkdEmissionCoeff = 1.; + } if (!model->VDMOSDnGiven) { model->VDMOSDn = 1.; }