this is the delvto/mulu0 instance extension to bsim3v3
This commit is contained in:
parent
5f0a6aa0fb
commit
8cc75de0b5
|
|
@ -26,6 +26,8 @@ IOP( "nrs", BSIM3_NRS, IF_REAL , "Number of squares in source"),
|
|||
IOP( "off", BSIM3_OFF, IF_FLAG , "Device is initially off"),
|
||||
IOP( "nqsmod", BSIM3_NQSMOD, IF_INTEGER, "Non-quasi-static model selector"),
|
||||
IOP( "acnqsmod", BSIM3_ACNQSMOD, IF_INTEGER, "AC NQS model selector"),
|
||||
IOP( "delvto", BSIM3_DELVTO, IF_REAL, "Zero bias threshold voltage variation"),
|
||||
IOP( "mulu0", BSIM3_MULU0, IF_REAL, "Low field mobility multiplier"),
|
||||
IP( "ic", BSIM3_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"),
|
||||
OP( "gmbs", BSIM3_GMBS, IF_REAL, "Gmb"),
|
||||
OP( "gm", BSIM3_GM, IF_REAL, "Gm"),
|
||||
|
|
|
|||
|
|
@ -65,6 +65,12 @@ BSIM3instance *here = (BSIM3instance*)inst;
|
|||
case BSIM3_ACNQSMOD:
|
||||
value->iValue = here->BSIM3acnqsMod;
|
||||
return(OK);
|
||||
case BSIM3_DELVTO:
|
||||
value->rValue = here->BSIM3delvto;
|
||||
return(OK);
|
||||
case BSIM3_MULU0:
|
||||
value->rValue = here->BSIM3mulu0;
|
||||
return(OK);
|
||||
case BSIM3_IC_VBS:
|
||||
value->rValue = here->BSIM3icVBS;
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ for (; model != NULL; model = model->BSIM3nextModel)
|
|||
((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP |
|
||||
MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC))))
|
||||
{ vbs = 0.0;
|
||||
vgs = model->BSIM3type * pParam->BSIM3vth0 + 0.1;
|
||||
vgs = model->BSIM3type * here->BSIM3vth0 + 0.1;
|
||||
vds = 0.1;
|
||||
}
|
||||
}
|
||||
|
|
@ -579,7 +579,7 @@ for (; model != NULL; model = model->BSIM3nextModel)
|
|||
dDIBL_Sft_dVd = T3 * pParam->BSIM3theta0vb0;
|
||||
DIBL_Sft = dDIBL_Sft_dVd * Vds;
|
||||
|
||||
Vth = model->BSIM3type * pParam->BSIM3vth0 - pParam->BSIM3k1
|
||||
Vth = model->BSIM3type * here->BSIM3vth0 - pParam->BSIM3k1
|
||||
* pParam->BSIM3sqrtPhi + pParam->BSIM3k1ox * sqrtPhis
|
||||
- pParam->BSIM3k2ox * Vbseff - Delt_vth - T2 + (pParam->BSIM3k3
|
||||
+ pParam->BSIM3k3b * Vbseff) * tmp2 + T1 - DIBL_Sft;
|
||||
|
|
@ -614,7 +614,7 @@ for (; model != NULL; model = model->BSIM3nextModel)
|
|||
}
|
||||
|
||||
/* Poly Gate Si Depletion Effect */
|
||||
T0 = pParam->BSIM3vfb + pParam->BSIM3phi;
|
||||
T0 = here->BSIM3vfb + pParam->BSIM3phi;
|
||||
if ((pParam->BSIM3ngate > 1.e18) && (pParam->BSIM3ngate < 1.e25)
|
||||
&& (Vgs > T0))
|
||||
/* added to avoid the problem caused by ngate */
|
||||
|
|
@ -816,7 +816,7 @@ for (; model != NULL; model = model->BSIM3nextModel)
|
|||
dDenomi_dVb *= T9;
|
||||
}
|
||||
|
||||
here->BSIM3ueff = ueff = pParam->BSIM3u0temp / Denomi;
|
||||
here->BSIM3ueff = ueff = here->BSIM3u0temp / Denomi;
|
||||
T9 = -ueff / Denomi;
|
||||
dueff_dVg = T9 * dDenomi_dVg;
|
||||
dueff_dVd = T9 * dDenomi_dVd;
|
||||
|
|
@ -1599,7 +1599,7 @@ for (; model != NULL; model = model->BSIM3nextModel)
|
|||
} /* End of VgsteffCV */
|
||||
|
||||
if (model->BSIM3capMod == 1)
|
||||
{ Vfb = pParam->BSIM3vfbzb;
|
||||
{ Vfb = here->BSIM3vfbzb;
|
||||
Arg1 = Vgs_eff - VbseffCV - Vfb - Vgsteff;
|
||||
|
||||
if (Arg1 <= 0.0)
|
||||
|
|
@ -1761,7 +1761,7 @@ for (; model != NULL; model = model->BSIM3nextModel)
|
|||
}
|
||||
|
||||
else if (model->BSIM3capMod == 2)
|
||||
{ Vfb = pParam->BSIM3vfbzb;
|
||||
{ Vfb = here->BSIM3vfbzb;
|
||||
V3 = Vfb - Vgs_eff + VbseffCV - DELTA_3;
|
||||
if (Vfb <= 0.0)
|
||||
{ T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb);
|
||||
|
|
@ -1925,24 +1925,24 @@ for (; model != NULL; model = model->BSIM3nextModel)
|
|||
|
||||
/* New Charge-Thickness capMod (CTM) begins */
|
||||
else if (model->BSIM3capMod == 3)
|
||||
{ V3 = pParam->BSIM3vfbzb - Vgs_eff + VbseffCV - DELTA_3;
|
||||
if (pParam->BSIM3vfbzb <= 0.0)
|
||||
{ T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * pParam->BSIM3vfbzb);
|
||||
{ V3 = here->BSIM3vfbzb - Vgs_eff + VbseffCV - DELTA_3;
|
||||
if (here->BSIM3vfbzb <= 0.0)
|
||||
{ T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * here->BSIM3vfbzb);
|
||||
T2 = -DELTA_3 / T0;
|
||||
}
|
||||
else
|
||||
{ T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * pParam->BSIM3vfbzb);
|
||||
{ T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * here->BSIM3vfbzb);
|
||||
T2 = DELTA_3 / T0;
|
||||
}
|
||||
|
||||
T1 = 0.5 * (1.0 + V3 / T0);
|
||||
Vfbeff = pParam->BSIM3vfbzb - 0.5 * (V3 + T0);
|
||||
Vfbeff = here->BSIM3vfbzb - 0.5 * (V3 + T0);
|
||||
dVfbeff_dVg = T1 * dVgs_eff_dVg;
|
||||
dVfbeff_dVb = -T1 * dVbseffCV_dVb;
|
||||
|
||||
Cox = model->BSIM3cox;
|
||||
Tox = 1.0e8 * model->BSIM3tox;
|
||||
T0 = (Vgs_eff - VbseffCV - pParam->BSIM3vfbzb) / Tox;
|
||||
T0 = (Vgs_eff - VbseffCV - here->BSIM3vfbzb) / Tox;
|
||||
dT0_dVg = dVgs_eff_dVg / Tox;
|
||||
dT0_dVb = -dVbseffCV_dVb / Tox;
|
||||
|
||||
|
|
@ -1979,7 +1979,7 @@ for (; model != NULL; model = model->BSIM3nextModel)
|
|||
dCoxeff_dVg *= dTcen_dVg;
|
||||
CoxWLcen = CoxWL * Coxeff / Cox;
|
||||
|
||||
Qac0 = CoxWLcen * (Vfbeff - pParam->BSIM3vfbzb);
|
||||
Qac0 = CoxWLcen * (Vfbeff - here->BSIM3vfbzb);
|
||||
QovCox = Qac0 / Coxeff;
|
||||
dQac0_dVg = CoxWLcen * dVfbeff_dVg
|
||||
+ QovCox * dCoxeff_dVg;
|
||||
|
|
@ -2032,7 +2032,7 @@ for (; model != NULL; model = model->BSIM3nextModel)
|
|||
VgDP = 0.5 * (T0 + T1);
|
||||
dVgDP_dVg = 0.5 * (dT0_dVg + (T0 * dT0_dVg + 0.002) / T1);
|
||||
|
||||
T3 = 4.0 * (Vth - pParam->BSIM3vfbzb - pParam->BSIM3phi);
|
||||
T3 = 4.0 * (Vth - here->BSIM3vfbzb - pParam->BSIM3phi);
|
||||
Tox += Tox;
|
||||
if (T3 >= 0.0)
|
||||
{ T0 = (Vgsteff + T3) / Tox;
|
||||
|
|
@ -2424,9 +2424,9 @@ line755:
|
|||
here->BSIM3cqbb = -(here->BSIM3cqgb + here->BSIM3cqdb
|
||||
+ here->BSIM3cqsb);
|
||||
|
||||
gtau_drift = fabs(pParam->BSIM3tconst * qcheq) * ScalingFactor;
|
||||
gtau_drift = fabs(here->BSIM3tconst * qcheq) * ScalingFactor;
|
||||
T0 = pParam->BSIM3leffCV * pParam->BSIM3leffCV;
|
||||
gtau_diff = 16.0 * pParam->BSIM3u0temp * model->BSIM3vtm / T0
|
||||
gtau_diff = 16.0 * here->BSIM3u0temp * model->BSIM3vtm / T0
|
||||
* ScalingFactor;
|
||||
here->BSIM3gtau = gtau_drift + gtau_diff;
|
||||
if (here->BSIM3acnqsMod)
|
||||
|
|
@ -2535,9 +2535,9 @@ line755:
|
|||
}
|
||||
else
|
||||
{ if (qcheq > 0.0)
|
||||
T0 = pParam->BSIM3tconst * qdef * ScalingFactor;
|
||||
T0 = here->BSIM3tconst * qdef * ScalingFactor;
|
||||
else
|
||||
T0 = -pParam->BSIM3tconst * qdef * ScalingFactor;
|
||||
T0 = -here->BSIM3tconst * qdef * ScalingFactor;
|
||||
ggtg = here->BSIM3gtg = T0 * here->BSIM3cqgb;
|
||||
ggtd = here->BSIM3gtd = T0 * here->BSIM3cqdb;
|
||||
ggts = here->BSIM3gts = T0 * here->BSIM3cqsb;
|
||||
|
|
@ -2651,9 +2651,9 @@ line755:
|
|||
}
|
||||
else
|
||||
{ if (qcheq > 0.0)
|
||||
T0 = pParam->BSIM3tconst * qdef * ScalingFactor;
|
||||
T0 = here->BSIM3tconst * qdef * ScalingFactor;
|
||||
else
|
||||
T0 = -pParam->BSIM3tconst * qdef * ScalingFactor;
|
||||
T0 = -here->BSIM3tconst * qdef * ScalingFactor;
|
||||
ggtg = here->BSIM3gtg = T0 * here->BSIM3cqgb;
|
||||
ggts = here->BSIM3gtd = T0 * here->BSIM3cqdb;
|
||||
ggtd = here->BSIM3gts = T0 * here->BSIM3cqsb;
|
||||
|
|
@ -2804,7 +2804,7 @@ line850:
|
|||
dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0;
|
||||
|
||||
if (here->BSIM3nqsMod)
|
||||
here->BSIM3gtau = 16.0 * pParam->BSIM3u0temp * model->BSIM3vtm
|
||||
here->BSIM3gtau = 16.0 * here->BSIM3u0temp * model->BSIM3vtm
|
||||
/ pParam->BSIM3leffCV / pParam->BSIM3leffCV
|
||||
* ScalingFactor;
|
||||
else
|
||||
|
|
|
|||
|
|
@ -91,6 +91,14 @@ IFvalue *select)
|
|||
here->BSIM3acnqsMod = value->iValue;
|
||||
here->BSIM3acnqsModGiven = TRUE;
|
||||
break;
|
||||
case BSIM3_DELVTO:
|
||||
here->BSIM3delvto = value->rValue;
|
||||
here->BSIM3delvtoGiven = TRUE;
|
||||
break;
|
||||
case BSIM3_MULU0:
|
||||
here->BSIM3mulu0 = value->rValue;
|
||||
here->BSIM3mulu0Given = TRUE;
|
||||
break;
|
||||
case BSIM3_IC:
|
||||
switch(value->v.numValue){
|
||||
case 3:
|
||||
|
|
|
|||
|
|
@ -875,6 +875,10 @@ BSIM3instance **InstArray;
|
|||
here->BSIM3drainPerimeter = 0.0;
|
||||
if (!here->BSIM3drainSquaresGiven)
|
||||
here->BSIM3drainSquares = 1.0;
|
||||
if (!here->BSIM3delvtoGiven)
|
||||
here->BSIM3delvto = 0.0;
|
||||
if (!here->BSIM3mulu0Given)
|
||||
here->BSIM3mulu0 = 1.0;
|
||||
if (!here->BSIM3icVBSGiven)
|
||||
here->BSIM3icVBS = 0.0;
|
||||
if (!here->BSIM3icVDSGiven)
|
||||
|
|
|
|||
|
|
@ -795,6 +795,16 @@ int Size_Not_Found;
|
|||
/* End of vfbzb */
|
||||
}
|
||||
|
||||
/* adding delvto */
|
||||
here->BSIM3vth0 = pParam->BSIM3vth0 + here->BSIM3delvto;
|
||||
here->BSIM3vfb = pParam->BSIM3vfb + model->BSIM3type * here->BSIM3delvto;
|
||||
here->BSIM3vfbzb = pParam->BSIM3vfbzb + model->BSIM3type * here->BSIM3delvto;
|
||||
|
||||
/* low field mobility multiplier */
|
||||
here->BSIM3u0temp = pParam->BSIM3u0temp * here->BSIM3mulu0;
|
||||
here->BSIM3tconst = here->BSIM3u0temp * pParam->BSIM3elm / (model->BSIM3cox
|
||||
* pParam->BSIM3weffCV * pParam->BSIM3leffCV * T0);
|
||||
|
||||
/* process source/drain series resistance */
|
||||
here->BSIM3drainConductance = model->BSIM3sheetResistance
|
||||
* here->BSIM3drainSquares;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,13 @@ typedef struct sBSIM3instance
|
|||
double BSIM3sourcePerimeter;
|
||||
double BSIM3sourceConductance;
|
||||
double BSIM3drainConductance;
|
||||
double BSIM3delvto;
|
||||
double BSIM3mulu0;
|
||||
double BSIM3vth0;
|
||||
double BSIM3vfb;
|
||||
double BSIM3vfbzb;
|
||||
double BSIM3u0temp;
|
||||
double BSIM3tconst;
|
||||
|
||||
double BSIM3icVBS;
|
||||
double BSIM3icVDS;
|
||||
|
|
@ -122,6 +129,8 @@ typedef struct sBSIM3instance
|
|||
unsigned BSIM3sourceSquaresGiven :1;
|
||||
unsigned BSIM3drainPerimeterGiven :1;
|
||||
unsigned BSIM3sourcePerimeterGiven :1;
|
||||
unsigned BSIM3delvtoGiven :1;
|
||||
unsigned BSIM3mulu0Given :1;
|
||||
unsigned BSIM3dNodePrimeSet :1;
|
||||
unsigned BSIM3sNodePrimeSet :1;
|
||||
unsigned BSIM3icVBSGiven :1;
|
||||
|
|
@ -1278,7 +1287,6 @@ typedef struct sBSIM3model
|
|||
/* device parameters */
|
||||
#define BSIM3_W 1
|
||||
#define BSIM3_L 2
|
||||
#define BSIM3_M 16
|
||||
#define BSIM3_AS 3
|
||||
#define BSIM3_AD 4
|
||||
#define BSIM3_PS 5
|
||||
|
|
@ -1292,6 +1300,9 @@ typedef struct sBSIM3model
|
|||
#define BSIM3_IC 13
|
||||
#define BSIM3_NQSMOD 14
|
||||
#define BSIM3_ACNQSMOD 15
|
||||
#define BSIM3_M 16
|
||||
#define BSIM3_DELVTO 17
|
||||
#define BSIM3_MULU0 18
|
||||
|
||||
/* model parameters */
|
||||
#define BSIM3_MOD_CAPMOD 101
|
||||
|
|
|
|||
Loading…
Reference in New Issue