VDMOS handle thermal as a flag
This commit is contained in:
parent
cbe02d9265
commit
099e2c13eb
|
|
@ -35,7 +35,7 @@ VDMOSacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
for(here = VDMOSinstances(model); here!= NULL;
|
for(here = VDMOSinstances(model); here!= NULL;
|
||||||
here = VDMOSnextInstance(here)) {
|
here = VDMOSnextInstance(here)) {
|
||||||
|
|
||||||
selfheat = (here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven);
|
selfheat = (here->VDMOSthermal) && (model->VDMOSrthjcGiven);
|
||||||
if (here->VDMOSmode < 0) {
|
if (here->VDMOSmode < 0) {
|
||||||
xnrm=0;
|
xnrm=0;
|
||||||
xrev=1;
|
xrev=1;
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ VDMOSconvTest(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
delvds = vds - *(ckt->CKTstate0 + here->VDMOSvds);
|
delvds = vds - *(ckt->CKTstate0 + here->VDMOSvds);
|
||||||
delvgd = vgd-vgdo;
|
delvgd = vgd-vgdo;
|
||||||
|
|
||||||
selfheat = (here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven);
|
selfheat = (here->VDMOSthermal) && (model->VDMOSrthjcGiven);
|
||||||
if (selfheat) {
|
if (selfheat) {
|
||||||
delTemp = *(ckt->CKTrhs + here->VDMOStempNode);
|
delTemp = *(ckt->CKTrhs + here->VDMOStempNode);
|
||||||
deldelTemp = delTemp - *(ckt->CKTstate0 + here->VDMOSdelTemp);
|
deldelTemp = delTemp - *(ckt->CKTstate0 + here->VDMOSdelTemp);
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,6 @@ typedef struct sVDMOSinstance {
|
||||||
unsigned VDMOSsNodePrimeSet :1;
|
unsigned VDMOSsNodePrimeSet :1;
|
||||||
unsigned VDMOSicVDSGiven :1;
|
unsigned VDMOSicVDSGiven :1;
|
||||||
unsigned VDMOSicVGSGiven :1;
|
unsigned VDMOSicVGSGiven :1;
|
||||||
unsigned VDMOSthermalGiven : 1; /* flag indicate self heating on */
|
|
||||||
unsigned VDMOSvonGiven : 1;
|
unsigned VDMOSvonGiven : 1;
|
||||||
unsigned VDMOSvdsatGiven :1;
|
unsigned VDMOSvdsatGiven :1;
|
||||||
unsigned VDMOSmodeGiven :1;
|
unsigned VDMOSmodeGiven :1;
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
here = VDMOSnextInstance(here)) {
|
here = VDMOSnextInstance(here)) {
|
||||||
|
|
||||||
Temp = here->VDMOStemp;
|
Temp = here->VDMOStemp;
|
||||||
selfheat = (here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven);
|
selfheat = (here->VDMOSthermal) && (model->VDMOSrthjcGiven);
|
||||||
if (selfheat)
|
if (selfheat)
|
||||||
Check_th = 1;
|
Check_th = 1;
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ VDMOSnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt,
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
|
|
||||||
case N_DENS:
|
case N_DENS:
|
||||||
if ((inst->VDMOSthermalGiven) && (model->VDMOSrthjcGiven))
|
if ((inst->VDMOSthermal) && (model->VDMOSrthjcGiven))
|
||||||
tempRatioSH = inst->VDMOSTempSH / ckt->CKTtemp;
|
tempRatioSH = inst->VDMOSTempSH / ckt->CKTtemp;
|
||||||
else
|
else
|
||||||
tempRatioSH = 1.0;
|
tempRatioSH = 1.0;
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,6 @@ VDMOSparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
|
||||||
break;
|
break;
|
||||||
case VDMOS_THERMAL:
|
case VDMOS_THERMAL:
|
||||||
here->VDMOSthermal = (value->iValue != 0);
|
here->VDMOSthermal = (value->iValue != 0);
|
||||||
here->VDMOSthermalGiven = TRUE;
|
|
||||||
break;
|
break;
|
||||||
case VDMOS_IC:
|
case VDMOS_IC:
|
||||||
/* FALLTHROUGH added to suppress GCC warning due to
|
/* FALLTHROUGH added to suppress GCC warning due to
|
||||||
|
|
|
||||||
|
|
@ -374,7 +374,7 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
|
||||||
here->VDIOposPrimeNode = here->VDMOSsNode;
|
here->VDIOposPrimeNode = here->VDMOSsNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven)) {
|
if ((here->VDMOSthermal) && (model->VDMOSrthjcGiven)) {
|
||||||
if (here->VDMOStempNode == -1) {
|
if (here->VDMOStempNode == -1) {
|
||||||
error = CKTmkVolt(ckt,&tmp,here->VDMOSname,"Tj");
|
error = CKTmkVolt(ckt,&tmp,here->VDMOSname,"Tj");
|
||||||
if (error) return(error);
|
if (error) return(error);
|
||||||
|
|
@ -435,7 +435,7 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
|
||||||
TSTALLOC(VDIORPsPtr, VDIOposPrimeNode, VDMOSsNode);
|
TSTALLOC(VDIORPsPtr, VDIOposPrimeNode, VDMOSsNode);
|
||||||
TSTALLOC(VDIORPrpPtr, VDIOposPrimeNode, VDIOposPrimeNode);
|
TSTALLOC(VDIORPrpPtr, VDIOposPrimeNode, VDIOposPrimeNode);
|
||||||
|
|
||||||
if ((here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven)) {
|
if ((here->VDMOSthermal) && (model->VDMOSrthjcGiven)) {
|
||||||
TSTALLOC(VDMOSTemptempPtr, VDMOStempNode, VDMOStempNode); /* Transistor thermal contribution */
|
TSTALLOC(VDMOSTemptempPtr, VDMOStempNode, VDMOStempNode); /* Transistor thermal contribution */
|
||||||
TSTALLOC(VDMOSTempdpPtr, VDMOStempNode, VDMOSdNodePrime);
|
TSTALLOC(VDMOSTempdpPtr, VDMOStempNode, VDMOSdNodePrime);
|
||||||
TSTALLOC(VDMOSTempspPtr, VDMOStempNode, VDMOSsNodePrime);
|
TSTALLOC(VDMOSTempspPtr, VDMOStempNode, VDMOSsNodePrime);
|
||||||
|
|
@ -498,7 +498,7 @@ VDMOSunsetup(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
CKTdltNNum(ckt, here->VDIOposPrimeNode);
|
CKTdltNNum(ckt, here->VDIOposPrimeNode);
|
||||||
here->VDIOposPrimeNode = 0;
|
here->VDIOposPrimeNode = 0;
|
||||||
|
|
||||||
if ((here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven)) {
|
if ((here->VDMOSthermal) && (model->VDMOSrthjcGiven)) {
|
||||||
if (here->VDMOStNodePrime > 0)
|
if (here->VDMOStNodePrime > 0)
|
||||||
CKTdltNNum(ckt, here->VDMOStNodePrime);
|
CKTdltNNum(ckt, here->VDMOStNodePrime);
|
||||||
here->VDMOStNodePrime = 0;
|
here->VDMOStNodePrime = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue