Update to version 4.6.4

This commit is contained in:
dwarning 2009-08-22 18:13:17 +00:00
parent ca8bbd2695
commit 87e5559088
5 changed files with 35 additions and 47 deletions

12
DEVICES
View File

@ -650,7 +650,7 @@ will be updated every time the device specific code is altered or changed to ref
Dir: devices/bsim3 Dir: devices/bsim3
Status: TO BE TESTED Status: TO BE TESTED
This is the BSIM3v3.2.4 model from Berkeley device group. This is the actual BSIM3 model from Berkeley Device Group.
You can find some test netlists with results for this model You can find some test netlists with results for this model
on its web site. on its web site.
@ -665,17 +665,21 @@ will be updated every time the device specific code is altered or changed to ref
11.13 BSIM4 - BSIM model level 4 11.13 BSIM4 - BSIM model level 4
Ver: 4.2.0 - 4.6.3 Ver: 4.2.0 - 4.6.4
Class: M Class: M
Level: 14 & 54, version = 4.2, 4.3, 4.4, 4.5, 4.6.3 Level: 14 & 54, version = 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6
Dir: devices/bsim4 Dir: devices/bsim4
Status: Status:
This is the BSIM4 device model from Berkeley Device Group. This is the actual BSIM4 model from Berkeley Device Group.
Test are available on its web site. Test are available on its web site.
Web site: http://www-device.eecs.berkeley.edu/~bsim3/bsim4.html Web site: http://www-device.eecs.berkeley.edu/~bsim3/bsim4.html
Enhancements over the original model:
- Parallel Multiplier
- NodesetFix
11.14 HiSIM - Hiroshima-university STARC IGFET Model 11.14 HiSIM - Hiroshima-university STARC IGFET Model

View File

@ -1,5 +1,5 @@
/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008****/ /**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008****/
/**** BSIM4.6.4 Update ngspice 08/22/2009 ****/
/********** /**********
* Copyright 2006 Regents of the University of California. All rights reserved. * Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4ld.c of BSIM4.6.2. * File: b4ld.c of BSIM4.6.2.
@ -1651,6 +1651,7 @@ for (; model != NULL; model = model->BSIM4nextModel)
dEsatL_dVb *= T10; dEsatL_dVb *= T10;
dEsatL_dVb += EsatL * dT10_dVb; dEsatL_dVb += EsatL * dT10_dVb;
EsatL *= T10; EsatL *= T10;
Esat = EsatL / Leff; /* bugfix by Wenwei Yang (4.6.4) */
here->BSIM4EsatL = EsatL; here->BSIM4EsatL = EsatL;
} }

View File

@ -1,5 +1,5 @@
/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/
/**** BSIM4.6.4 Update ngspice 08/22/2009 ****/
/********** /**********
* Copyright 2006 Regents of the University of California. All rights reserved. * Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4noi.c of BSIM4.6.2. * File: b4noi.c of BSIM4.6.2.
@ -222,10 +222,10 @@ int i;
} }
if ((*(ckt->CKTstates[0] + here->BSIM4vds)) >= 0.0) if ((*(ckt->CKTstates[0] + here->BSIM4vds)) >= 0.0)
gspr = gspr / (1.0 + npart_theta * npart_theta * gspr gspr = gspr * (1.0 + npart_theta * npart_theta * gspr
/ here->BSIM4IdovVds); /* bugfix */ / here->BSIM4IdovVds); /* bugfix */
else else
gdpr = gdpr / (1.0 + npart_theta * npart_theta * gdpr gdpr = gdpr * (1.0 + npart_theta * npart_theta * gdpr
/ here->BSIM4IdovVds); / here->BSIM4IdovVds);
} }

View File

