diff --git a/src/spicelib/devices/dio/dioask.c b/src/spicelib/devices/dio/dioask.c index 80d0e781b..dd5ab09ca 100644 --- a/src/spicelib/devices/dio/dioask.c +++ b/src/spicelib/devices/dio/dioask.c @@ -64,13 +64,16 @@ DIOask (CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, case DIO_CURRENT: value->rValue = *(ckt->CKTstate0+here->DIOcurrent); if (here->DIOqpNode > 0) - value->rValue += *(ckt->CKTstate0+here->DIOcqcsr); + value->rValue += *(ckt->CKTstate0+here->DIOcqcsr) * + (1 - here->DIOsoftRevRecParam) / here->DIOtTransitTime; return(OK); case DIO_CAP: value->rValue = here->DIOcap; return(OK); case DIO_CHARGE: value->rValue = *(ckt->CKTstate0+here->DIOcapCharge); + if (here->DIOqpNode > 0) + value->rValue += *(ckt->CKTstate0+here->DIOqp); return(OK); case DIO_CAPCUR: value->rValue = *(ckt->CKTstate0+here->DIOcapCurrent); diff --git a/src/spicelib/devices/dio/diodefs.h b/src/spicelib/devices/dio/diodefs.h index 0f3892b4d..5f02bf980 100644 --- a/src/spicelib/devices/dio/diodefs.h +++ b/src/spicelib/devices/dio/diodefs.h @@ -151,6 +151,7 @@ typedef struct sDIOinstance { double DIOjunctionSWCap; /* geometry adjusted junction sidewall capacitance */ double DIOtRecSatCur; /* temperature adjusted recombination saturation current */ double DIOtRecSatCur_dT; /* temperature adjusted recombination saturation current */ + double DIOsoftRevRecParam; /* Soft reverse recovery parameter */ double DIOdIth_dVrs; double DIOdIth_dVdio; diff --git a/src/spicelib/devices/dio/diosetup.c b/src/spicelib/devices/dio/diosetup.c index 559fc263a..d7b974716 100644 --- a/src/spicelib/devices/dio/diosetup.c +++ b/src/spicelib/devices/dio/diosetup.c @@ -377,6 +377,7 @@ DIOsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) if(error) return(error); here->DIOqpNode = tmp->number; } + here->DIOsoftRevRecParam = model->DIOsoftRevRecParam; } else { here->DIOqpNode = 0; }