devices/bsim4, update to version 4.8

This commit is contained in:
dwarning 2014-05-19 23:23:55 +02:00 committed by rlar
parent 010174ec2a
commit a646a5f78f
24 changed files with 432 additions and 186 deletions

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4.c of BSIM4.7.0.
* File: b4.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu
@ -19,6 +19,8 @@
* Modified by Mohan Dunga, Wenwei Yang, 05/18/2007.
* Modified by Wenwei Yang, 07/31/2008.
* Modified by Tanvir Morshed, Darsen Lu 03/27/2011
* Modified by Pankaj Kumar Thakur, 07/23/2012
* Modified by Navid Paydavosi, 08/21/2013
**********/
#include "ngspice/ngspice.h"

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4acld.c of BSIM4.7.0.
* File: b4acld.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4ask.c of BSIM4.7.0.
* File: b4ask.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4check.c of BSIM4.7.0.
* File: b4check.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu
@ -18,6 +18,8 @@
* Modified by Mohan Dunga, Wenwei Yang, 05/18/2007.
* Modified by Wenwei Yang, 07/31/2008 .
* Modified by Tanvir Morshed, Darsen Lu 03/27/2011
* Modified by Pankaj Kumar Thakur, 07/23/2012
* Modified by Navid Paydavosi, 08/21/2013
**********/
#include "ngspice/ngspice.h"
@ -46,9 +48,9 @@ FILE *fplog;
fprintf(fplog, "\n");
fprintf(fplog, "++++++++++ BSIM4 PARAMETER CHECKING BELOW ++++++++++\n");
if ((strcmp(model->BSIM4version, "4.7.0")) && (strcmp(model->BSIM4version, "4.70")) && (strcmp(model->BSIM4version, "4.7")))
{ fprintf(fplog, "Warning: This model is BSIM4.7.0; you specified a wrong version number.\n");
printf("Warning: This model is BSIM4.7.0; you specified a wrong version number.\n");
if ((strcmp(model->BSIM4version, "4.8.0")) && (strcmp(model->BSIM4version, "4.80")) && (strcmp(model->BSIM4version, "4.8")))
{ fprintf(fplog, "Warning: This model is BSIM4.8.0; you specified a wrong version number.\n");
printf("Warning: This model is BSIM4.8.0; you specified a wrong version number.\n");
}
fprintf(fplog, "Model = %s\n", model->BSIM4modName);
@ -66,10 +68,10 @@ FILE *fplog;
printf("Fatal: Toxe = %g is not positive.\n", model->BSIM4toxe);
Fatal_Flag = 1;
}
if (model->BSIM4toxp <= 0.0)
if (here->BSIM4toxp <= 0.0)
{ fprintf(fplog, "Fatal: Toxp = %g is not positive.\n",
model->BSIM4toxp);
printf("Fatal: Toxp = %g is not positive.\n", model->BSIM4toxp);
here->BSIM4toxp);
printf("Fatal: Toxp = %g is not positive.\n", here->BSIM4toxp);
Fatal_Flag = 1;
}
if (model->BSIM4eot <= 0.0)
@ -453,10 +455,10 @@ FILE *fplog;
model->BSIM4toxe);
printf("Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4toxe);
}
if (model->BSIM4toxp < 1.0e-10)
if (here->BSIM4toxp < 1.0e-10)
{ fprintf(fplog, "Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n",
model->BSIM4toxp);
printf("Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", model->BSIM4toxp);
here->BSIM4toxp);
printf("Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", here->BSIM4toxp);
}
if (model->BSIM4toxm < 1.0e-10)
{ fprintf(fplog, "Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n",
@ -669,6 +671,56 @@ FILE *fplog;
printf("Warning: xrcrg1 should be positive for rgateMod = 3.\n");
}
/* Check body resistance parameters */
if (model->BSIM4rbps0 <= 0.0)
{ fprintf(fplog, "Fatal: RBPS0 = %g is not positive.\n",
model->BSIM4rbps0 );
printf("Fatal: RBPS0 = %g is not positive.\n", model->BSIM4rbps0);
Fatal_Flag = 1;
}
if (model->BSIM4rbpd0 <= 0.0)
{ fprintf(fplog, "Fatal: RBPD0 = %g is not positive.\n",
model->BSIM4rbpd0 );
printf("Fatal: RBPD0 = %g is not positive.\n", model->BSIM4rbpd0);
Fatal_Flag = 1;
}
if (model->BSIM4rbpbx0 <= 0.0)
{ fprintf(fplog, "Fatal: RBPBX0 = %g is not positive.\n",
model->BSIM4rbpbx0);
printf("Fatal: RBPBX0 = %g is not positive.\n", model->BSIM4rbpbx0);
Fatal_Flag = 1;
}
if (model->BSIM4rbpby0 <= 0.0)
{ fprintf(fplog, "Fatal: RBPBY0 = %g is not positive.\n",
model->BSIM4rbpby0);
printf("Fatal: RBPBY0 = %g is not positive.\n", model->BSIM4rbpby0);
Fatal_Flag = 1;
}
if (model->BSIM4rbdbx0 <= 0.0)
{ fprintf(fplog, "Fatal: RBDBX0 = %g is not positive.\n",
model->BSIM4rbdbx0);
printf("Fatal: RBDBX0 = %g is not positive.\n", model->BSIM4rbdbx0);
Fatal_Flag = 1;
}
if (model->BSIM4rbdby0 <= 0.0)
{ fprintf(fplog, "Fatal: RBDBY0 = %g is not positive.\n",
model->BSIM4rbdby0);
printf("Fatal: RBDBY0 = %g is not positive.\n", model->BSIM4rbdby0);
Fatal_Flag = 1;
}
if (model->BSIM4rbsbx0 <= 0.0)
{ fprintf(fplog, "Fatal: RBSBX0 = %g is not positive.\n",
model->BSIM4rbsbx0);
printf("Fatal: RBSBX0 = %g is not positive.\n", model->BSIM4rbsbx0);
Fatal_Flag = 1;
}
if (model->BSIM4rbsby0 <= 0.0)
{ fprintf(fplog, "Fatal: RBSBY0 = %g is not positive.\n",
model->BSIM4rbsby0);
printf("Fatal: RBSBY0 = %g is not positive.\n", model->BSIM4rbsby0);
Fatal_Flag = 1;
}
/* Check capacitance parameters */
if (pParam->BSIM4noff < 0.1)
{ fprintf(fplog, "Warning: Noff = %g is too small.\n",

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4cvtest.c of BSIM4.7.0.
* File: b4cvtest.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4del.c of BSIM4.7.0.
* File: b4del.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4dest.c of BSIM4.7.0.
* File: b4dest.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4geo.c of BSIM4.7.0.
* File: b4geo.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu

View File

@ -1,4 +1,4 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**** OpenMP support ngspice 06/28/2010 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4ld.c of BSIM4.7.0.
* File: b4ld.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu
@ -19,6 +19,8 @@
* Modified by Mohan Dunga, Wenwei Yang, 05/18/2007.
* Modified by Wenwei Yang, 07/31/2008.
* Modified by Tanvir Morshed, Darsen Lu 03/27/2011
* Modified by Pankaj Kumar Thakur, 07/23/2012
* Modified by Navid Paydavosi, 08/21/2013
**********/
@ -1476,7 +1478,6 @@ for (; model != NULL; model = model->BSIM4nextModel)
T1 = exp(pParam->BSIM4eu * log(T0));
dT1_dVg = T1 * pParam->BSIM4eu / T0 / toxe;
T2 = pParam->BSIM4ua + pParam->BSIM4uc * Vbseff;
T3 = T0 / toxe; /*Do we need it?*/
T12 = sqrt(Vth * Vth + 0.0001);
T9 = 1.0/(Vgsteff + 2*T12);
@ -1491,6 +1492,60 @@ for (; model != NULL; model = model->BSIM4nextModel)
dDenomi_dVd = T13 * dVth_dVd;
dDenomi_dVb = T13 * dVth_dVb + T1 * pParam->BSIM4uc;
}
else if (model->BSIM4mobMod == 4) /* Synopsys 08/30/2013 add */
{
T0 = Vgsteff + here->BSIM4vtfbphi1 - T14;
T2 = pParam->BSIM4ua + pParam->BSIM4uc * Vbseff;
T3 = T0 / toxe;
T12 = sqrt(here->BSIM4vtfbphi1*here->BSIM4vtfbphi1 + 0.0001);
T9 = 1.0/(Vgsteff + 2*T12);
T10 = T9*toxe;
T8 = pParam->BSIM4ud * T10 * T10 * here->BSIM4vtfbphi1;
T6 = T8 * here->BSIM4vtfbphi1;
T5 = T3 * (T2 + pParam->BSIM4ub * T3) + T6;
T7 = - 2.0 * T6 * T9;
dDenomi_dVg = (T2 + 2.0 * pParam->BSIM4ub * T3) / toxe;
dDenomi_dVd = 0.0;
dDenomi_dVb = pParam->BSIM4uc * T3;
dDenomi_dVg+= T7;
}
else if (model->BSIM4mobMod == 5) /* Synopsys 08/30/2013 add */
{
T0 = Vgsteff + here->BSIM4vtfbphi1 - T14;
T2 = 1.0 + pParam->BSIM4uc * Vbseff;
T3 = T0 / toxe;
T4 = T3 * (pParam->BSIM4ua + pParam->BSIM4ub * T3);
T12 = sqrt(here->BSIM4vtfbphi1 * here->BSIM4vtfbphi1 + 0.0001);
T9 = 1.0/(Vgsteff + 2*T12);
T10 = T9*toxe;
T8 = pParam->BSIM4ud * T10 * T10 * here->BSIM4vtfbphi1;
T6 = T8 * here->BSIM4vtfbphi1;
T5 = T4 * T2 + T6;
T7 = - 2.0 * T6 * T9;
dDenomi_dVg = (pParam->BSIM4ua + 2.0 * pParam->BSIM4ub * T3) * T2
/ toxe;
dDenomi_dVd = 0.0;
dDenomi_dVb = pParam->BSIM4uc * T4;
dDenomi_dVg+= T7;
}
else if (model->BSIM4mobMod == 6) /* Synopsys 08/30/2013 modify */
{ T0 = (Vgsteff + here->BSIM4vtfbphi1) / toxe;
T1 = exp(pParam->BSIM4eu * log(T0));
dT1_dVg = T1 * pParam->BSIM4eu / T0 / toxe;
T2 = pParam->BSIM4ua + pParam->BSIM4uc * Vbseff;
T12 = sqrt(here->BSIM4vtfbphi1 * here->BSIM4vtfbphi1 + 0.0001);
T9 = 1.0/(Vgsteff + 2*T12);
T10 = T9*toxe;
T8 = pParam->BSIM4ud * T10 * T10 * here->BSIM4vtfbphi1;
T6 = T8 * here->BSIM4vtfbphi1;
T5 = T1 * T2 + T6;
T7 = - 2.0 * T6 * T9;
dDenomi_dVg = T2 * dT1_dVg + T7;
dDenomi_dVd = 0;
dDenomi_dVb = T1 * pParam->BSIM4uc;
}
/*high K mobility*/
else
{
@ -1752,7 +1807,7 @@ for (; model != NULL; model = model->BSIM4nextModel)
/* Calculate Idl first */
tmp1 = here->BSIM4vtfbphi2;
tmp2 = 2.0e8 * model->BSIM4toxp;
tmp2 = 2.0e8 * here->BSIM4toxp;
dT0_dVg = 1.0 / tmp2;
T0 = (Vgsteff + tmp1) * dT0_dVg;
@ -1762,8 +1817,8 @@ for (; model != NULL; model = model->BSIM4nextModel)
Tcen = model->BSIM4ados * 1.9e-9 / T1;
dTcen_dVg = -Tcen * T2 * dT0_dVg / T1;
Coxeff = epssub * model->BSIM4coxp
/ (epssub + model->BSIM4coxp * Tcen);
Coxeff = epssub * here->BSIM4coxp
/ (epssub + here->BSIM4coxp * Tcen);
here->BSIM4Coxeff = Coxeff;
dCoxeff_dVg = -Coxeff * Coxeff * dTcen_dVg / epssub;
@ -2528,8 +2583,8 @@ for (; model != NULL; model = model->BSIM4nextModel)
dVaux_dVd = 0.0;
dVaux_dVb = 0.0;
} else if (model->BSIM4igcMod == 2) {
dVaux_dVd = -dVgs_eff_dVg * dVth_dVd;
dVaux_dVb = -dVgs_eff_dVg * dVth_dVb;
dVaux_dVd = -dVaux_dVg* dVth_dVd; /* Synopsys 08/30/2013 modify */
dVaux_dVb = -dVaux_dVg* dVth_dVb; /* Synopsys 08/30/2013 modify */
}
dVaux_dVg *= dVgs_eff_dVg;
}
@ -2590,7 +2645,7 @@ for (; model != NULL; model = model->BSIM4nextModel)
dT7_dVd = -Vdseff * dPigcd_dVd - Pigcd * dVdseff_dVd + dT7_dVg * dVgsteff_dVd;
dT7_dVb = -Vdseff * dPigcd_dVb - Pigcd * dVdseff_dVb + dT7_dVg * dVgsteff_dVb;
dT7_dVg *= dVgsteff_dVg;
dT7_dVb *= dVbseff_dVb;
/*dT7_dVb *= dVbseff_dVb;*/ /* Synopsys, 2013/08/30 */
T8 = T7 * T7 + 2.0e-4;
dT8_dVg = 2.0 * T7;
dT8_dVd = dT8_dVg * dT7_dVd;
@ -3563,8 +3618,8 @@ for (; model != NULL; model = model->BSIM4nextModel)
dVfbeff_dVg = T1 * dVgs_eff_dVg;
dVfbeff_dVb = -T1 * dVbseffCV_dVb;
Cox = model->BSIM4coxp;
Tox = 1.0e8 * model->BSIM4toxp;
Cox = here->BSIM4coxp;
Tox = 1.0e8 * here->BSIM4toxp;
T0 = (Vgs_eff - VbseffCV - here->BSIM4vfbzb) / Tox;
dT0_dVg = dVgs_eff_dVg / Tox;
dT0_dVb = -dVbseffCV_dVb / Tox;
@ -3585,7 +3640,7 @@ for (; model != NULL; model = model->BSIM4nextModel)
dTcen_dVg = dTcen_dVb = 0.0;
}
LINK = 1.0e-3 * model->BSIM4toxp;
LINK = 1.0e-3 * here->BSIM4toxp;
V3 = pParam->BSIM4ldeb - Tcen - LINK;
V4 = sqrt(V3 * V3 + 4.0 * LINK * pParam->BSIM4ldeb);
Tcen = pParam->BSIM4ldeb - 0.5 * (V3 + V4);

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4mask.c of BSIM4.7.0.
* File: b4mask.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4mdel.c of BSIM4.7.0.
* File: b4mdel.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4mpar.c of BSIM4.7.0.
* File: b4mpar.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu
@ -19,6 +19,8 @@
* Modified by Mohan Dunga, Wenwei Yang, 05/18/2007.
* Modified by Wenwei Yang, 07/31/2008.
* Modified by Tanvir Morshed, Darsen Lu 03/27/2011
* Modified by Pankaj Kumar Thakur, 07/23/2012
* Modified by Navid Paydavosi, 08/21/2013
**********/
#include "ngspice/ngspice.h"

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4noi.c of BSIM4.7.0.
* File: b4noi.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu
@ -17,6 +17,7 @@
* Modified by Mohan Dunga, 12/13/2006
* Modified by Wenwei Yang, 07/31/2008.
* Modified by Tanvir Morshed, Darsen Lu 03/27/2011
* Modified by Pankaj Kumar Thakur, 07/23/2012
**********/
#include "ngspice/ngspice.h"
@ -392,9 +393,10 @@ double m;
Leff = pParam->BSIM4leff;
Lvsat = Leff * (1.0 + here->BSIM4Vdseff / here->BSIM4EsatL);
T6 = Leff / Lvsat;
T5 = here->BSIM4Vgsteff / here->BSIM4EsatL;
/*Unwanted code for T5 commented*/
/*T5 = here->BSIM4Vgsteff / here->BSIM4EsatL;
T5 = T5 * T5;
*/
gamma = T6 * (0.5 * T1 + T0 * T0 / (6.0 * T2));
T3 = T2 * T2;
T4 = T0 * T0;

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4par.c of BSIM4.7.0.
* File: b4par.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4pzld.c of BSIM4.7.0.
* File: b4pzld.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4set.c of BSIM4.7.0.
* File: b4set.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu
@ -19,6 +19,8 @@
* Modified by Mohan Dunga, Wenwei Yang, 05/18/2007.
* Modified by Wenwei Yang, 07/31/2008.
* Modified by Tanvir Morshed, Darsen Lu 03/27/2011
* Modified by Pankaj Kumar Thakur, 07//2012
* Modified by Navid Paydavosi, 06/12/2013
**********/
#include "ngspice/ngspice.h"
@ -79,8 +81,8 @@ BSIM4instance **InstArray;
if (!model->BSIM4mobModGiven)
model->BSIM4mobMod = 0;
else if ((model->BSIM4mobMod != 0) && (model->BSIM4mobMod != 1)
&& (model->BSIM4mobMod != 2)&& (model->BSIM4mobMod != 3))
else if ((model->BSIM4mobMod != 0) && (model->BSIM4mobMod != 1)&& (model->BSIM4mobMod != 2)&& (model->BSIM4mobMod != 3)
&& (model->BSIM4mobMod != 4) && (model->BSIM4mobMod != 5) && (model->BSIM4mobMod != 6)) /* Synopsys 08/30/2013 modify */
{ model->BSIM4mobMod = 0;
printf("Warning: mobMod has been set to its default value: 0.\n");
}
@ -208,7 +210,7 @@ BSIM4instance **InstArray;
}
if (!model->BSIM4versionGiven)
model->BSIM4version = copy("4.7.0");
model->BSIM4version = copy("4.8.0");
if (!model->BSIM4toxrefGiven)
model->BSIM4toxref = 30.0e-10;
if (!model->BSIM4eotGiven)
@ -408,7 +410,6 @@ BSIM4instance **InstArray;
model->BSIM4prwg = 1.0; /* in 1/V */
if (!model->BSIM4prwbGiven)
model->BSIM4prwb = 0.0;
if (!model->BSIM4prtGiven)
if (!model->BSIM4prtGiven)
model->BSIM4prt = 0.0;
if (!model->BSIM4eta0Given)
@ -460,35 +461,57 @@ BSIM4instance **InstArray;
if (!model->BSIM4kgidlGiven) /* v4.7 New GIDL/GISL */
model->BSIM4kgidl = 0.0;
if (!model->BSIM4fgidlGiven) /* v4.7 New GIDL/GISL */
model->BSIM4fgidl = 0.0;
if (!model->BSIM4agislGiven)
/*model->BSIM4fgidl = 0.0;*/
/* Default value of fgdil set to 1 in BSIM4.8.0*/
model->BSIM4fgidl = 1.0;
/*if (!model->BSIM4agislGiven)
{
if (model->BSIM4agidlGiven)
model->BSIM4agisl = model->BSIM4agidl;
else
model->BSIM4agisl = 0.0;
}
if (!model->BSIM4bgislGiven)
}*/
/*Default value of agidl being 0, agisl set as follows */
/*if (!model->BSIM4bgislGiven)
{
if (model->BSIM4bgidlGiven)
model->BSIM4bgisl = model->BSIM4bgidl;
else
model->BSIM4bgisl = 2.3e9; /* V/m */
}
if (!model->BSIM4cgislGiven)
model->BSIM4bgisl = 2.3e9;
}*/
/*Default value of bgidl being 2.3e9, bgisl set as follows */
/*if (!model->BSIM4cgislGiven)
{
if (model->BSIM4cgidlGiven)
model->BSIM4cgisl = model->BSIM4cgidl;
else
model->BSIM4cgisl = 0.5; /* V^3 */
}
if (!model->BSIM4egislGiven)
model->BSIM4cgisl = 0.5;
}*/
/*Default value of cgidl being 0.5, cgisl set as follows */
/*if (!model->BSIM4egislGiven)
{
if (model->BSIM4egidlGiven)
model->BSIM4egisl = model->BSIM4egidl;
else
model->BSIM4egisl = 0.8; /* V */
}
model->BSIM4egisl = 0.8;
}*/
/*Default value of agisl, bgisl, cgisl, egisl, rgisl, kgisl, and fgisl are set as follows */
if (!model->BSIM4agislGiven)
model->BSIM4agisl = model->BSIM4agidl;
if (!model->BSIM4bgislGiven)
model->BSIM4bgisl = model->BSIM4bgidl;
if (!model->BSIM4cgislGiven)
model->BSIM4cgisl = model->BSIM4cgidl;
if (!model->BSIM4egislGiven)
model->BSIM4egisl = model->BSIM4egidl;
if (!model->BSIM4rgislGiven) /* v4.7 New GIDL/GISL */
model->BSIM4rgisl = model->BSIM4rgidl;
if (!model->BSIM4kgislGiven) /* v4.7 New GIDL/GISL */
@ -786,12 +809,16 @@ BSIM4instance **InstArray;
model->BSIM4lvbm = 0.0;
if (!model->BSIM4lxtGiven)
model->BSIM4lxt = 0.0;
if (!model->BSIM4lk1Given)
model->BSIM4lk1 = 0.0;
if (!model->BSIM4lkt1Given)
model->BSIM4lkt1 = 0.0;
if (!model->BSIM4lkt1lGiven)
model->BSIM4lkt1l = 0.0;
if (!model->BSIM4lkt2Given)
model->BSIM4lkt2 = 0.0;
if (!model->BSIM4lk2Given)
model->BSIM4lk2 = 0.0;
if (!model->BSIM4lk3Given)
model->BSIM4lk3 = 0.0;
if (!model->BSIM4lk3bGiven)
@ -932,8 +959,7 @@ BSIM4instance **InstArray;
model->BSIM4lkgidl = 0.0;
if (!model->BSIM4lfgidlGiven) /* v4.7 New GIDL/GISL */
model->BSIM4lfgidl = 0.0;
if (!model->BSIM4lagislGiven)
/*if (!model->BSIM4lagislGiven)
{
if (model->BSIM4lagidlGiven)
model->BSIM4lagisl = model->BSIM4lagidl;
@ -960,22 +986,39 @@ BSIM4instance **InstArray;
model->BSIM4legisl = model->BSIM4legidl;
else
model->BSIM4legisl = 0.0;
}
if (!model->BSIM4lrgislGiven) /* v4.7 New GIDL/GISL */
}*/
/*if (!model->BSIM4lrgislGiven)
{
if (model->BSIM4lrgidlGiven)
model->BSIM4lrgisl = model->BSIM4lrgidl;
}
if (!model->BSIM4lkgislGiven) /* v4.7 New GIDL/GISL */
if (!model->BSIM4lkgislGiven)
{
if (model->BSIM4lkgidlGiven)
model->BSIM4lkgisl = model->BSIM4lkgidl;
}
if (!model->BSIM4lfgislGiven) /* v4.7 New GIDL/GISL */
if (!model->BSIM4lfgislGiven)
{
if (model->BSIM4lfgidlGiven)
model->BSIM4lfgisl = model->BSIM4lfgidl;
}
}*/
/*Default value of lagisl, lbgisl, lcgisl, legisl, lrgisl, lkgisl, and lfgisl are set as follows */
if (!model->BSIM4lagislGiven)
model->BSIM4lagisl = model->BSIM4lagidl;
if (!model->BSIM4lbgislGiven)
model->BSIM4lbgisl = model->BSIM4lbgidl;
if (!model->BSIM4lcgislGiven)
model->BSIM4lcgisl = model->BSIM4lcgidl;
if (!model->BSIM4legislGiven)
model->BSIM4legisl = model->BSIM4legidl;
if (!model->BSIM4lrgislGiven) /* v4.7 New GIDL/GISL */
model->BSIM4lrgisl = model->BSIM4lrgidl;
if (!model->BSIM4lkgislGiven) /* v4.7 New GIDL/GISL */
model->BSIM4lkgisl = model->BSIM4lkgidl;
if (!model->BSIM4lfgislGiven) /* v4.7 New GIDL/GISL */
model->BSIM4lfgisl = model->BSIM4lfgidl;
if (!model->BSIM4laigcGiven)
model->BSIM4laigc = 0.0;
if (!model->BSIM4lbigcGiven)
@ -1143,12 +1186,16 @@ BSIM4instance **InstArray;
model->BSIM4wvbm = 0.0;
if (!model->BSIM4wxtGiven)
model->BSIM4wxt = 0.0;
if (!model->BSIM4wk1Given)
model->BSIM4wk1 = 0.0;
if (!model->BSIM4wkt1Given)
model->BSIM4wkt1 = 0.0;
if (!model->BSIM4wkt1lGiven)
model->BSIM4wkt1l = 0.0;
if (!model->BSIM4wkt2Given)
model->BSIM4wkt2 = 0.0;
if (!model->BSIM4wk2Given)
model->BSIM4wk2 = 0.0;
if (!model->BSIM4wk3Given)
model->BSIM4wk3 = 0.0;
if (!model->BSIM4wk3bGiven)
@ -1290,7 +1337,7 @@ BSIM4instance **InstArray;
if (!model->BSIM4wfgidlGiven) /* v4.7 New GIDL/GISL */
model->BSIM4wfgidl = 0.0;
if (!model->BSIM4wagislGiven)
/*if (!model->BSIM4wagislGiven)
{
if (model->BSIM4wagidlGiven)
model->BSIM4wagisl = model->BSIM4wagidl;
@ -1317,22 +1364,39 @@ BSIM4instance **InstArray;
model->BSIM4wegisl = model->BSIM4wegidl;
else
model->BSIM4wegisl = 0.0;
}
if (!model->BSIM4wrgislGiven) /* v4.7 New GIDL/GISL */
}*/
/*if (!model->BSIM4wrgislGiven)
{
if (model->BSIM4wrgidlGiven)
model->BSIM4wrgisl = model->BSIM4wrgidl;
}
if (!model->BSIM4wkgislGiven) /* v4.7 New GIDL/GISL */
if (!model->BSIM4wkgislGiven)
{
if (model->BSIM4wkgidlGiven)
model->BSIM4wkgisl = model->BSIM4wkgidl;
}
if (!model->BSIM4wfgislGiven) /* v4.7 New GIDL/GISL */
if (!model->BSIM4wfgislGiven)
{
if (model->BSIM4wfgidlGiven)
model->BSIM4wfgisl = model->BSIM4wfgidl;
}
}*/
/*Default value of wagisl, wbgisl, wcgisl, wegisl, wrgisl, wkgisl, and wfgisl are set as follows */
if (!model->BSIM4wagislGiven)
model->BSIM4wagisl = model->BSIM4wagidl;
if (!model->BSIM4wbgislGiven)
model->BSIM4wbgisl = model->BSIM4wbgidl;
if (!model->BSIM4wcgislGiven)
model->BSIM4wcgisl = model->BSIM4wcgidl;
if (!model->BSIM4wegislGiven)
model->BSIM4wegisl = model->BSIM4wegidl;
if (!model->BSIM4wrgislGiven) /* v4.7 New GIDL/GISL */
model->BSIM4wrgisl = model->BSIM4wrgidl;
if (!model->BSIM4wkgislGiven) /* v4.7 New GIDL/GISL */
model->BSIM4wkgisl = model->BSIM4wkgidl;
if (!model->BSIM4wfgislGiven) /* v4.7 New GIDL/GISL */
model->BSIM4wfgisl = model->BSIM4wfgidl;
if (!model->BSIM4waigcGiven)
model->BSIM4waigc = 0.0;
if (!model->BSIM4wbigcGiven)
@ -1500,10 +1564,14 @@ BSIM4instance **InstArray;
model->BSIM4pvbm = 0.0;
if (!model->BSIM4pxtGiven)
model->BSIM4pxt = 0.0;
if (!model->BSIM4pk1Given)
model->BSIM4pk1 = 0.0;
if (!model->BSIM4pkt1Given)
model->BSIM4pkt1 = 0.0;
if (!model->BSIM4pkt1lGiven)
model->BSIM4pkt1l = 0.0;
if (!model->BSIM4pk2Given)
model->BSIM4pk2 = 0.0;
if (!model->BSIM4pkt2Given)
model->BSIM4pkt2 = 0.0;
if (!model->BSIM4pk3Given)
@ -1647,7 +1715,7 @@ BSIM4instance **InstArray;
if (!model->BSIM4pfgidlGiven) /* v4.7 New GIDL/GISL */
model->BSIM4pfgidl = 0.0;
if (!model->BSIM4pagislGiven)
/*if (!model->BSIM4pagislGiven)
{
if (model->BSIM4pagidlGiven)
model->BSIM4pagisl = model->BSIM4pagidl;
@ -1674,22 +1742,39 @@ BSIM4instance **InstArray;
model->BSIM4pegisl = model->BSIM4pegidl;
else
model->BSIM4pegisl = 0.0;
}
if (!model->BSIM4prgislGiven) /* v4.7 New GIDL/GISL */
}*/
/*if (!model->BSIM4prgislGiven)
{
if (model->BSIM4prgidlGiven)
model->BSIM4prgisl = model->BSIM4prgidl;
}
if (!model->BSIM4pkgislGiven) /* v4.7 New GIDL/GISL */
if (!model->BSIM4pkgislGiven)
{
if (model->BSIM4pkgidlGiven)
model->BSIM4pkgisl = model->BSIM4pkgidl;
}
if (!model->BSIM4pfgislGiven) /* v4.7 New GIDL/GISL */
if (!model->BSIM4pfgislGiven)
{
if (model->BSIM4pfgidlGiven)
model->BSIM4pfgisl = model->BSIM4pfgidl;
}
}*/
/*Default value of pagisl, pbgisl, pcgisl, pegisl, prgisl, pkgisl, and pfgisl are set as follows */
if (!model->BSIM4pagislGiven)
model->BSIM4pagisl = model->BSIM4pagidl;
if (!model->BSIM4pbgislGiven)
model->BSIM4pbgisl = model->BSIM4pbgidl;
if (!model->BSIM4pcgislGiven)
model->BSIM4pcgisl = model->BSIM4pcgidl;
if (!model->BSIM4pegislGiven)
model->BSIM4pegisl = model->BSIM4pegidl;
if (!model->BSIM4prgislGiven) /* v4.7 New GIDL/GISL */
model->BSIM4prgisl = model->BSIM4prgidl;
if (!model->BSIM4pkgislGiven) /* v4.7 New GIDL/GISL */
model->BSIM4pkgisl = model->BSIM4pkgidl;
if (!model->BSIM4pfgislGiven) /* v4.7 New GIDL/GISL */
model->BSIM4pfgisl = model->BSIM4pfgidl;
if (!model->BSIM4paigcGiven)
model->BSIM4paigc = 0.0;
if (!model->BSIM4pbigcGiven)
@ -2521,7 +2606,6 @@ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NUL
TSTALLOC(BSIM4GEdpPtr, BSIM4gNodeExt, BSIM4dNodePrime);
TSTALLOC(BSIM4GEspPtr, BSIM4gNodeExt, BSIM4sNodePrime);
TSTALLOC(BSIM4GEbpPtr, BSIM4gNodeExt, BSIM4bNodePrime);
TSTALLOC(BSIM4GMdpPtr, BSIM4gNodeMid, BSIM4dNodePrime);
TSTALLOC(BSIM4GMgpPtr, BSIM4gNodeMid, BSIM4gNodePrime);
TSTALLOC(BSIM4GMgmPtr, BSIM4gNodeMid, BSIM4gNodeMid);

View File

@ -1,4 +1,4 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
@ -19,6 +19,7 @@
* Modified by Mohan Dunga, Wenwei Yang, 05/18/2007.
* Modified by Wenwei Yang, 07/31/2008.
* Modified by Tanvir Morshed, Darsen Lu 03/27/2011
* Modified by Pankaj Kumar Thakur, 07/23/2012
**********/
@ -851,6 +852,10 @@ int Size_Not_Found, i;
+ model->BSIM4lteta0 * Inv_L
+ model->BSIM4wteta0 * Inv_W
+ model->BSIM4pteta0 * Inv_LW;
pParam->BSIM4tvoffcv = model->BSIM4tvoffcv /* v4.8.0 */
+ model->BSIM4ltvoffcv * Inv_L
+ model->BSIM4wtvoffcv * Inv_W
+ model->BSIM4ptvoffcv * Inv_LW;
pParam->BSIM4etab = model->BSIM4etab
+ model->BSIM4letab * Inv_L
+ model->BSIM4wetab * Inv_W
@ -983,6 +988,18 @@ int Size_Not_Found, i;
+ model->BSIM4lcigc * Inv_L
+ model->BSIM4wcigc * Inv_W
+ model->BSIM4pcigc * Inv_LW;
pParam->BSIM4aigsd = model->BSIM4aigsd
+ model->BSIM4laigsd * Inv_L
+ model->BSIM4waigsd * Inv_W
+ model->BSIM4paigsd * Inv_LW;
pParam->BSIM4bigsd = model->BSIM4bigsd
+ model->BSIM4lbigsd * Inv_L
+ model->BSIM4wbigsd * Inv_W
+ model->BSIM4pbigsd * Inv_LW;
pParam->BSIM4cigsd = model->BSIM4cigsd
+ model->BSIM4lcigsd * Inv_L
+ model->BSIM4wcigsd * Inv_W
+ model->BSIM4pcigsd * Inv_LW;
pParam->BSIM4aigs = model->BSIM4aigs
+ model->BSIM4laigs * Inv_L
+ model->BSIM4waigs * Inv_W
@ -1542,6 +1559,57 @@ int Size_Not_Found, i;
pParam->BSIM4inv_od_ref = Inv_saref + Inv_sbref;
pParam->BSIM4rho_ref = model->BSIM4ku0 / pParam->BSIM4ku0temp * pParam->BSIM4inv_od_ref;
/*high k*/
/*Calculate VgsteffVth for mobMod=3*/
if(model->BSIM4mobMod==3)
{ /*Calculate n @ Vbs=Vds=0*/
lt1 = model->BSIM4factor1* pParam->BSIM4sqrtXdep0;
T0 = pParam->BSIM4dvt1 * pParam->BSIM4leff / lt1;
if (T0 < EXP_THRESHOLD)
{
T1 = exp(T0);
T2 = T1 - 1.0;
T3 = T2 * T2;
T4 = T3 + 2.0 * T1 * MIN_EXP;
Theta0 = T1 / T4;
}
else
Theta0 = 1.0 / (MAX_EXP - 2.0);
tmp1 = epssub / pParam->BSIM4Xdep0;
tmp2 = pParam->BSIM4nfactor * tmp1;
tmp3 = (tmp2 + pParam->BSIM4cdsc * Theta0 + pParam->BSIM4cit) / model->BSIM4coxe;
if (tmp3 >= -0.5)
n0 = 1.0 + tmp3;
else
{
T0 = 1.0 / (3.0 + 8.0 * tmp3);
n0 = (1.0 + 3.0 * tmp3) * T0;
}
T0 = n0 * model->BSIM4vtm;
T1 = pParam->BSIM4voffcbn;
T2 = T1/T0;
if (T2 < -EXP_THRESHOLD)
{ T3 = model->BSIM4coxe * MIN_EXP / pParam->BSIM4cdep0;
T4 = pParam->BSIM4mstar + T3 * n0;
}
else if (T2 > EXP_THRESHOLD)
{ T3 = model->BSIM4coxe * MAX_EXP / pParam->BSIM4cdep0;
T4 = pParam->BSIM4mstar + T3 * n0;
}
else
{ T3 = exp(T2)* model->BSIM4coxe / pParam->BSIM4cdep0;
T4 = pParam->BSIM4mstar + T3 * n0;
}
pParam->BSIM4VgsteffVth = T0 * log(2.0)/T4;
}
/* New DITS term added in 4.7 */
T0 = -pParam->BSIM4dvtp3 * log(pParam->BSIM4leff);
DEXP(T0, T1);
pParam->BSIM4dvtp2factor = pParam->BSIM4dvtp5 + pParam->BSIM4dvtp2 * T1;
} /* End of SizeNotFound */
/* stress effect */
@ -1699,37 +1767,60 @@ int Size_Not_Found, i;
if(here->BSIM4rbodyMod == 2)
{
if (bodymode == 5)
{
rbsbx = exp( log(model->BSIM4rbsbx0) + model->BSIM4rbsdbxl * lnl +
model->BSIM4rbsdbxw * lnw + model->BSIM4rbsdbxnf * lnnf );
rbsby = exp( log(model->BSIM4rbsby0) + model->BSIM4rbsdbyl * lnl +
model->BSIM4rbsdbyw * lnw + model->BSIM4rbsdbynf * lnnf );
here->BSIM4rbsb = rbsbx * rbsby / (rbsbx + rbsby);
if (bodymode == 5)
{
/*rbsbx = exp( log(model->BSIM4rbsbx0) + model->BSIM4rbsdbxl * lnl +
model->BSIM4rbsdbxw * lnw + model->BSIM4rbsdbxnf * lnnf );
rbsby = exp( log(model->BSIM4rbsby0) + model->BSIM4rbsdbyl * lnl +
model->BSIM4rbsdbyw * lnw + model->BSIM4rbsdbynf * lnnf );
*/
rbsbx = model->BSIM4rbsbx0 * exp( model->BSIM4rbsdbxl * lnl +
model->BSIM4rbsdbxw * lnw + model->BSIM4rbsdbxnf * lnnf );
rbsby = model->BSIM4rbsby0 * exp( model->BSIM4rbsdbyl * lnl +
model->BSIM4rbsdbyw * lnw + model->BSIM4rbsdbynf * lnnf );
here->BSIM4rbsb = rbsbx * rbsby / (rbsbx + rbsby);
rbdbx = exp( log(model->BSIM4rbdbx0) + model->BSIM4rbsdbxl * lnl +
model->BSIM4rbsdbxw * lnw + model->BSIM4rbsdbxnf * lnnf );
rbdby = exp( log(model->BSIM4rbdby0) + model->BSIM4rbsdbyl * lnl +
model->BSIM4rbsdbyw * lnw + model->BSIM4rbsdbynf * lnnf );
here->BSIM4rbdb = rbdbx * rbdby / (rbdbx + rbdby);
}
/*rbdbx = exp( log(model->BSIM4rbdbx0) + model->BSIM4rbsdbxl * lnl +
model->BSIM4rbsdbxw * lnw + model->BSIM4rbsdbxnf * lnnf );
rbdby = exp( log(model->BSIM4rbdby0) + model->BSIM4rbsdbyl * lnl +
model->BSIM4rbsdbyw * lnw + model->BSIM4rbsdbynf * lnnf );
*/
if ((bodymode == 3)|| (bodymode == 5))
{
here->BSIM4rbps = exp( log(model->BSIM4rbps0) + model->BSIM4rbpsl * lnl +
model->BSIM4rbpsw * lnw + model->BSIM4rbpsnf * lnnf );
here->BSIM4rbpd = exp( log(model->BSIM4rbpd0) + model->BSIM4rbpdl * lnl +
model->BSIM4rbpdw * lnw + model->BSIM4rbpdnf * lnnf );
}
rbdbx = model->BSIM4rbdbx0 * exp( model->BSIM4rbsdbxl * lnl +
model->BSIM4rbsdbxw * lnw + model->BSIM4rbsdbxnf * lnnf );
rbdby = model->BSIM4rbdby0 * exp( model->BSIM4rbsdbyl * lnl +
model->BSIM4rbsdbyw * lnw + model->BSIM4rbsdbynf * lnnf );
rbpbx = exp( log(model->BSIM4rbpbx0) + model->BSIM4rbpbxl * lnl +
model->BSIM4rbpbxw * lnw + model->BSIM4rbpbxnf * lnnf );
rbpby = exp( log(model->BSIM4rbpby0) + model->BSIM4rbpbyl * lnl +
model->BSIM4rbpbyw * lnw + model->BSIM4rbpbynf * lnnf );
here->BSIM4rbpb = rbpbx*rbpby/(rbpbx + rbpby);
}
here->BSIM4rbdb = rbdbx * rbdby / (rbdbx + rbdby);
}
if ((bodymode == 3)|| (bodymode == 5))
{
/*here->BSIM4rbps = exp( log(model->BSIM4rbps0) + model->BSIM4rbpsl * lnl +
model->BSIM4rbpsw * lnw + model->BSIM4rbpsnf * lnnf );
here->BSIM4rbpd = exp( log(model->BSIM4rbpd0) + model->BSIM4rbpdl * lnl +
model->BSIM4rbpdw * lnw + model->BSIM4rbpdnf * lnnf );
*/
here->BSIM4rbps = model->BSIM4rbps0 * exp( model->BSIM4rbpsl * lnl +
model->BSIM4rbpsw * lnw + model->BSIM4rbpsnf * lnnf );
here->BSIM4rbpd = model->BSIM4rbpd0 * exp( model->BSIM4rbpdl * lnl +
model->BSIM4rbpdw * lnw + model->BSIM4rbpdnf * lnnf );
}
/*rbpbx = exp( log(model->BSIM4rbpbx0) + model->BSIM4rbpbxl * lnl +
model->BSIM4rbpbxw * lnw + model->BSIM4rbpbxnf * lnnf );
rbpby = exp( log(model->BSIM4rbpby0) + model->BSIM4rbpbyl * lnl +
model->BSIM4rbpbyw * lnw + model->BSIM4rbpbynf * lnnf );
*/
rbpbx = model->BSIM4rbpbx0 * exp( model->BSIM4rbpbxl * lnl +
model->BSIM4rbpbxw * lnw + model->BSIM4rbpbxnf * lnnf );
rbpby = model->BSIM4rbpby0 * exp( model->BSIM4rbpbyl * lnl +
model->BSIM4rbpbyw * lnw + model->BSIM4rbpbynf * lnnf );
here->BSIM4rbpb = rbpbx*rbpby/(rbpbx + rbpby);
}
if ((here->BSIM4rbodyMod == 1 ) || ((here->BSIM4rbodyMod == 2 ) && (bodymode == 5)) )
{ if (here->BSIM4rbdb < 1.0e-3)
@ -2124,65 +2215,9 @@ int Size_Not_Found, i;
here->BSIM4SswgTempRevSatCur = T5 * T10 * T11 * model->BSIM4jtsswgs;
here->BSIM4DswgTempRevSatCur = T6 * T10 * T11 * model->BSIM4jtsswgd;
/*high k*/
/*Calculate VgsteffVth for mobMod=3*/
if(model->BSIM4mobMod==3)
{ /*Calculate n @ Vbs=Vds=0*/
V0 = pParam->BSIM4vbi - pParam->BSIM4phi;
lt1 = model->BSIM4factor1* pParam->BSIM4sqrtXdep0;
ltw = lt1;
T0 = pParam->BSIM4dvt1 * pParam->BSIM4leff / lt1;
if (T0 < EXP_THRESHOLD)
{
T1 = exp(T0);
T2 = T1 - 1.0;
T3 = T2 * T2;
T4 = T3 + 2.0 * T1 * MIN_EXP;
Theta0 = T1 / T4;
}
else
Theta0 = 1.0 / (MAX_EXP - 2.0);
tmp1 = epssub / pParam->BSIM4Xdep0;
here->BSIM4nstar = model->BSIM4vtm / Charge_q *
(model->BSIM4coxe + tmp1 + pParam->BSIM4cit);
tmp2 = pParam->BSIM4nfactor * tmp1;
tmp3 = (tmp2 + pParam->BSIM4cdsc * Theta0 + pParam->BSIM4cit) / model->BSIM4coxe;
if (tmp3 >= -0.5)
n0 = 1.0 + tmp3;
else
{
T0 = 1.0 / (3.0 + 8.0 * tmp3);
n0 = (1.0 + 3.0 * tmp3) * T0;
}
T0 = n0 * model->BSIM4vtm;
T1 = pParam->BSIM4voffcbn;
T2 = T1/T0;
if (T2 < -EXP_THRESHOLD)
{ T3 = model->BSIM4coxe * MIN_EXP / pParam->BSIM4cdep0;
T4 = pParam->BSIM4mstar + T3 * n0;
}
else if (T2 > EXP_THRESHOLD)
{ T3 = model->BSIM4coxe * MAX_EXP / pParam->BSIM4cdep0;
T4 = pParam->BSIM4mstar + T3 * n0;
}
else
{ T3 = exp(T2)* model->BSIM4coxe / pParam->BSIM4cdep0;
T4 = pParam->BSIM4mstar + T3 * n0;
}
pParam->BSIM4VgsteffVth = T0 * log(2.0)/T4;
}
/* New DITS term added in 4.7 */
T0 = -pParam->BSIM4dvtp3 * log(pParam->BSIM4leff);
DEXP(T0, T1);
pParam->BSIM4dvtp2factor = pParam->BSIM4dvtp5 + pParam->BSIM4dvtp2 * T1;
if(model->BSIM4mtrlMod != 0 && model->BSIM4mtrlCompatMod == 0)
{
/* Calculate TOXP from EOT */
{
/* Calculate TOXP from EOT */
/* Calculate Vgs_eff @ Vgs = VDD with Poly Depletion Effect */
Vtm0eot = KboQ * model->BSIM4tempeot;
Vtmeot = Vtm0eot;
@ -2263,6 +2298,7 @@ int Size_Not_Found, i;
n = (1.0 + 3.0 * tmp3) * T0;
}
/* Vth correction for Pocket implant */
if (pParam->BSIM4dvtp0 > 0.0)
{
@ -2297,9 +2333,12 @@ int Size_Not_Found, i;
toxpf = toxe - epsrox/model->BSIM4epsrsub * Tcen;
niter++;
} while ((niter<=4)&&(ABS(toxpf-toxpi)>1e-12));
model->BSIM4toxp = toxpf;
model->BSIM4coxp = epsrox * EPS0 / model->BSIM4toxp;
}
here->BSIM4toxp = toxpf;
here->BSIM4coxp = epsrox * EPS0 / model->BSIM4toxp;
} else {
here->BSIM4toxp = model->BSIM4toxp;
here->BSIM4coxp = model->BSIM4coxp;
}
if (BSIM4checkModel(model, here, ckt))
{

View File

@ -1,8 +1,8 @@
/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
* Copyright 2006 Regents of the University of California. All rights reserved.
* File: b4trunc.c of BSIM4.7.0.
* File: b4trunc.c of BSIM4.8.0.
* Author: 2000 Weidong Liu
* Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu.
* Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu

View File

@ -1,4 +1,4 @@
/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
Copyright 2006 Regents of the University of California. All rights reserved.
@ -16,7 +16,8 @@ Modified by Xuemei Xi, 07/29/2005.
Modified by Mohan Dunga, 12/13/2006
Modified by Mohan Dunga, Wenwei Yang, 05/18/2007.
Modified by Wenwei Yang, 07/31/2008.
* Modified by Tanvir Morshed, Darsen Lu 03/27/2011
Modified by Tanvir Morshed, Darsen Lu 03/27/2011
Modified by Pankaj Kumar Thakur, 07/23/2012
**********/
#ifndef BSIM4
@ -123,6 +124,8 @@ typedef struct sBSIM4instance
double BSIM4vbsc;
double BSIM4k2ox;
double BSIM4eta0;
double BSIM4toxp;
double BSIM4coxp;
double BSIM4icVDS;
double BSIM4icVGS;
@ -698,6 +701,9 @@ struct bsim4SizeDependParam
double BSIM4aigc;
double BSIM4bigc;
double BSIM4cigc;
double BSIM4aigsd;
double BSIM4bigsd;
double BSIM4cigsd;
double BSIM4aigs;
double BSIM4bigs;
double BSIM4cigs;

View File

@ -1,3 +1,5 @@
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
Copyright 2004 Regents of the University of California. All rights reserved.
Author: 2000 Weidong Liu

View File

@ -1,3 +1,5 @@
/**** BSIM4.8.0 Released by Navid Paydavosi 11/01/2013 ****/
/**********
Copyright 2004 Regents of the University of California. All rights reserved.
Author: 2000 Weidong Liu.

View File

@ -19,8 +19,8 @@ nTypeSelectionArguments nmos level=14 version=4.7.0
pTypeSelectionArguments pmos level=14 version=4.7.0
`endif
`ifdef ngspice
nTypeSelectionArguments nmos level=14 version=4.7.0
pTypeSelectionArguments pmos level=14 version=4.7.0
nTypeSelectionArguments nmos level=14 version=4.8.0
pTypeSelectionArguments pmos level=14 version=4.8.0
`endif
//

View File

@ -19,8 +19,8 @@ nTypeSelectionArguments pmos level=14 version=4.7.0
pTypeSelectionArguments pmos level=14 version=4.7.0
`endif
`ifdef ngspice
nTypeSelectionArguments pmos level=14 version=4.7.0
pTypeSelectionArguments pmos level=14 version=4.7.0
nTypeSelectionArguments pmos level=14 version=4.8.0
pTypeSelectionArguments pmos level=14 version=4.8.0
`endif
//