add parallel resistor rds (between outer drain and source nodes, parallel to bulk diode)
This commit is contained in:
parent
b7c6145f5e
commit
4a3c707036
|
|
@ -97,6 +97,7 @@ IFparm VDMOSmPTable[] = { /* model parameters */
|
|||
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("rds", VDMOS_MOD_RDS, IF_REAL, "Drain-source shunt resistance"),
|
||||
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"),
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ typedef struct sVDMOSinstance {
|
|||
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 VDMOSdsConductance; /*conductance of drain to source:set in setup*/
|
||||
double VDMOStemp; /* operating temperature of this instance */
|
||||
double VDMOSdtemp; /* operating temperature of the instance relative to circuit temperature*/
|
||||
|
||||
|
|
@ -245,6 +246,10 @@ typedef struct sVDMOSinstance {
|
|||
* (gate node, gate prime node) */
|
||||
double *VDMOSGPgPtr; /* pointer to sparse matrix element at
|
||||
* (gate prime node, gate node) */
|
||||
double *VDMOSDsPtr; /* pointer to sparse matrix element at
|
||||
* (source node, drain node) */
|
||||
double *VDMOSSdPtr; /* pointer to sparse matrix element at
|
||||
* (drain node, source node) */
|
||||
/* bulk diode */
|
||||
double *VDIORPdPtr; /* pointer to sparse matrix element at
|
||||
* (diode prime node, drain node) */
|
||||
|
|
@ -340,6 +345,7 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
|
|||
double VDIOresistTemp1;
|
||||
double VDIOresistTemp2;
|
||||
double VDIOconductance;
|
||||
double VDMOSrds;
|
||||
double VDMOSDn;
|
||||
double VDIOtransitTime;
|
||||
double VDIOtranTimeTemp1;
|
||||
|
|
@ -377,6 +383,7 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
|
|||
unsigned VDIOjunctionPotGiven :1;
|
||||
unsigned VDIObrkdEmissionCoeffGiven :1;
|
||||
unsigned VDIOresistanceGiven :1;
|
||||
unsigned VDMOSrdsGiven :1;
|
||||
unsigned VDMOSDnGiven :1;
|
||||
unsigned VDIOtransitTimeGiven :1;
|
||||
unsigned VDMOSDegGiven :1;
|
||||
|
|
@ -437,6 +444,7 @@ enum {
|
|||
VDMOS_MOD_BV,
|
||||
VDMOS_MOD_IBV,
|
||||
VDMOS_MOD_NBV,
|
||||
VDMOS_MOD_RDS,
|
||||
VDMOS_MOD_N,
|
||||
VDMOS_MOD_TT,
|
||||
VDMOS_MOD_EG,
|
||||
|
|
|
|||
|
|
@ -563,9 +563,6 @@ bypass :
|
|||
ceqgb = ceqgb - gcgb*vgb + ckt->CKTag[0] *
|
||||
*(ckt->CKTstate0 + here->VDMOSqgb);
|
||||
}
|
||||
/*
|
||||
* store charge storage info for meyer's cap in lx table
|
||||
*/
|
||||
|
||||
/*
|
||||
* load current vector
|
||||
|
|
@ -597,9 +594,9 @@ bypass :
|
|||
* load y matrix
|
||||
*/
|
||||
|
||||
*(here->VDMOSDdPtr) += (here->VDMOSdrainConductance);
|
||||
*(here->VDMOSDdPtr) += (here->VDMOSdrainConductance + here->VDMOSdsConductance);
|
||||
*(here->VDMOSGgPtr) += (here->VDMOSgateConductance); //((gcgd + gcgs + gcgb));
|
||||
*(here->VDMOSSsPtr) += (here->VDMOSsourceConductance);
|
||||
*(here->VDMOSSsPtr) += (here->VDMOSsourceConductance + here->VDMOSdsConductance);
|
||||
*(here->VDMOSBbPtr) += (here->VDMOSgbd + here->VDMOSgbs + gcgb);
|
||||
*(here->VDMOSDPdpPtr) +=
|
||||
(here->VDMOSdrainConductance + here->VDMOSgds +
|
||||
|
|
@ -630,6 +627,9 @@ bypass :
|
|||
*(here->VDMOSSPdpPtr) += (-here->VDMOSgds - xrev*
|
||||
(here->VDMOSgm + here->VDMOSgmbs));
|
||||
|
||||
*(here->VDMOSDsPtr) += (-here->VDMOSdsConductance);
|
||||
*(here->VDMOSSdPtr) += (-here->VDMOSdsConductance);
|
||||
|
||||
|
||||
/* bulk diode model
|
||||
* Delivers reverse conduction and forward breakdown
|
||||
|
|
|
|||
|
|
@ -95,6 +95,9 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case VDMOS_MOD_NBV:
|
||||
value->rValue = model->VDIObrkdEmissionCoeff;
|
||||
return(OK);
|
||||
case VDMOS_MOD_RDS:
|
||||
value->rValue = model->VDMOSrds;
|
||||
return(OK);
|
||||
case VDMOS_MOD_FC:
|
||||
value->rValue = model->VDIOdepletionCapCoeff;
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -133,6 +133,10 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel)
|
|||
model->VDIObrkdEmissionCoeff = value->rValue;
|
||||
model->VDIObrkdEmissionCoeffGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_RDS:
|
||||
model->VDMOSrds = value->rValue;
|
||||
model->VDMOSrdsGiven = TRUE;
|
||||
break;
|
||||
case VDMOS_MOD_N:
|
||||
model->VDMOSDn = value->rValue;
|
||||
model->VDMOSDnGiven = TRUE;
|
||||
|
|
|
|||
|
|
@ -84,6 +84,9 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
|
|||
if (!model->VDIObrkdEmissionCoeffGiven) {
|
||||
model->VDIObrkdEmissionCoeff = 1.;
|
||||
}
|
||||
if (!model->VDMOSrdsGiven) {
|
||||
model->VDMOSrds = 1.0e30;
|
||||
}
|
||||
if (!model->VDMOSDnGiven) {
|
||||
model->VDMOSDn = 1.;
|
||||
}
|
||||
|
|
@ -279,6 +282,9 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
|
|||
TSTALLOC(VDMOSGgpPtr, VDMOSgNode, VDMOSgNodePrime);
|
||||
TSTALLOC(VDMOSGPgPtr, VDMOSgNodePrime, VDMOSgNode);
|
||||
|
||||
TSTALLOC(VDMOSDsPtr, VDMOSdNode, VDMOSsNode);
|
||||
TSTALLOC(VDMOSSdPtr, VDMOSsNode, VDMOSdNode);
|
||||
|
||||
TSTALLOC(VDIORPdPtr, VDIOposPrimeNode, VDMOSdNode);
|
||||
TSTALLOC(VDIODrpPtr, VDMOSdNode, VDIOposPrimeNode);
|
||||
TSTALLOC(VDIOSrpPtr, VDMOSsNode, VDIOposPrimeNode);
|
||||
|
|
|
|||
|
|
@ -160,6 +160,18 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
} else {
|
||||
here->VDMOSgateConductance = 0;
|
||||
}
|
||||
if (model->VDMOSrdsGiven) {
|
||||
if (model->VDMOSrds != 0) {
|
||||
here->VDMOSdsConductance = here->VDMOSm /
|
||||
model->VDMOSrds;
|
||||
}
|
||||
else {
|
||||
here->VDMOSdsConductance = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
here->VDMOSdsConductance = 0;
|
||||
}
|
||||
|
||||
/* bulk diode model */
|
||||
double egfet1, arg1, fact1, pbfact1, pbo, gmaold;
|
||||
|
|
|
|||
Loading…
Reference in New Issue