From 40b9b18b01f1b6d1fb4b32e462ba9562eedbb055 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Mon, 2 Apr 2018 20:10:36 +0200 Subject: [PATCH] gate conductance added --- src/spicelib/devices/vdmos/vdmos.c | 1 + src/spicelib/devices/vdmos/vdmosdefs.h | 4 ++++ src/spicelib/devices/vdmos/vdmosmask.c | 3 +++ src/spicelib/devices/vdmos/vdmosmpar.c | 4 ++++ src/spicelib/devices/vdmos/vdmostemp.c | 10 ++++++++++ 5 files changed, 22 insertions(+) diff --git a/src/spicelib/devices/vdmos/vdmos.c b/src/spicelib/devices/vdmos/vdmos.c index 22bb4d783..8cd665d69 100644 --- a/src/spicelib/devices/vdmos/vdmos.c +++ b/src/spicelib/devices/vdmos/vdmos.c @@ -95,6 +95,7 @@ IFparm VDMOSmPTable[] = { /* model parameters */ IOP("lambda",VDMOS_MOD_LAMBDA,IF_REAL, "Channel length modulation"), 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"), /* Cjo Zero-bias body diode junction capacitance Is Body diode saturation current diff --git a/src/spicelib/devices/vdmos/vdmosdefs.h b/src/spicelib/devices/vdmos/vdmosdefs.h index 42f0e5a92..83df9d652 100644 --- a/src/spicelib/devices/vdmos/vdmosdefs.h +++ b/src/spicelib/devices/vdmos/vdmosdefs.h @@ -57,6 +57,7 @@ typedef struct sVDMOSinstance { double VDMOSsourcePerimiter; double VDMOSsourceConductance; /*conductance of source(or 0):set in setup*/ double VDMOSdrainConductance; /*conductance of drain(or 0):set in setup*/ + double VDMOSgateConductance; /*conductance of gate(or 0):set in setup*/ double VDMOStemp; /* operating temperature of this instance */ double VDMOSdtemp; /* operating temperature of the instance relative to circuit temperature*/ @@ -284,6 +285,7 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */ double VDMOSjctSatCur; /* input - use tSatCur */ double VDMOSdrainResistance; double VDMOSsourceResistance; + double VDMOSgateResistance; double VDMOSsheetResistance; double VDMOStransconductance; /* input - use tTransconductance */ double VDMOSgateSourceOverlapCapFactor; @@ -320,6 +322,7 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */ unsigned VDMOSjctSatCurGiven :1; unsigned VDMOSdrainResistanceGiven :1; unsigned VDMOSsourceResistanceGiven :1; + unsigned VDMOSgateResistanceGiven :1; unsigned VDMOSsheetResistanceGiven :1; unsigned VDMOStransconductanceGiven :1; unsigned VDMOSgateSourceOverlapCapFactorGiven :1; @@ -391,6 +394,7 @@ enum { VDMOS_MOD_LAMBDA, VDMOS_MOD_RD, VDMOS_MOD_RS, + VDMOS_MOD_RG, VDMOS_MOD_CBD, VDMOS_MOD_CBS, VDMOS_MOD_IS, diff --git a/src/spicelib/devices/vdmos/vdmosmask.c b/src/spicelib/devices/vdmos/vdmosmask.c index d877dea7c..ebd148130 100644 --- a/src/spicelib/devices/vdmos/vdmosmask.c +++ b/src/spicelib/devices/vdmos/vdmosmask.c @@ -45,6 +45,9 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) case VDMOS_MOD_RS: value->rValue = model->VDMOSsourceResistance; return(OK); + case VDMOS_MOD_RG: + value->rValue = model->VDMOSgateResistance; + return(OK); case VDMOS_MOD_CBD: value->rValue = model->VDMOScapBD; return(OK); diff --git a/src/spicelib/devices/vdmos/vdmosmpar.c b/src/spicelib/devices/vdmos/vdmosmpar.c index e1b3a84e1..7d73cf31c 100644 --- a/src/spicelib/devices/vdmos/vdmosmpar.c +++ b/src/spicelib/devices/vdmos/vdmosmpar.c @@ -47,6 +47,10 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel) model->VDMOSsourceResistance = value->rValue; model->VDMOSsourceResistanceGiven = TRUE; break; + case VDMOS_MOD_RG: + model->VDMOSgateResistance = value->rValue; + model->VDMOSgateResistanceGiven = TRUE; + break; case VDMOS_MOD_CBD: model->VDMOScapBD = value->rValue; model->VDMOScapBDGiven = TRUE; diff --git a/src/spicelib/devices/vdmos/vdmostemp.c b/src/spicelib/devices/vdmos/vdmostemp.c index 1eb886766..04fba206a 100644 --- a/src/spicelib/devices/vdmos/vdmostemp.c +++ b/src/spicelib/devices/vdmos/vdmostemp.c @@ -327,6 +327,16 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt) } else { here->VDMOSsourceConductance = 0; } + if (model->VDMOSgateResistanceGiven) { + if (model->VDMOSgateResistance != 0) { + here->VDMOSgateConductance = here->VDMOSm / + model->VDMOSgateResistance; + } else { + here->VDMOSgateConductance = 0; + } + } else { + here->VDMOSgateConductance = 0; + } } } return(OK);