@ -1,5 +1,5 @@
/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/
/**** BSIM4.6.4 Update ngspice 08/22/2009 ****/
/********** /**********
* Copyright 2006 Regents of the University of California. All rights reserved. * Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4set.c of BSIM4.6.2. * File: b4set.c of BSIM4.6.2.
@ -175,13 +175,13 @@ JOB *job;
if (!model->BSIM4tempModGiven) if (!model->BSIM4tempModGiven)
model->BSIM4tempMod = 0; model->BSIM4tempMod = 0;
else if ((model->BSIM4tempMod != 0) && (model->BSIM4tempMod != 1) else if ((model->BSIM4tempMod != 0) && (model->BSIM4tempMod != 1)
&& (model->BSIM4tempMod != 2)) && (model->BSIM4tempMod != 2) && (model->BSIM4tempMod != 3))
{ model->BSIM4tempMod = 0; { model->BSIM4tempMod = 0;
printf("Warning: tempMod has been set to its default value: 0.\n"); printf("Warning: tempMod has been set to its default value: 0.\n");
} }
if (!model->BSIM4versionGiven) if (!model->BSIM4versionGiven)
model->BSIM4version = "4.6.3"; model->BSIM4version = "4.6.4";
if (!model->BSIM4toxrefGiven) if (!model->BSIM4toxrefGiven)
model->BSIM4toxref = 30.0e-10; model->BSIM4toxref = 30.0e-10;
if (!model->BSIM4eotGiven) if (!model->BSIM4eotGiven)

View File

@ -1,5 +1,5 @@
/**** BSIM4.6.3 Released by Wenwei Yang 07/31/2008 ****/ /**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/
/**** BSIM4.6.4 Update ngspice 08/22/2009 ****/
/********** /**********
* Copyright 2006 Regents of the University of California. All rights reserved. * Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4temp.c of BSIM4.6.3. * File: b4temp.c of BSIM4.6.3.
@ -76,18 +76,18 @@ BSIM4model *model = (BSIM4model*) inModel;
BSIM4instance *here; BSIM4instance *here;
struct bsim4SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL; struct bsim4SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL;
double tmp, tmp1, tmp2, tmp3, Eg, Eg0, ni, epssub; double tmp, tmp1, tmp2, tmp3, Eg, Eg0, ni, epssub;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T11, Lnew=0.0, Wnew; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Lnew=0.0, Wnew;
double delTemp, Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; double delTemp, Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom;
double dumPs, dumPd, dumAs, dumAd, PowWeffWr; double dumPs, dumPd, dumAs, dumAd, PowWeffWr;
double DMCGeff, DMCIeff, DMDGeff; double DMCGeff, DMCIeff, DMDGeff;
double Nvtms, Nvtmd, SourceSatCurrent, DrainSatCurrent; double Nvtms, Nvtmd, SourceSatCurrent, DrainSatCurrent;
double T10; double T10, T11;
double Inv_saref, Inv_sbref, Inv_sa, Inv_sb, rho, Ldrn, dvth0_lod; double Inv_saref, Inv_sbref, Inv_sa, Inv_sb, rho, Ldrn, dvth0_lod;
double W_tmp, Inv_ODeff, OD_offset, dk2_lod, deta0_lod; double W_tmp, Inv_ODeff, OD_offset, dk2_lod, deta0_lod;
double lnl, lnw, lnnf, rbpbx, rbpby, rbsbx, rbsby, rbdbx, rbdby,bodymode; double lnl, lnw, lnnf, rbpbx, rbpby, rbsbx, rbsby, rbdbx, rbdby,bodymode;
double kvsat, wlod, sceff, Wdrn; double kvsat, wlod, sceff, Wdrn;
double V0, lt1, ltw, Theta0, Delt_vth, Vth_NarrowW, Lpe_Vb, Vth; double V0, lt1, ltw, Theta0, Delt_vth, Vth_NarrowW, Lpe_Vb, Vth;
double n, n0, Vtm=0.0, Vgsteff, Vgs_eff, niter, toxpf, toxpi, Tcen, toxe, epsrox, vddeot; double n, n0, Vgsteff, Vgs_eff, niter, toxpf, toxpi, Tcen, toxe, epsrox, vddeot;
double vtfbphi2eot, phieot, TempRatioeot, Vtm0eot, Vtmeot,vbieot; double vtfbphi2eot, phieot, TempRatioeot, Vtm0eot, Vtmeot,vbieot;
int Size_Not_Found, i; int Size_Not_Found, i;
@ -722,16 +722,6 @@ int Size_Not_Found, i;
+ model->BSIM4luc1 * Inv_L + model->BSIM4luc1 * Inv_L
+ model->BSIM4wuc1 * Inv_W + model->BSIM4wuc1 * Inv_W
+ model->BSIM4puc1 * Inv_LW; + model->BSIM4puc1 * Inv_LW;
/*high k mobility*/
pParam->BSIM4ucs = model->BSIM4ucs
+ model->BSIM4lucs * Inv_L
+ model->BSIM4wucs * Inv_W
+ model->BSIM4pucs * Inv_LW;
pParam->BSIM4ud = model->BSIM4ud pParam->BSIM4ud = model->BSIM4ud
+ model->BSIM4lud * Inv_L + model->BSIM4lud * Inv_L
+ model->BSIM4wud * Inv_W + model->BSIM4wud * Inv_W
@ -1160,13 +1150,6 @@ int Size_Not_Found, i;
/* Internal Rds(V) in IV */ /* Internal Rds(V) in IV */
pParam->BSIM4rds0 = pParam->BSIM4rdsw * T10 * here->BSIM4nf / PowWeffWr; pParam->BSIM4rds0 = pParam->BSIM4rdsw * T10 * here->BSIM4nf / PowWeffWr;
pParam->BSIM4rdswmin = model->BSIM4rdswmin * T10 * here->BSIM4nf / PowWeffWr; pParam->BSIM4rdswmin = model->BSIM4rdswmin * T10 * here->BSIM4nf / PowWeffWr;
}
/*high k mobility*/
if (model->BSIM4mobMod == 3)
{
pParam->BSIM4ua = pParam->BSIM4ua * pow(TRatio, pParam->BSIM4ua1) ;
pParam->BSIM4uc = pParam->BSIM4uc * pow(TRatio, pParam->BSIM4uc1) ;
pParam->BSIM4ud = pParam->BSIM4ud * pow(TRatio, pParam->BSIM4ud1) ;
} }
if (T1 < 0.0) if (T1 < 0.0)
{ T1 = 0.0; { T1 = 0.0;
@ -1240,7 +1223,7 @@ int Size_Not_Found, i;
pParam->BSIM4sqrtXdep0 = sqrt(pParam->BSIM4Xdep0); pParam->BSIM4sqrtXdep0 = sqrt(pParam->BSIM4Xdep0);
if(model->BSIM4mtrlMod == 0) if(model->BSIM4mtrlMod == 0)
pParam->BSIM4litl = sqrt(3.0 * 3.9/epsrox * pParam->BSIM4xj * toxe); pParam->BSIM4litl = sqrt(3.0 * 3.9 / epsrox * pParam->BSIM4xj * toxe);
else else
pParam->BSIM4litl = sqrt(model->BSIM4epsrsub/epsrox * pParam->BSIM4xj * toxe); pParam->BSIM4litl = sqrt(model->BSIM4epsrsub/epsrox * pParam->BSIM4xj * toxe);
@ -2041,7 +2024,7 @@ int Size_Not_Found, i;
n0 = (1.0 + 3.0 * tmp3) * T0; n0 = (1.0 + 3.0 * tmp3) * T0;
} }
T0 = n0 * Vtm; T0 = n0 * model->BSIM4vtm;
T1 = pParam->BSIM4voffcbn; T1 = pParam->BSIM4voffcbn;
T2 = T1/T0; T2 = T1/T0;
if (T2 < -EXP_THRESHOLD) if (T2 < -EXP_THRESHOLD)
@ -2186,7 +2169,7 @@ int Size_Not_Found, i;
{ IFuid namarray[2]; { IFuid namarray[2];
namarray[0] = model->BSIM4modName; namarray[0] = model->BSIM4modName;
namarray[1] = here->BSIM4name; namarray[1] = here->BSIM4name;
(*(SPfrontEnd->IFerror)) (ERR_FATAL, "Fatal error(s) detected during BSIM4.6.3 parameter checking for %s in model %s", namarray); (*(SPfrontEnd->IFerror)) (ERR_FATAL, "Fatal error(s) detected during BSIM4.6.4 parameter checking for %s in model %s", namarray);
return(E_BADPARM); return(E_BADPARM);
} }
} /* End instance */ } /* End instance */