remove drain and source resistance contributions
This commit is contained in:
parent
84005efe8b
commit
0ebb7348ca
|
|
@ -15,12 +15,6 @@ IFparm VDMOSpTable[] = { /* parameters */
|
||||||
IOPU("m", VDMOS_M, IF_REAL, "Multiplier"),
|
IOPU("m", VDMOS_M, IF_REAL, "Multiplier"),
|
||||||
IOPU("l", VDMOS_L, IF_REAL, "Length"),
|
IOPU("l", VDMOS_L, IF_REAL, "Length"),
|
||||||
IOPU("w", VDMOS_W, IF_REAL, "Width"),
|
IOPU("w", VDMOS_W, IF_REAL, "Width"),
|
||||||
IOPU("ad", VDMOS_AD, IF_REAL, "Drain area"),
|
|
||||||
IOPU("as", VDMOS_AS, IF_REAL, "Source area"),
|
|
||||||
IOPU("pd", VDMOS_PD, IF_REAL, "Drain perimeter"),
|
|
||||||
IOPU("ps", VDMOS_PS, IF_REAL, "Source perimeter"),
|
|
||||||
IOPU("nrd", VDMOS_NRD, IF_REAL, "Drain squares"),
|
|
||||||
IOPU("nrs", VDMOS_NRS, IF_REAL, "Source squares"),
|
|
||||||
IP("off", VDMOS_OFF, IF_FLAG, "Device initially off"),
|
IP("off", VDMOS_OFF, IF_FLAG, "Device initially off"),
|
||||||
IOPU("icvds", VDMOS_IC_VDS, IF_REAL, "Initial D-S voltage"),
|
IOPU("icvds", VDMOS_IC_VDS, IF_REAL, "Initial D-S voltage"),
|
||||||
IOPU("icvgs", VDMOS_IC_VGS, IF_REAL, "Initial G-S voltage"),
|
IOPU("icvgs", VDMOS_IC_VGS, IF_REAL, "Initial G-S voltage"),
|
||||||
|
|
@ -125,7 +119,6 @@ IFparm VDMOSmPTable[] = { /* model parameters */
|
||||||
IOP("gamma", VDMOS_MOD_GAMMA, IF_REAL, "Bulk threshold parameter"),
|
IOP("gamma", VDMOS_MOD_GAMMA, IF_REAL, "Bulk threshold parameter"),
|
||||||
IOPA("cbd", VDMOS_MOD_CBD, IF_REAL, "B-D junction capacitance"),
|
IOPA("cbd", VDMOS_MOD_CBD, IF_REAL, "B-D junction capacitance"),
|
||||||
IOPA("cbs", VDMOS_MOD_CBS, IF_REAL, "B-S junction capacitance"),
|
IOPA("cbs", VDMOS_MOD_CBS, IF_REAL, "B-S junction capacitance"),
|
||||||
IOP("rsh", VDMOS_MOD_RSH, IF_REAL, "Sheet resistance"),
|
|
||||||
IOPA("cj", VDMOS_MOD_CJ, IF_REAL, "Bottom junction cap per area"),
|
IOPA("cj", VDMOS_MOD_CJ, IF_REAL, "Bottom junction cap per area"),
|
||||||
IOP("mj", VDMOS_MOD_MJ, IF_REAL, "Bottom grading coefficient"),
|
IOP("mj", VDMOS_MOD_MJ, IF_REAL, "Bottom grading coefficient"),
|
||||||
IOPA("cjsw", VDMOS_MOD_CJSW, IF_REAL, "Side junction cap per area"),
|
IOPA("cjsw", VDMOS_MOD_CJSW, IF_REAL, "Side junction cap per area"),
|
||||||
|
|
|
||||||
|
|
@ -44,24 +44,6 @@ VDMOSask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value,
|
||||||
case VDMOS_W:
|
case VDMOS_W:
|
||||||
value->rValue = here->VDMOSw;
|
value->rValue = here->VDMOSw;
|
||||||
return(OK);
|
return(OK);
|
||||||
case VDMOS_AS:
|
|
||||||
value->rValue = here->VDMOSsourceArea;
|
|
||||||
return(OK);
|
|
||||||
case VDMOS_AD:
|
|
||||||
value->rValue = here->VDMOSdrainArea;
|
|
||||||
return(OK);
|
|
||||||
case VDMOS_PS:
|
|
||||||
value->rValue = here->VDMOSsourcePerimiter;
|
|
||||||
return(OK);
|
|
||||||
case VDMOS_PD:
|
|
||||||
value->rValue = here->VDMOSdrainPerimiter;
|
|
||||||
return(OK);
|
|
||||||
case VDMOS_NRS:
|
|
||||||
value->rValue = here->VDMOSsourceSquares;
|
|
||||||
return(OK);
|
|
||||||
case VDMOS_NRD:
|
|
||||||
value->rValue = here->VDMOSdrainSquares;
|
|
||||||
return(OK);
|
|
||||||
case VDMOS_OFF:
|
case VDMOS_OFF:
|
||||||
value->rValue = here->VDMOSoff;
|
value->rValue = here->VDMOSoff;
|
||||||
return(OK);
|
return(OK);
|
||||||
|
|
|
||||||
|
|
@ -50,12 +50,6 @@ typedef struct sVDMOSinstance {
|
||||||
|
|
||||||
double VDMOSl; /* the length of the channel region */
|
double VDMOSl; /* the length of the channel region */
|
||||||
double VDMOSw; /* the width of the channel region */
|
double VDMOSw; /* the width of the channel region */
|
||||||
double VDMOSdrainArea; /* the area of the drain diffusion */
|
|
||||||
double VDMOSsourceArea; /* the area of the source diffusion */
|
|
||||||
double VDMOSdrainSquares; /* the length of the drain in squares */
|
|
||||||
double VDMOSsourceSquares; /* the length of the source in squares */
|
|
||||||
double VDMOSdrainPerimiter;
|
|
||||||
double VDMOSsourcePerimiter;
|
|
||||||
double VDMOSsourceConductance; /*conductance of source(or 0):set in setup*/
|
double VDMOSsourceConductance; /*conductance of source(or 0):set in setup*/
|
||||||
double VDMOSdrainConductance; /*conductance of drain(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 VDMOSgateConductance; /*conductance of gate(or 0):set in setup*/
|
||||||
|
|
@ -171,12 +165,6 @@ typedef struct sVDMOSinstance {
|
||||||
unsigned VDMOSmGiven :1;
|
unsigned VDMOSmGiven :1;
|
||||||
unsigned VDMOSlGiven :1;
|
unsigned VDMOSlGiven :1;
|
||||||
unsigned VDMOSwGiven :1;
|
unsigned VDMOSwGiven :1;
|
||||||
unsigned VDMOSdrainAreaGiven :1;
|
|
||||||
unsigned VDMOSsourceAreaGiven :1;
|
|
||||||
unsigned VDMOSdrainSquaresGiven :1;
|
|
||||||
unsigned VDMOSsourceSquaresGiven :1;
|
|
||||||
unsigned VDMOSdrainPerimiterGiven :1;
|
|
||||||
unsigned VDMOSsourcePerimiterGiven :1;
|
|
||||||
unsigned VDMOSdNodePrimeSet :1;
|
unsigned VDMOSdNodePrimeSet :1;
|
||||||
unsigned VDMOSsNodePrimeSet :1;
|
unsigned VDMOSsNodePrimeSet :1;
|
||||||
unsigned VDMOSicVBSGiven :1;
|
unsigned VDMOSicVBSGiven :1;
|
||||||
|
|
@ -338,7 +326,6 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
|
||||||
unsigned VDMOSdrainResistanceGiven :1;
|
unsigned VDMOSdrainResistanceGiven :1;
|
||||||
unsigned VDMOSsourceResistanceGiven :1;
|
unsigned VDMOSsourceResistanceGiven :1;
|
||||||
unsigned VDMOSgateResistanceGiven :1;
|
unsigned VDMOSgateResistanceGiven :1;
|
||||||
unsigned VDMOSsheetResistanceGiven :1;
|
|
||||||
unsigned VDMOStransconductanceGiven :1;
|
unsigned VDMOStransconductanceGiven :1;
|
||||||
unsigned VDMOSvt0Given :1;
|
unsigned VDMOSvt0Given :1;
|
||||||
unsigned VDMOScapBDGiven :1;
|
unsigned VDMOScapBDGiven :1;
|
||||||
|
|
@ -377,12 +364,6 @@ typedef struct sVDMOSmodel { /* model structure for a resistor */
|
||||||
enum {
|
enum {
|
||||||
VDMOS_W = 1,
|
VDMOS_W = 1,
|
||||||
VDMOS_L,
|
VDMOS_L,
|
||||||
VDMOS_AS,
|
|
||||||
VDMOS_AD,
|
|
||||||
VDMOS_PS,
|
|
||||||
VDMOS_PD,
|
|
||||||
VDMOS_NRS,
|
|
||||||
VDMOS_NRD,
|
|
||||||
VDMOS_OFF,
|
VDMOS_OFF,
|
||||||
VDMOS_IC,
|
VDMOS_IC,
|
||||||
VDMOS_IC_VBS,
|
VDMOS_IC_VBS,
|
||||||
|
|
@ -417,7 +398,6 @@ enum {
|
||||||
VDMOS_MOD_MJSW,
|
VDMOS_MOD_MJSW,
|
||||||
VDMOS_MOD_JS,
|
VDMOS_MOD_JS,
|
||||||
VDMOS_MOD_TOX,
|
VDMOS_MOD_TOX,
|
||||||
VDMOS_MOD_RSH,
|
|
||||||
VDMOS_MOD_U0,
|
VDMOS_MOD_U0,
|
||||||
VDMOS_MOD_FC,
|
VDMOS_MOD_FC,
|
||||||
VDMOS_MOD_NSUB,
|
VDMOS_MOD_NSUB,
|
||||||
|
|
|
||||||
|
|
@ -82,17 +82,9 @@ VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
|
|
||||||
vt = CONSTKoverQ * here->VDMOStemp;
|
vt = CONSTKoverQ * here->VDMOStemp;
|
||||||
|
|
||||||
if( (here->VDMOStSatCurDens == 0) ||
|
|
||||||
(here->VDMOSdrainArea == 0) ||
|
|
||||||
(here->VDMOSsourceArea == 0)) {
|
|
||||||
DrainSatCur = here->VDMOSm * here->VDMOStSatCur;
|
DrainSatCur = here->VDMOSm * here->VDMOStSatCur;
|
||||||
SourceSatCur = here->VDMOSm * here->VDMOStSatCur;
|
SourceSatCur = here->VDMOSm * here->VDMOStSatCur;
|
||||||
} else {
|
|
||||||
DrainSatCur = here->VDMOStSatCurDens *
|
|
||||||
here->VDMOSm * here->VDMOSdrainArea;
|
|
||||||
SourceSatCur = here->VDMOStSatCurDens *
|
|
||||||
here->VDMOSm * here->VDMOSsourceArea;
|
|
||||||
}
|
|
||||||
Beta = here->VDMOStTransconductance * here->VDMOSm *
|
Beta = here->VDMOStTransconductance * here->VDMOSm *
|
||||||
here->VDMOSw/here->VDMOSl;
|
here->VDMOSw/here->VDMOSl;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -99,18 +99,8 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
* here. They may be moved at the expense of instance size
|
* here. They may be moved at the expense of instance size
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ((here->VDMOStSatCurDens == 0) ||
|
|
||||||
(here->VDMOSdrainArea == 0) ||
|
|
||||||
(here->VDMOSsourceArea == 0)) {
|
|
||||||
DrainSatCur = here->VDMOSm * here->VDMOStSatCur;
|
DrainSatCur = here->VDMOSm * here->VDMOStSatCur;
|
||||||
SourceSatCur = here->VDMOSm * here->VDMOStSatCur;
|
SourceSatCur = here->VDMOSm * here->VDMOStSatCur;
|
||||||
}
|
|
||||||
else {
|
|
||||||
DrainSatCur = here->VDMOStSatCurDens *
|
|
||||||
here->VDMOSm * here->VDMOSdrainArea;
|
|
||||||
SourceSatCur = here->VDMOStSatCurDens *
|
|
||||||
here->VDMOSm * here->VDMOSsourceArea;
|
|
||||||
}
|
|
||||||
Beta = here->VDMOStTransconductance * here->VDMOSm *
|
Beta = here->VDMOStTransconductance * here->VDMOSm *
|
||||||
here->VDMOSw / here->VDMOSl;
|
here->VDMOSw / here->VDMOSl;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,9 +96,6 @@ VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
||||||
case VDMOS_MOD_TOX:
|
case VDMOS_MOD_TOX:
|
||||||
value->rValue = model->VDMOSoxideThickness;
|
value->rValue = model->VDMOSoxideThickness;
|
||||||
return(OK);
|
return(OK);
|
||||||
case VDMOS_MOD_RSH:
|
|
||||||
value->rValue = model->VDMOSsheetResistance;
|
|
||||||
return(OK);
|
|
||||||
case VDMOS_MOD_U0:
|
case VDMOS_MOD_U0:
|
||||||
value->rValue = model->VDMOSsurfaceMobility;
|
value->rValue = model->VDMOSsurfaceMobility;
|
||||||
return(OK);
|
return(OK);
|
||||||
|
|
|
||||||
|
|
@ -91,10 +91,6 @@ VDMOSmParam(int param, IFvalue *value, GENmodel *inModel)
|
||||||
model->VDMOSoxideThickness = value->rValue;
|
model->VDMOSoxideThickness = value->rValue;
|
||||||
model->VDMOSoxideThicknessGiven = TRUE;
|
model->VDMOSoxideThicknessGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case VDMOS_MOD_RSH:
|
|
||||||
model->VDMOSsheetResistance = value->rValue;
|
|
||||||
model->VDMOSsheetResistanceGiven = TRUE;
|
|
||||||
break;
|
|
||||||
case VDMOS_MOD_U0:
|
case VDMOS_MOD_U0:
|
||||||
model->VDMOSsurfaceMobility = value->rValue;
|
model->VDMOSsurfaceMobility = value->rValue;
|
||||||
model->VDMOSsurfaceMobilityGiven = TRUE;
|
model->VDMOSsurfaceMobilityGiven = TRUE;
|
||||||
|
|
|
||||||
|
|
@ -49,30 +49,6 @@ VDMOSparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
|
||||||
here->VDMOSl = value->rValue * scale;
|
here->VDMOSl = value->rValue * scale;
|
||||||
here->VDMOSlGiven = TRUE;
|
here->VDMOSlGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case VDMOS_AS:
|
|
||||||
here->VDMOSsourceArea = value->rValue * scale * scale;
|
|
||||||
here->VDMOSsourceAreaGiven = TRUE;
|
|
||||||
break;
|
|
||||||
case VDMOS_AD:
|
|
||||||
here->VDMOSdrainArea = value->rValue * scale * scale;
|
|
||||||
here->VDMOSdrainAreaGiven = TRUE;
|
|
||||||
break;
|
|
||||||
case VDMOS_PS:
|
|
||||||
here->VDMOSsourcePerimiter = value->rValue * scale;
|
|
||||||
here->VDMOSsourcePerimiterGiven = TRUE;
|
|
||||||
break;
|
|
||||||
case VDMOS_PD:
|
|
||||||
here->VDMOSdrainPerimiter = value->rValue * scale;
|
|
||||||
here->VDMOSdrainPerimiterGiven = TRUE;
|
|
||||||
break;
|
|
||||||
case VDMOS_NRS:
|
|
||||||
here->VDMOSsourceSquares = value->rValue;
|
|
||||||
here->VDMOSsourceSquaresGiven = TRUE;
|
|
||||||
break;
|
|
||||||
case VDMOS_NRD:
|
|
||||||
here->VDMOSdrainSquares = value->rValue;
|
|
||||||
here->VDMOSdrainSquaresGiven = TRUE;
|
|
||||||
break;
|
|
||||||
case VDMOS_OFF:
|
case VDMOS_OFF:
|
||||||
here->VDMOSoff = (value->iValue != 0);
|
here->VDMOSoff = (value->iValue != 0);
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -96,9 +96,6 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
|
||||||
here->VDMOSstates = *states;
|
here->VDMOSstates = *states;
|
||||||
*states += VDMOSnumStates;
|
*states += VDMOSnumStates;
|
||||||
|
|
||||||
if (!here->VDMOSdrainPerimiterGiven) {
|
|
||||||
here->VDMOSdrainPerimiter = 0;
|
|
||||||
}
|
|
||||||
if (!here->VDMOSicVBSGiven) {
|
if (!here->VDMOSicVBSGiven) {
|
||||||
here->VDMOSicVBS = 0;
|
here->VDMOSicVBS = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -108,25 +105,13 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
|
||||||
if (!here->VDMOSicVGSGiven) {
|
if (!here->VDMOSicVGSGiven) {
|
||||||
here->VDMOSicVGS = 0;
|
here->VDMOSicVGS = 0;
|
||||||
}
|
}
|
||||||
if (!here->VDMOSsourcePerimiterGiven) {
|
|
||||||
here->VDMOSsourcePerimiter = 0;
|
|
||||||
}
|
|
||||||
if (!here->VDMOSvdsatGiven) {
|
if (!here->VDMOSvdsatGiven) {
|
||||||
here->VDMOSvdsat = 0;
|
here->VDMOSvdsat = 0;
|
||||||
}
|
}
|
||||||
if (!here->VDMOSvonGiven) {
|
if (!here->VDMOSvonGiven) {
|
||||||
here->VDMOSvon = 0;
|
here->VDMOSvon = 0;
|
||||||
}
|
}
|
||||||
if (!here->VDMOSdrainSquaresGiven) {
|
if (model->VDMOSdrainResistance != 0) {
|
||||||
here->VDMOSdrainSquares = 1;
|
|
||||||
}
|
|
||||||
if (!here->VDMOSsourceSquaresGiven) {
|
|
||||||
here->VDMOSsourceSquares = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((model->VDMOSdrainResistance != 0
|
|
||||||
|| (model->VDMOSsheetResistance != 0
|
|
||||||
&& here->VDMOSdrainSquares != 0))) {
|
|
||||||
if (here->VDMOSdNodePrime == 0) {
|
if (here->VDMOSdNodePrime == 0) {
|
||||||
error = CKTmkVolt(ckt, &tmp, here->VDMOSname, "drain");
|
error = CKTmkVolt(ckt, &tmp, here->VDMOSname, "drain");
|
||||||
if (error) return(error);
|
if (error) return(error);
|
||||||
|
|
@ -150,9 +135,7 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
|
||||||
here->VDMOSdNodePrime = here->VDMOSdNode;
|
here->VDMOSdNodePrime = here->VDMOSdNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((model->VDMOSsourceResistance != 0 ||
|
if (model->VDMOSsourceResistance != 0) {
|
||||||
(model->VDMOSsheetResistance != 0 &&
|
|
||||||
here->VDMOSsourceSquares != 0))) {
|
|
||||||
if (here->VDMOSsNodePrime == 0) {
|
if (here->VDMOSsNodePrime == 0) {
|
||||||
error = CKTmkVolt(ckt, &tmp, here->VDMOSname, "source");
|
error = CKTmkVolt(ckt, &tmp, here->VDMOSname, "source");
|
||||||
if (error) return(error);
|
if (error) return(error);
|
||||||
|
|
|
||||||
|
|
@ -141,18 +141,12 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
arg = -egfet/(kt+kt)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP));
|
arg = -egfet/(kt+kt)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP));
|
||||||
pbfact = -2*vt *(1.5*log(fact2)+CHARGE*arg);
|
pbfact = -2*vt *(1.5*log(fact2)+CHARGE*arg);
|
||||||
|
|
||||||
if(!here->VDMOSdrainAreaGiven) {
|
|
||||||
here->VDMOSdrainArea = ckt->CKTdefaultMosAD;
|
|
||||||
}
|
|
||||||
if(!here->VDMOSmGiven) {
|
if(!here->VDMOSmGiven) {
|
||||||
here->VDMOSm = 1;
|
here->VDMOSm = 1;
|
||||||
}
|
}
|
||||||
if(!here->VDMOSlGiven) {
|
if(!here->VDMOSlGiven) {
|
||||||
here->VDMOSl = 1;
|
here->VDMOSl = 1;
|
||||||
}
|
}
|
||||||
if(!here->VDMOSsourceAreaGiven) {
|
|
||||||
here->VDMOSsourceArea = ckt->CKTdefaultMosAS;
|
|
||||||
}
|
|
||||||
if(!here->VDMOSwGiven) {
|
if(!here->VDMOSwGiven) {
|
||||||
here->VDMOSw = 1;
|
here->VDMOSw = 1;
|
||||||
}
|
}
|
||||||
|
|
@ -194,37 +188,17 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
(4e-4*(here->VDMOStemp-REFTEMP)-gmanew));
|
(4e-4*(here->VDMOStemp-REFTEMP)-gmanew));
|
||||||
here->VDMOStCjsw *= capfact;
|
here->VDMOStCjsw *= capfact;
|
||||||
here->VDMOStDepCap = model->VDMOSfwdCapDepCoeff * here->VDMOStBulkPot;
|
here->VDMOStDepCap = model->VDMOSfwdCapDepCoeff * here->VDMOStBulkPot;
|
||||||
if( (here->VDMOStSatCurDens == 0) ||
|
if (here->VDMOStSatCurDens == 0) {
|
||||||
(here->VDMOSdrainArea == 0) ||
|
|
||||||
(here->VDMOSsourceArea == 0) ) {
|
|
||||||
here->VDMOSsourceVcrit = here->VDMOSdrainVcrit =
|
here->VDMOSsourceVcrit = here->VDMOSdrainVcrit =
|
||||||
vt*log(vt/(CONSTroot2*here->VDMOSm*here->VDMOStSatCur));
|
vt*log(vt/(CONSTroot2*here->VDMOSm*here->VDMOStSatCur));
|
||||||
} else {
|
|
||||||
here->VDMOSdrainVcrit =
|
|
||||||
vt * log( vt / (CONSTroot2 *
|
|
||||||
here->VDMOSm *
|
|
||||||
here->VDMOStSatCurDens * here->VDMOSdrainArea));
|
|
||||||
here->VDMOSsourceVcrit =
|
|
||||||
vt * log( vt / (CONSTroot2 *
|
|
||||||
here->VDMOSm *
|
|
||||||
here->VDMOStSatCurDens * here->VDMOSsourceArea));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(model->VDMOScapBDGiven) {
|
if(model->VDMOScapBDGiven) {
|
||||||
czbd = here->VDMOStCbd * here->VDMOSm;
|
czbd = here->VDMOStCbd * here->VDMOSm;
|
||||||
} else {
|
} else {
|
||||||
if(model->VDMOSbulkCapFactorGiven) {
|
|
||||||
czbd=here->VDMOStCj*here->VDMOSm*here->VDMOSdrainArea;
|
|
||||||
} else {
|
|
||||||
czbd=0;
|
czbd=0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(model->VDMOSsideWallCapFactorGiven) {
|
|
||||||
czbdsw= here->VDMOStCjsw * here->VDMOSdrainPerimiter *
|
|
||||||
here->VDMOSm;
|
|
||||||
} else {
|
|
||||||
czbdsw=0;
|
czbdsw=0;
|
||||||
}
|
|
||||||
arg = 1-model->VDMOSfwdCapDepCoeff;
|
arg = 1-model->VDMOSfwdCapDepCoeff;
|
||||||
sarg = exp( (-model->VDMOSbulkJctBotGradingCoeff) * log(arg) );
|
sarg = exp( (-model->VDMOSbulkJctBotGradingCoeff) * log(arg) );
|
||||||
sargsw = exp( (-model->VDMOSbulkJctSideGradingCoeff) * log(arg) );
|
sargsw = exp( (-model->VDMOSbulkJctSideGradingCoeff) * log(arg) );
|
||||||
|
|
@ -249,18 +223,9 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
if(model->VDMOScapBSGiven) {
|
if(model->VDMOScapBSGiven) {
|
||||||
czbs=here->VDMOStCbs * here->VDMOSm;
|
czbs=here->VDMOStCbs * here->VDMOSm;
|
||||||
} else {
|
} else {
|
||||||
if(model->VDMOSbulkCapFactorGiven) {
|
|
||||||
czbs=here->VDMOStCj*here->VDMOSsourceArea * here->VDMOSm;
|
|
||||||
} else {
|
|
||||||
czbs=0;
|
czbs=0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(model->VDMOSsideWallCapFactorGiven) {
|
|
||||||
czbssw = here->VDMOStCjsw * here->VDMOSsourcePerimiter *
|
|
||||||
here->VDMOSm;
|
|
||||||
} else {
|
|
||||||
czbssw=0;
|
czbssw=0;
|
||||||
}
|
|
||||||
arg = 1-model->VDMOSfwdCapDepCoeff;
|
arg = 1-model->VDMOSfwdCapDepCoeff;
|
||||||
sarg = exp( (-model->VDMOSbulkJctBotGradingCoeff) * log(arg) );
|
sarg = exp( (-model->VDMOSbulkJctBotGradingCoeff) * log(arg) );
|
||||||
sargsw = exp( (-model->VDMOSbulkJctSideGradingCoeff) * log(arg) );
|
sargsw = exp( (-model->VDMOSbulkJctSideGradingCoeff) * log(arg) );
|
||||||
|
|
@ -292,14 +257,6 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
else {
|
else {
|
||||||
here->VDMOSdrainConductance = 0;
|
here->VDMOSdrainConductance = 0;
|
||||||
}
|
}
|
||||||
} else if (model->VDMOSsheetResistanceGiven) {
|
|
||||||
if(model->VDMOSsheetResistance != 0) {
|
|
||||||
here->VDMOSdrainConductance =
|
|
||||||
here->VDMOSm /
|
|
||||||
(model->VDMOSsheetResistance*here->VDMOSdrainSquares);
|
|
||||||
} else {
|
|
||||||
here->VDMOSdrainConductance = 0;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
here->VDMOSdrainConductance = 0;
|
here->VDMOSdrainConductance = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -310,15 +267,6 @@ VDMOStemp(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
} else {
|
} else {
|
||||||
here->VDMOSsourceConductance = 0;
|
here->VDMOSsourceConductance = 0;
|
||||||
}
|
}
|
||||||
} else if (model->VDMOSsheetResistanceGiven) {
|
|
||||||
if ((model->VDMOSsheetResistance != 0) &&
|
|
||||||
(here->VDMOSsourceSquares != 0)) {
|
|
||||||
here->VDMOSsourceConductance =
|
|
||||||
here->VDMOSm /
|
|
||||||
(model->VDMOSsheetResistance*here->VDMOSsourceSquares);
|
|
||||||
} else {
|
|
||||||
here->VDMOSsourceConductance = 0;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
here->VDMOSsourceConductance = 0;
|
here->VDMOSsourceConductance = 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue