From d2f9fe737928b64a4e1e7a4b0d01ed5cd668a65d Mon Sep 17 00:00:00 2001 From: dwarning Date: Mon, 30 Jan 2012 19:57:57 +0000 Subject: [PATCH] tlevc=1 correction --- ChangeLog | 4 ++++ src/spicelib/devices/dio/dio.c | 5 +++++ src/spicelib/devices/dio/diodefs.h | 8 +++++++- src/spicelib/devices/dio/diomask.c | 6 ++++++ src/spicelib/devices/dio/diompar.c | 8 ++++++++ src/spicelib/devices/dio/diosetup.c | 6 ++++++ src/spicelib/devices/dio/diotemp.c | 2 ++ 7 files changed, 38 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3e7952620..2d4d0b151 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-01-30 Dietmar Warning + * src/spicelib/devices/dio/diotemp.c: Add temperature dependent + junction potentials also for tlevc=1 capacitor temperature model + 2012-01-28 Robert Larice * src/include/ngspice/ngspice.h : define NAN for non C99 environments diff --git a/src/spicelib/devices/dio/dio.c b/src/spicelib/devices/dio/dio.c index 132168668..691a9a66a 100644 --- a/src/spicelib/devices/dio/dio.c +++ b/src/spicelib/devices/dio/dio.c @@ -75,6 +75,11 @@ IFparm DIOmPTable[] = { /* model parameters */ IOP( "cta", DIO_MOD_CTA, IF_REAL, "Area junction temperature coefficient"), IOPR( "ctc", DIO_MOD_CTA, IF_REAL, "Area junction capacitance temperature coefficient"), IOP( "ctp", DIO_MOD_CTP, IF_REAL, "Perimeter junction capacitance temperature coefficient"), + + IOP( "tbp", DIO_MOD_TBP, IF_REAL, "Area junction potential temperature coefficient"), + IOPR( "tvj", DIO_MOD_TBP, IF_REAL, "Area junction potential temperature coefficient"), + IOP( "tphp", DIO_MOD_TPHP, IF_REAL, "Perimeter junction potential temperature coefficient"), + IOP( "kf", DIO_MOD_KF, IF_REAL, "flicker noise coefficient"), IOP( "af", DIO_MOD_AF, IF_REAL, "flicker noise exponent"), IOP( "fc", DIO_MOD_FC, IF_REAL, "Forward bias junction fit parameter"), diff --git a/src/spicelib/devices/dio/diodefs.h b/src/spicelib/devices/dio/diodefs.h index 2a059ded3..2ee84b95e 100644 --- a/src/spicelib/devices/dio/diodefs.h +++ b/src/spicelib/devices/dio/diodefs.h @@ -186,6 +186,8 @@ typedef struct sDIOmodel { /* model structure for a diode */ unsigned DIOsaturationCurrentExpGiven : 1; unsigned DIOctaGiven : 1; unsigned DIOctpGiven : 1; + unsigned DIOtbpGiven : 1; + unsigned DIOtphpGiven : 1; unsigned DIOdepletionCapCoeffGiven : 1; unsigned DIOdepletionSWcapCoeffGiven :1; unsigned DIObreakdownVoltageGiven : 1; @@ -223,6 +225,8 @@ typedef struct sDIOmodel { /* model structure for a diode */ double DIOsaturationCurrentExp; /* Saturation current exponential (XTI) */ double DIOcta; /* Area junction temperature coefficient */ double DIOctp; /* Perimeter junction temperature coefficient */ + double DIOtbp; /* Area junction potential temperature coefficient */ + double DIOtphp; /* Perimeter junction potential temperature coefficient */ double DIOdepletionCapCoeff; /* Depletion Cap fraction coefficient (FC)*/ double DIOdepletionSWcapCoeff; /* Depletion sw-Cap fraction coefficient (FCS)*/ double DIObreakdownVoltage; /* Voltage at reverse breakdown */ @@ -293,7 +297,9 @@ typedef struct sDIOmodel { /* model structure for a diode */ #define DIO_MOD_TLEVC 132 #define DIO_MOD_CTA 133 #define DIO_MOD_CTP 134 -#define DIO_MOD_TCV 135 +#define DIO_MOD_TBP 135 +#define DIO_MOD_TPHP 136 +#define DIO_MOD_TCV 137 #include "dioext.h" #endif /*DIO*/ diff --git a/src/spicelib/devices/dio/diomask.c b/src/spicelib/devices/dio/diomask.c index dd5e09eac..eb5f1f5ae 100644 --- a/src/spicelib/devices/dio/diomask.c +++ b/src/spicelib/devices/dio/diomask.c @@ -104,6 +104,12 @@ DIOmAsk (CKTcircuit *ckt, GENmodel *inModel, int which, IFvalue *value) case DIO_MOD_CTP: value->rValue = model->DIOctp; return(OK); + case DIO_MOD_TBP: + value->rValue = model->DIOtbp; + return(OK); + case DIO_MOD_TPHP: + value->rValue = model->DIOtphp; + return(OK); case DIO_MOD_FC: value->rValue = model->DIOdepletionCapCoeff; return(OK); diff --git a/src/spicelib/devices/dio/diompar.c b/src/spicelib/devices/dio/diompar.c index c7c68c470..b2b4d8a44 100644 --- a/src/spicelib/devices/dio/diompar.c +++ b/src/spicelib/devices/dio/diompar.c @@ -125,6 +125,14 @@ DIOmParam(int param, IFvalue *value, GENmodel *inModel) model->DIOctp = value->rValue; model->DIOctpGiven = TRUE; break; + case DIO_MOD_TBP: + model->DIOtbp = value->rValue; + model->DIOtbpGiven = TRUE; + break; + case DIO_MOD_TPHP: + model->DIOtphp = value->rValue; + model->DIOtphpGiven = TRUE; + break; case DIO_MOD_FC: model->DIOdepletionCapCoeff = value->rValue; model->DIOdepletionCapCoeffGiven = TRUE; diff --git a/src/spicelib/devices/dio/diosetup.c b/src/spicelib/devices/dio/diosetup.c index cd715c32f..c65c5465b 100644 --- a/src/spicelib/devices/dio/diosetup.c +++ b/src/spicelib/devices/dio/diosetup.c @@ -102,6 +102,12 @@ DIOsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) if(!model->DIOctpGiven) { model->DIOctp = 0.0; } + if(!model->DIOtbpGiven) { + model->DIOtbp = 0.0; + } + if(!model->DIOtphpGiven) { + model->DIOtphp = 0.0; + } if(!model->DIOfNcoefGiven) { model->DIOfNcoef = 0.0; } diff --git a/src/spicelib/devices/dio/diotemp.c b/src/spicelib/devices/dio/diotemp.c index 8fb71462a..1455f1b86 100644 --- a/src/spicelib/devices/dio/diotemp.c +++ b/src/spicelib/devices/dio/diotemp.c @@ -132,6 +132,7 @@ DIOtemp(GENmodel *inModel, CKTcircuit *ckt) here->DIOtJctCap *= 1+here->DIOtGradingCoeff* (400e-6*(here->DIOtemp-REFTEMP)-gmanew); } else if (model->DIOtlevc == 1) { + here->DIOtJctPot = model->DIOjunctionPot - model->DIOtbp*(here->DIOtemp-REFTEMP); here->DIOtJctCap = model->DIOjunctionCap * (model->DIOcta*(here->DIOtemp-REFTEMP)); } @@ -147,6 +148,7 @@ DIOtemp(GENmodel *inModel, CKTcircuit *ckt) here->DIOtJctSWCap *= 1+model->DIOgradingSWCoeff* (400e-6*(here->DIOtemp-REFTEMP)-gmaSWnew); } else if (model->DIOtlevc == 1) { + here->DIOtJctSWPot = model->DIOjunctionSWPot - model->DIOtphp*(here->DIOtemp-REFTEMP); here->DIOtJctSWCap = model->DIOjunctionSWCap * (model->DIOctp*(here->DIOtemp-REFTEMP)); }