update to 4.3
This commit is contained in:
parent
c7470aa895
commit
278f3c64fd
|
|
@ -1,4 +1,6 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,9 +11,10 @@
|
|||
* File: b4soi.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
|
||||
#include "ngspice.h"
|
||||
#include "devdefs.h"
|
||||
#include "b4soidef.h"
|
||||
|
|
@ -76,7 +79,7 @@ OP( "debug3", B4SOI_DEBUG3, IF_REAL, "DebugOut3"),
|
|||
#endif
|
||||
|
||||
IOP( "bjtoff", B4SOI_BJTOFF, IF_INTEGER, "BJT on/off flag"),
|
||||
IOP( "debug", B4SOI_DEBUG, IF_INTEGER, "BJT on/off flag"),
|
||||
IOP( "debug", B4SOI_DEBUG, IF_INTEGER, "DEBUG on/off flag"),
|
||||
IOP( "rth0", B4SOI_RTH0, IF_REAL, "Instance Thermal Resistance"),
|
||||
IOP( "cth0", B4SOI_CTH0, IF_REAL, "Instance Thermal Capacitance"),
|
||||
IOP( "nrb", B4SOI_NRB, IF_REAL, "Number of squares in body"),
|
||||
|
|
@ -226,7 +229,7 @@ IOP( "pdiblcb", B4SOI_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier
|
|||
IOP( "pvag", B4SOI_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"),
|
||||
|
||||
IOP( "shmod", B4SOI_MOD_SHMOD, IF_INTEGER, "Self heating mode selector"),
|
||||
IOP( "ddmod", B4SOI_MOD_DDMOD, IF_INTEGER, "Dynamic depletion mode selector"),
|
||||
/* IOP( "ddmod", B4SOI_MOD_DDMOD, IF_INTEGER, "Dynamic depletion mode selector"), */ /*v4.2 soiMod = 1 now has the functionality */
|
||||
IOP( "tbox", B4SOI_MOD_TBOX, IF_REAL, "Back gate oxide thickness in meters"),
|
||||
IOP( "tsi", B4SOI_MOD_TSI, IF_REAL, "Silicon-on-insulator thickness in meters"),
|
||||
IOP( "etsi", B4SOI_MOD_ETSI, IF_REAL, "Effective Silicon-on-insulator thickness in meters"),
|
||||
|
|
@ -621,7 +624,10 @@ IOP( "lu0", B4SOI_MOD_LU0, IF_REAL, "Length dependence of u0"),
|
|||
IOP( "leu", B4SOI_MOD_LEU, IF_REAL, " Length dependence of eu"),
|
||||
IOP( "lua", B4SOI_MOD_LUA, IF_REAL, "Length dependence of ua"),
|
||||
IOP( "lub", B4SOI_MOD_LUB, IF_REAL, "Length dependence of ub"),
|
||||
IOP( "luc", B4SOI_MOD_LUC, IF_REAL, "Length dependence of uc"),
|
||||
IOP( "luc", B4SOI_MOD_LUC, IF_REAL, "Length dependence of uc"),
|
||||
IOP( "lud", B4SOI_MOD_LUD, IF_REAL, "Length dependence of ud"), /* Bug fix # 32 Jul 09 */
|
||||
IOP( "lud1", B4SOI_MOD_LUD1, IF_REAL, "Length dependence of ud1"),
|
||||
/* Bug fix # 32 Jul 09 */
|
||||
IOP( "lucste", B4SOI_MOD_LUCSTE, IF_REAL, "Length dependence of ucste"),
|
||||
IOP( "lucs", B4SOI_MOD_LUCS, IF_REAL, "Length dependence of lucs"),
|
||||
IOP( "lvsat", B4SOI_MOD_LVSAT, IF_REAL, "Length dependence of vsat"),
|
||||
|
|
@ -659,6 +665,11 @@ IOP( "lpvag", B4SOI_MOD_LPVAG, IF_REAL, "Length dependence of pvag"),
|
|||
IOP( "ldelta", B4SOI_MOD_LDELTA, IF_REAL, "Length dependence of delta"),
|
||||
IOP( "lalpha0", B4SOI_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"),
|
||||
IOP( "lfbjtii", B4SOI_MOD_LFBJTII, IF_REAL, "Length dependence of fbjtii"),
|
||||
IOP( "labjtii", B4SOI_MOD_LABJTII, IF_REAL, "Length dependence of abjtii"), /*Bug fix # 32 Jul 09*/
|
||||
IOP( "lcbjtii", B4SOI_MOD_LCBJTII, IF_REAL, "Length dependence of cbjtii"), /*Bug fix # 32 Jul 09*/
|
||||
IOP( "lebjtii", B4SOI_MOD_LEBJTII, IF_REAL, "Length dependence of ebjtii"), /*Bug fix # 32 Jul 09*/
|
||||
IOP( "lmbjtii", B4SOI_MOD_LMBJTII, IF_REAL, "Length dependence of mbjtii"), /*Bug fix # 32 Jul 09*/
|
||||
IOP( "lvbci", B4SOI_MOD_LVBCI, IF_REAL, "Length dependence of vbci"), /*Bug fix # 32 Jul 09*/
|
||||
IOP( "lbeta0", B4SOI_MOD_LBETA0, IF_REAL, "Length dependence of beta0"),
|
||||
IOP( "lbeta1", B4SOI_MOD_LBETA1, IF_REAL, "Length dependence of beta1"),
|
||||
IOP( "lbeta2", B4SOI_MOD_LBETA2, IF_REAL, "Length dependence of beta2"),
|
||||
|
|
@ -713,7 +724,7 @@ IOP( "lvsdfb", B4SOI_MOD_LVSDFB, IF_REAL, "Length dependence of vsdfb"),
|
|||
IOP( "lvsdth", B4SOI_MOD_LVSDTH, IF_REAL, "Length dependence of vsdth"),
|
||||
IOP( "ldelvt", B4SOI_MOD_LDELVT, IF_REAL, "Length dependence of delvt"),
|
||||
IOP( "lacde", B4SOI_MOD_LACDE, IF_REAL, "Length dependence of acde"),
|
||||
IOP( "lmoin", B4SOI_MOD_LMOIN, IF_REAL, "Length dependence of amoin"),
|
||||
IOP( "lmoin", B4SOI_MOD_LMOIN, IF_REAL, "Length dependence of moin"),
|
||||
IOP( "lnoff", B4SOI_MOD_LNOFF, IF_REAL, "Length dependence of noff"), /* v3.2 */
|
||||
|
||||
/* v3.1 added for RF */
|
||||
|
|
@ -764,7 +775,6 @@ IOP( "wcigsd", B4SOI_MOD_WCIGSD, IF_REAL, "Width dependence of cigsd"),
|
|||
IOP( "wnigc", B4SOI_MOD_WNIGC, IF_REAL, "Width dependence of nigc"),
|
||||
IOP( "wpigcd", B4SOI_MOD_WPIGCD, IF_REAL, "Width dependence for pigcd"),
|
||||
IOP( "wpoxedge", B4SOI_MOD_WPOXEDGE, IF_REAL, "Width dependence for poxedge"),
|
||||
|
||||
IOP( "wnch", B4SOI_MOD_WNPEAK, IF_REAL, "Width dependence of nch"),
|
||||
IOP( "wnsub", B4SOI_MOD_WNSUB, IF_REAL, "Width dependence of nsub"),
|
||||
IOP( "wngate", B4SOI_MOD_WNGATE, IF_REAL, "Width dependence of ngate"),
|
||||
|
|
@ -792,6 +802,8 @@ IOP( "weu", B4SOI_MOD_WEU, IF_REAL, "Width dependence of eu"),
|
|||
IOP( "wua", B4SOI_MOD_WUA, IF_REAL, "Width dependence of ua"),
|
||||
IOP( "wub", B4SOI_MOD_WUB, IF_REAL, "Width dependence of ub"),
|
||||
IOP( "wuc", B4SOI_MOD_WUC, IF_REAL, "Width dependence of uc"),
|
||||
IOP( "wud", B4SOI_MOD_WUD, IF_REAL, "Width dependence of ud"), /* Bug fix # 32 Jul 09 */
|
||||
IOP( "wud1", B4SOI_MOD_WUD1, IF_REAL, "Width dependence of ud1"), /* Bug fix # 32 Jul 09 */
|
||||
IOP( "wucste", B4SOI_MOD_WUCSTE, IF_REAL, "Width dependence of ucste"),
|
||||
IOP( "wucs", B4SOI_MOD_WUCS, IF_REAL, "Width dependence of ucs"),
|
||||
IOP( "wvsat", B4SOI_MOD_WVSAT, IF_REAL, "Width dependence of vsat"),
|
||||
|
|
@ -829,6 +841,11 @@ IOP( "wpvag", B4SOI_MOD_WPVAG, IF_REAL, "Width dependence of pvag"),
|
|||
IOP( "wdelta", B4SOI_MOD_WDELTA, IF_REAL, "Width dependence of delta"),
|
||||
IOP( "walpha0", B4SOI_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"),
|
||||
IOP( "wfbjtii", B4SOI_MOD_WFBJTII, IF_REAL, "Width dependence of fbjtii"),
|
||||
IOP( "wabjtii", B4SOI_MOD_WABJTII, IF_REAL, "Width dependence of abjtii"), /*Bug fix # 32 Jul 09 */
|
||||
IOP( "wcbjtii", B4SOI_MOD_WCBJTII, IF_REAL, "Width dependence of cbjtii"), /*Bug fix # 32 Jul 09 */
|
||||
IOP( "webjtii", B4SOI_MOD_WEBJTII, IF_REAL, "Width dependence of ebjtii"), /*Bug fix # 32 Jul 09 */
|
||||
IOP( "wmbjtii", B4SOI_MOD_WMBJTII, IF_REAL, "Width dependence of mbjtii"), /*Bug fix # 32 Jul 09 */
|
||||
IOP( "wvbci", B4SOI_MOD_WVBCI, IF_REAL, "Width dependence of vbci"), /*Bug fix # 32 Jul 09*/
|
||||
IOP( "wbeta0", B4SOI_MOD_WBETA0, IF_REAL, "Width dependence of beta0"),
|
||||
IOP( "wbeta1", B4SOI_MOD_WBETA1, IF_REAL, "Width dependence of beta1"),
|
||||
IOP( "wbeta2", B4SOI_MOD_WBETA2, IF_REAL, "Width dependence of beta2"),
|
||||
|
|
@ -883,12 +900,13 @@ IOP( "wvsdfb", B4SOI_MOD_WVSDFB, IF_REAL, "Width dependence of vsdfb"),
|
|||
IOP( "wvsdth", B4SOI_MOD_WVSDTH, IF_REAL, "Width dependence of vsdth"),
|
||||
IOP( "wdelvt", B4SOI_MOD_WDELVT, IF_REAL, "Width dependence of delvt"),
|
||||
IOP( "wacde", B4SOI_MOD_WACDE, IF_REAL, "Width dependence of acde"),
|
||||
IOP( "wmoin", B4SOI_MOD_WMOIN, IF_REAL, "Width dependence of amoin"),
|
||||
IOP( "wmoin", B4SOI_MOD_WMOIN, IF_REAL, "Width dependence of moin"),
|
||||
IOP( "wnoff", B4SOI_MOD_WNOFF, IF_REAL, "Width dependence of noff"), /* v3.2 */
|
||||
|
||||
/* v3.1 added for RF */
|
||||
IOP("wxrcrg1", B4SOI_MOD_WXRCRG1, IF_REAL, "Width dependence of xrcrg1"),
|
||||
IOP("Wxrcrg2", B4SOI_MOD_WXRCRG2, IF_REAL, "Width dependence of xrcrg2"),
|
||||
/* IOP("Wxrcrg2", B4SOI_MOD_WXRCRG2, IF_REAL, "Width dependence of xrcrg2") *//*Bug fix # 32 Jul 09 */
|
||||
IOP("wxrcrg2", B4SOI_MOD_WXRCRG2, IF_REAL, "Width dependence of xrcrg2"),
|
||||
/* added for RF model end*/
|
||||
|
||||
|
||||
|
|
@ -963,6 +981,8 @@ IOP( "peu", B4SOI_MOD_PEU, IF_REAL, "Cross-term dependence of eu"),
|
|||
IOP( "pua", B4SOI_MOD_PUA, IF_REAL, "Cross-term dependence of ua"),
|
||||
IOP( "pub", B4SOI_MOD_PUB, IF_REAL, "Cross-term dependence of ub"),
|
||||
IOP( "puc", B4SOI_MOD_PUC, IF_REAL, "Cross-term dependence of uc"),
|
||||
IOP( "pud", B4SOI_MOD_PUD, IF_REAL, "Cross-term dependence of ud"), /*Bug fix # 32 Jul 09 */
|
||||
IOP( "pud1", B4SOI_MOD_PUD1, IF_REAL, "Cross-term dependence of ud1"), /*Bug fix # 32 Jul 09 */
|
||||
IOP( "pucste", B4SOI_MOD_PUCSTE, IF_REAL, "Cross-term dependence of ucste"),
|
||||
IOP( "pucs", B4SOI_MOD_PUCS, IF_REAL, "Cross-term dependence of ucs"),
|
||||
IOP( "pvsat", B4SOI_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"),
|
||||
|
|
@ -1000,6 +1020,11 @@ IOP( "ppvag", B4SOI_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"),
|
|||
IOP( "pdelta", B4SOI_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"),
|
||||
IOP( "palpha0", B4SOI_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"),
|
||||
IOP( "pfbjtii", B4SOI_MOD_PFBJTII, IF_REAL, "Cross-term dependence of fbjtii"),
|
||||
IOP( "pabjtii", B4SOI_MOD_PABJTII, IF_REAL, "Cross-term dependence of abjtii"), /* Bug fix # 32 Jul 09 */
|
||||
IOP( "pcbjtii", B4SOI_MOD_PCBJTII, IF_REAL, "Cross-term dependence of cbjtii"), /* Bug fix # 32 Jul 09 */
|
||||
IOP( "pebjtii", B4SOI_MOD_PEBJTII, IF_REAL, "Cross-term dependence of ebjtii"), /* Bug fix # 32 Jul 09 */
|
||||
IOP( "pmbjtii", B4SOI_MOD_PMBJTII, IF_REAL, "Cross-term dependence of mbjtii"), /* Bug fix # 32 Jul 09 */
|
||||
IOP( "pvbci", B4SOI_MOD_PVBCI, IF_REAL, "Cross-term dependence of vbci"), /* Bug fix # 32 Jul 09 */
|
||||
IOP( "pbeta0", B4SOI_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"),
|
||||
IOP( "pbeta1", B4SOI_MOD_PBETA1, IF_REAL, "Cross-term dependence of beta1"),
|
||||
IOP( "pbeta2", B4SOI_MOD_PBETA2, IF_REAL, "Cross-term dependence of beta2"),
|
||||
|
|
@ -1054,7 +1079,7 @@ IOP( "pvsdfb", B4SOI_MOD_PVSDFB, IF_REAL, "Cross-term dependence of vsdfb"),
|
|||
IOP( "pvsdth", B4SOI_MOD_PVSDTH, IF_REAL, "Cross-term dependence of vsdth"),
|
||||
IOP( "pdelvt", B4SOI_MOD_PDELVT, IF_REAL, "Cross-term dependence of delvt"),
|
||||
IOP( "pacde", B4SOI_MOD_PACDE, IF_REAL, "Cross-term dependence of acde"),
|
||||
IOP( "pmoin", B4SOI_MOD_PMOIN, IF_REAL, "Cross-term dependence of amoin"),
|
||||
IOP( "pmoin", B4SOI_MOD_PMOIN, IF_REAL, "Cross-term dependence of moin"),
|
||||
IOP( "pnoff", B4SOI_MOD_PNOFF, IF_REAL, "Cross-term dependence of noff"), /* v3.2 */
|
||||
|
||||
/* v3.1 added for RF */
|
||||
|
|
@ -1083,7 +1108,7 @@ char *B4SOInames[] = {
|
|||
"Gate",
|
||||
"Source",
|
||||
"Backgate",
|
||||
"Body_ext",
|
||||
"",
|
||||
"Body",
|
||||
"Temp",
|
||||
"Charge",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soiacld.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soiask.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -180,7 +183,7 @@ B4SOIinstance *here = (B4SOIinstance*)inst;
|
|||
case B4SOI_AGBCP:
|
||||
value->rValue = here->B4SOIagbcp;
|
||||
return(OK);
|
||||
case B4SOI_AGBCP2:
|
||||
case B4SOI_AGBCP2:
|
||||
value->rValue = here->B4SOIagbcp2;
|
||||
return(OK); /* v4.1 for BC improvement */
|
||||
case B4SOI_AGBCPD: /* v4.0 */
|
||||
|
|
@ -280,7 +283,7 @@ B4SOIinstance *here = (B4SOIinstance*)inst;
|
|||
case B4SOI_IGIDL:
|
||||
value->rValue = here->B4SOIigidl;
|
||||
return(OK);
|
||||
case B4SOI_IGISL:
|
||||
case B4SOI_IGISL:
|
||||
value->rValue = here->B4SOIigisl;
|
||||
return(OK);
|
||||
case B4SOI_IGS:
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soicheck.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -29,7 +32,7 @@ CKTcircuit *ckt)
|
|||
struct b4soiSizeDependParam *pParam;
|
||||
int Fatal_Flag = 0;
|
||||
FILE *fplog;
|
||||
|
||||
|
||||
if ((fplog = fopen("b4soiv1check.log", "w")) != NULL)
|
||||
{ pParam = here->pParam;
|
||||
fprintf(fplog, "B4SOIV3 Parameter Check\n");
|
||||
|
|
@ -45,7 +48,7 @@ FILE *fplog;
|
|||
}
|
||||
|
||||
if((here->B4SOIsa > 0.0) && (here->B4SOIsb > 0.0) &&
|
||||
((here->B4SOInf == 1.0) || ((here->B4SOInf > 1.0) &&
|
||||
((here->B4SOInf == 1.0) || ((here->B4SOInf > 1.0) &&
|
||||
(here->B4SOIsd > 0.0))) )
|
||||
{ if (model->B4SOIsaref <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: SAref = %g is not positive.\n",
|
||||
|
|
@ -175,23 +178,23 @@ FILE *fplog;
|
|||
|
||||
if (pParam->B4SOIdvt1 < 0.0)
|
||||
{ fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n",
|
||||
pParam->B4SOIdvt1);
|
||||
printf("Fatal: Dvt1 = %g is negative.\n", pParam->B4SOIdvt1);
|
||||
pParam->B4SOIdvt1);
|
||||
printf("Fatal: Dvt1 = %g is negative.\n", pParam->B4SOIdvt1);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
|
||||
|
||||
if (pParam->B4SOIdvt1w < 0.0)
|
||||
{ fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n",
|
||||
pParam->B4SOIdvt1w);
|
||||
printf("Fatal: Dvt1w = %g is negative.\n", pParam->B4SOIdvt1w);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
|
||||
|
||||
if (pParam->B4SOIw0 == -pParam->B4SOIweff)
|
||||
{ fprintf(fplog, "Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n");
|
||||
printf("Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n");
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (pParam->B4SOIdsub < 0.0)
|
||||
{ fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->B4SOIdsub);
|
||||
|
|
@ -202,21 +205,21 @@ FILE *fplog;
|
|||
{ fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n");
|
||||
printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n");
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
}
|
||||
if (pParam->B4SOIu0temp <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", pParam->B4SOIu0temp);
|
||||
printf("Fatal: u0 at current temperature = %g is not positive.\n",
|
||||
pParam->B4SOIu0temp);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
|
||||
/* Check delta parameter */
|
||||
|
||||
/* Check delta parameter */
|
||||
if (pParam->B4SOIdelta < 0.0)
|
||||
{ fprintf(fplog, "Fatal: Delta = %g is less than zero.\n",
|
||||
pParam->B4SOIdelta);
|
||||
printf("Fatal: Delta = %g is less than zero.\n", pParam->B4SOIdelta);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (pParam->B4SOIvsattemp <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", pParam->B4SOIvsattemp);
|
||||
|
|
@ -243,7 +246,7 @@ FILE *fplog;
|
|||
here->B4SOIdrainPerimeter);
|
||||
printf("Warning: Pd = %g is less than W.\n",
|
||||
here->B4SOIdrainPerimeter);
|
||||
here->B4SOIdrainPerimeter =pParam->B4SOIweff;
|
||||
here->B4SOIdrainPerimeter =pParam->B4SOIweff;
|
||||
}
|
||||
}
|
||||
if ( model->B4SOIunitLengthGateSidewallJctCapS > 0.0) /* v4.0 */
|
||||
|
|
@ -261,7 +264,7 @@ FILE *fplog;
|
|||
{ fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->B4SOIclc);
|
||||
printf("Fatal: Clc = %g is negative.\n", pParam->B4SOIclc);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* v3.2 */
|
||||
|
|
@ -279,8 +282,8 @@ FILE *fplog;
|
|||
/* added for stress */
|
||||
|
||||
/* Check stress effect parameters */
|
||||
if( (here->B4SOIsa > 0.0) && (here->B4SOIsb > 0.0) &&
|
||||
((here->B4SOInf == 1.0) || ((here->B4SOInf > 1.0) &&
|
||||
if( (here->B4SOIsa > 0.0) && (here->B4SOIsb > 0.0) &&
|
||||
((here->B4SOInf == 1.0) || ((here->B4SOInf > 1.0) &&
|
||||
(here->B4SOIsd > 0.0))) )
|
||||
{ if (model->B4SOIlodk2 <= 0.0)
|
||||
{ fprintf(fplog, "Warning: LODK2 = %g is not positive.\n",model->B4SOIlodk2);
|
||||
|
|
@ -328,38 +331,77 @@ FILE *fplog;
|
|||
pParam->B4SOIacde);
|
||||
}
|
||||
}
|
||||
/* v2.2.3 */
|
||||
|
||||
|
||||
/* v4.2 always perform Fatal checks */
|
||||
if (pParam->B4SOInigc <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: nigc = %g is non-positive.\n",
|
||||
pParam->B4SOInigc);
|
||||
printf("Fatal: nigc = %g is non-positive.\n", pParam->B4SOInigc);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
if (pParam->B4SOIpoxedge <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: poxedge = %g is non-positive.\n",
|
||||
pParam->B4SOIpoxedge);
|
||||
printf("Fatal: poxedge = %g is non-positive.\n", pParam->B4SOIpoxedge);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
if (pParam->B4SOIpigcd <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: pigcd = %g is non-positive.\n",
|
||||
pParam->B4SOIpigcd);
|
||||
printf("Fatal: pigcd = %g is non-positive.\n", pParam->B4SOIpigcd);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
|
||||
if (model->B4SOItoxref < 0.0)
|
||||
{ fprintf(fplog, "Warning: TOXREF = %g is negative.\n",
|
||||
model->B4SOItoxref);
|
||||
printf("Warning: Toxref = %g is negative.\n", model->B4SOItoxref);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
|
||||
if (model->B4SOItoxqm <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: Toxqm = %g is not positive.\n",
|
||||
model->B4SOItoxqm);
|
||||
printf("Fatal: Toxqm = %g is not positive.\n", model->B4SOItoxqm);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
|
||||
if (model->B4SOIdeltavox <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: Deltavox = %g is not positive.\n",
|
||||
model->B4SOIdeltavox);
|
||||
printf("Fatal: Deltavox = %g is not positive.\n", model->B4SOIdeltavox);
|
||||
}
|
||||
|
||||
if (model->B4SOIparamChk ==1)
|
||||
{
|
||||
/* Check L and W parameters */
|
||||
/* Check L and W parameters */
|
||||
if (pParam->B4SOIleff <= 5.0e-8)
|
||||
{ fprintf(fplog, "Warning: Leff = %g may be too small.\n",
|
||||
pParam->B4SOIleff);
|
||||
printf("Warning: Leff = %g may be too small.\n",
|
||||
pParam->B4SOIleff);
|
||||
}
|
||||
}
|
||||
|
||||
if (pParam->B4SOIleffCV <= 5.0e-8)
|
||||
{ fprintf(fplog, "Warning: Leff for CV = %g may be too small.\n",
|
||||
pParam->B4SOIleffCV);
|
||||
printf("Warning: Leff for CV = %g may be too small.\n",
|
||||
pParam->B4SOIleffCV);
|
||||
}
|
||||
}
|
||||
|
||||
if (pParam->B4SOIweff <= 1.0e-7)
|
||||
{ fprintf(fplog, "Warning: Weff = %g may be too small.\n",
|
||||
pParam->B4SOIweff);
|
||||
printf("Warning: Weff = %g may be too small.\n",
|
||||
pParam->B4SOIweff);
|
||||
}
|
||||
}
|
||||
|
||||
if (pParam->B4SOIweffCV <= 1.0e-7)
|
||||
{ fprintf(fplog, "Warning: Weff for CV = %g may be too small.\n",
|
||||
pParam->B4SOIweffCV);
|
||||
printf("Warning: Weff for CV = %g may be too small.\n",
|
||||
pParam->B4SOIweffCV);
|
||||
}
|
||||
}
|
||||
|
||||
/* Check threshold voltage parameters */
|
||||
if (pParam->B4SOIlpe0 < 0.0)
|
||||
|
|
@ -399,18 +441,33 @@ FILE *fplog;
|
|||
printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n",
|
||||
pParam->B4SOIngate);
|
||||
}
|
||||
|
||||
|
||||
if (pParam->B4SOIdvt0 < 0.0)
|
||||
{ fprintf(fplog, "Warning: Dvt0 = %g is negative.\n",
|
||||
pParam->B4SOIdvt0);
|
||||
printf("Warning: Dvt0 = %g is negative.\n", pParam->B4SOIdvt0);
|
||||
pParam->B4SOIdvt0);
|
||||
printf("Warning: Dvt0 = %g is negative.\n", pParam->B4SOIdvt0);
|
||||
}
|
||||
|
||||
|
||||
if (fabs(1.0e-6 / (pParam->B4SOIw0 + pParam->B4SOIweff)) > 10.0)
|
||||
{ fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n");
|
||||
printf("Warning: (W0 + Weff) may be too small.\n");
|
||||
}
|
||||
|
||||
/* Check Nsd, Ngate and Npeak parameters*/ /* Bug Fix # 22 Jul09*/
|
||||
if (model->B4SOInsd > 1.0e23)
|
||||
{ fprintf(fplog, "Warning: Nsd = %g is too large, should be specified in cm^-3.\n",
|
||||
model->B4SOInsd);
|
||||
printf("Warning: Nsd = %g is too large, should be specified in cm^-3.\n", model->B4SOInsd);
|
||||
}
|
||||
if (model->B4SOIngate > 1.0e23)
|
||||
{ fprintf(fplog, "Warning: Ngate = %g is too large, should be specified in cm^-3.\n",
|
||||
model->B4SOIngate);
|
||||
printf("Warning: Ngate = %g is too large, should be specified in cm^-3.\n", model->B4SOIngate);
|
||||
}
|
||||
if (model->B4SOInpeak > 1.0e20)
|
||||
{ fprintf(fplog, "Warning: Npeak = %g is too large, should be less than 1.0e20, specified in cm^-3.\n",
|
||||
model->B4SOInpeak);
|
||||
printf("Warning: Npeak = %g is too large, should be less than 1.0e20, specified in cm^-3.\n", model->B4SOInpeak);
|
||||
}
|
||||
/* Check subthreshold parameters */
|
||||
if (pParam->B4SOInfactor < 0.0)
|
||||
{ fprintf(fplog, "Warning: Nfactor = %g is negative.\n",
|
||||
|
|
@ -430,15 +487,15 @@ FILE *fplog;
|
|||
/* Check DIBL parameters */
|
||||
if (pParam->B4SOIeta0 < 0.0)
|
||||
{ fprintf(fplog, "Warning: Eta0 = %g is negative.\n",
|
||||
pParam->B4SOIeta0);
|
||||
printf("Warning: Eta0 = %g is negative.\n", pParam->B4SOIeta0);
|
||||
pParam->B4SOIeta0);
|
||||
printf("Warning: Eta0 = %g is negative.\n", pParam->B4SOIeta0);
|
||||
}
|
||||
|
||||
/* Check Abulk parameters */
|
||||
|
||||
/* Check Abulk parameters */
|
||||
if (fabs(1.0e-6 / (pParam->B4SOIb1 + pParam->B4SOIweff)) > 10.0)
|
||||
{ fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n");
|
||||
printf("Warning: (B1 + Weff) may be too small.\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* Check Saturation parameters */
|
||||
if (pParam->B4SOIa2 < 0.01)
|
||||
|
|
@ -492,12 +549,12 @@ FILE *fplog;
|
|||
{ fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->B4SOIcgdo);
|
||||
printf("Warning: cgdo = %g is negative. Set to zero.\n", model->B4SOIcgdo);
|
||||
model->B4SOIcgdo = 0.0;
|
||||
}
|
||||
}
|
||||
if (model->B4SOIcgso < 0.0)
|
||||
{ fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->B4SOIcgso);
|
||||
printf("Warning: cgso = %g is negative. Set to zero.\n", model->B4SOIcgso);
|
||||
model->B4SOIcgso = 0.0;
|
||||
}
|
||||
}
|
||||
if (model->B4SOIcgeo < 0.0)
|
||||
{ fprintf(fplog, "Warning: cgeo = %g is negative. Set to zero.\n", model->B4SOIcgeo);
|
||||
printf("Warning: cgeo = %g is negative. Set to zero.\n", model->B4SOIcgeo);
|
||||
|
|
@ -506,32 +563,32 @@ FILE *fplog;
|
|||
|
||||
if (model->B4SOIntun < 0.0)
|
||||
{ fprintf(fplog, "Warning: Ntuns = %g is negative.\n",
|
||||
model->B4SOIntun);
|
||||
printf("Warning: Ntuns = %g is negative.\n", model->B4SOIntun);
|
||||
model->B4SOIntun);
|
||||
printf("Warning: Ntuns = %g is negative.\n", model->B4SOIntun);
|
||||
}
|
||||
|
||||
if (model->B4SOIntund < 0.0)
|
||||
{ fprintf(fplog, "Warning: Ntund = %g is negative.\n",
|
||||
model->B4SOIntund);
|
||||
printf("Warning: Ntund = %g is negative.\n", model->B4SOIntund);
|
||||
model->B4SOIntund);
|
||||
printf("Warning: Ntund = %g is negative.\n", model->B4SOIntund);
|
||||
}
|
||||
|
||||
if (model->B4SOIndiode < 0.0)
|
||||
{ fprintf(fplog, "Warning: Ndiode = %g is negative.\n",
|
||||
model->B4SOIndiode);
|
||||
model->B4SOIndiode);
|
||||
printf("Warning: Ndiode = %g is negative.\n", model->B4SOIndiode);
|
||||
}
|
||||
|
||||
if (model->B4SOIndioded < 0.0)
|
||||
{ fprintf(fplog, "Warning: Ndioded = %g is negative.\n",
|
||||
model->B4SOIndioded);
|
||||
model->B4SOIndioded);
|
||||
printf("Warning: Ndioded = %g is negative.\n", model->B4SOIndioded);
|
||||
}
|
||||
|
||||
if (model->B4SOIisbjt < 0.0)
|
||||
{ fprintf(fplog, "Warning: Isbjt = %g is negative.\n",
|
||||
model->B4SOIisbjt);
|
||||
printf("Warning: Isbjt = %g is negative.\n", model->B4SOIisbjt);
|
||||
model->B4SOIisbjt);
|
||||
printf("Warning: Isbjt = %g is negative.\n", model->B4SOIisbjt);
|
||||
}
|
||||
if (model->B4SOIidbjt < 0.0)
|
||||
{ fprintf(fplog, "Warning: Idbjt = %g is negative.\n",
|
||||
|
|
@ -541,8 +598,8 @@ FILE *fplog;
|
|||
|
||||
if (model->B4SOIisdif < 0.0)
|
||||
{ fprintf(fplog, "Warning: Isdif = %g is negative.\n",
|
||||
model->B4SOIisdif);
|
||||
printf("Warning: Isdif = %g is negative.\n", model->B4SOIisdif);
|
||||
model->B4SOIisdif);
|
||||
printf("Warning: Isdif = %g is negative.\n", model->B4SOIisdif);
|
||||
}
|
||||
if (model->B4SOIiddif < 0.0)
|
||||
{ fprintf(fplog, "Warning: Iddif = %g is negative.\n",
|
||||
|
|
@ -552,8 +609,8 @@ FILE *fplog;
|
|||
|
||||
if (model->B4SOIisrec < 0.0)
|
||||
{ fprintf(fplog, "Warning: Isrec = %g is negative.\n",
|
||||
model->B4SOIisrec);
|
||||
printf("Warning: Isrec = %g is negative.\n", model->B4SOIisrec);
|
||||
model->B4SOIisrec);
|
||||
printf("Warning: Isrec = %g is negative.\n", model->B4SOIisrec);
|
||||
}
|
||||
if (model->B4SOIidrec < 0.0)
|
||||
{ fprintf(fplog, "Warning: Idrec = %g is negative.\n",
|
||||
|
|
@ -563,8 +620,8 @@ FILE *fplog;
|
|||
|
||||
if (model->B4SOIistun < 0.0)
|
||||
{ fprintf(fplog, "Warning: Istun = %g is negative.\n",
|
||||
model->B4SOIistun);
|
||||
printf("Warning: Istun = %g is negative.\n", model->B4SOIistun);
|
||||
model->B4SOIistun);
|
||||
printf("Warning: Istun = %g is negative.\n", model->B4SOIistun);
|
||||
}
|
||||
if (model->B4SOIidtun < 0.0)
|
||||
{ fprintf(fplog, "Warning: Idtun = %g is negative.\n",
|
||||
|
|
@ -574,74 +631,53 @@ FILE *fplog;
|
|||
|
||||
if (model->B4SOItt < 0.0)
|
||||
{ fprintf(fplog, "Warning: Tt = %g is negative.\n",
|
||||
model->B4SOItt);
|
||||
printf("Warning: Tt = %g is negative.\n", model->B4SOItt);
|
||||
model->B4SOItt);
|
||||
printf("Warning: Tt = %g is negative.\n", model->B4SOItt);
|
||||
}
|
||||
|
||||
if (model->B4SOIcsdmin < 0.0)
|
||||
{ fprintf(fplog, "Warning: Csdmin = %g is negative.\n",
|
||||
model->B4SOIcsdmin);
|
||||
printf("Warning: Csdmin = %g is negative.\n", model->B4SOIcsdmin);
|
||||
model->B4SOIcsdmin);
|
||||
printf("Warning: Csdmin = %g is negative.\n", model->B4SOIcsdmin);
|
||||
}
|
||||
|
||||
if (model->B4SOIcsdesw < 0.0)
|
||||
{ fprintf(fplog, "Warning: Csdesw = %g is negative.\n",
|
||||
model->B4SOIcsdesw);
|
||||
printf("Warning: Csdesw = %g is negative.\n", model->B4SOIcsdesw);
|
||||
model->B4SOIcsdesw);
|
||||
printf("Warning: Csdesw = %g is negative.\n", model->B4SOIcsdesw);
|
||||
}
|
||||
|
||||
if (model->B4SOIasd < 0.0)
|
||||
{ fprintf(fplog, "Warning: Asd = %g should be within (0, 1).\n",
|
||||
model->B4SOIasd);
|
||||
printf("Warning: Asd = %g should be within (0, 1).\n", model->B4SOIasd);
|
||||
model->B4SOIasd);
|
||||
printf("Warning: Asd = %g should be within (0, 1).\n", model->B4SOIasd);
|
||||
}
|
||||
|
||||
if (model->B4SOIrth0 < 0.0)
|
||||
{ fprintf(fplog, "Warning: Rth0 = %g is negative.\n",
|
||||
model->B4SOIrth0);
|
||||
printf("Warning: Rth0 = %g is negative.\n", model->B4SOIrth0);
|
||||
model->B4SOIrth0);
|
||||
printf("Warning: Rth0 = %g is negative.\n", model->B4SOIrth0);
|
||||
}
|
||||
|
||||
if (model->B4SOIcth0 < 0.0)
|
||||
{ fprintf(fplog, "Warning: Cth0 = %g is negative.\n",
|
||||
model->B4SOIcth0);
|
||||
printf("Warning: Cth0 = %g is negative.\n", model->B4SOIcth0);
|
||||
model->B4SOIcth0);
|
||||
printf("Warning: Cth0 = %g is negative.\n", model->B4SOIcth0);
|
||||
}
|
||||
|
||||
if (model->B4SOIrbody < 0.0)
|
||||
{ fprintf(fplog, "Warning: Rbody = %g is negative.\n",
|
||||
model->B4SOIrbody);
|
||||
printf("Warning: Rbody = %g is negative.\n", model->B4SOIrbody);
|
||||
model->B4SOIrbody);
|
||||
printf("Warning: Rbody = %g is negative.\n", model->B4SOIrbody);
|
||||
}
|
||||
|
||||
if (model->B4SOIrbsh < 0.0)
|
||||
{ fprintf(fplog, "Warning: Rbsh = %g is negative.\n",
|
||||
model->B4SOIrbsh);
|
||||
printf("Warning: Rbsh = %g is negative.\n", model->B4SOIrbsh);
|
||||
model->B4SOIrbsh);
|
||||
printf("Warning: Rbsh = %g is negative.\n", model->B4SOIrbsh);
|
||||
}
|
||||
|
||||
|
||||
/* v3.0 */
|
||||
if (pParam->B4SOInigc <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: nigc = %g is non-positive.\n",
|
||||
pParam->B4SOInigc);
|
||||
printf("Fatal: nigc = %g is non-positive.\n", pParam->B4SOInigc);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
if (pParam->B4SOIpoxedge <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: poxedge = %g is non-positive.\n",
|
||||
pParam->B4SOIpoxedge);
|
||||
printf("Fatal: poxedge = %g is non-positive.\n", pParam->B4SOIpoxedge);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
if (pParam->B4SOIpigcd <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: pigcd = %g is non-positive.\n",
|
||||
pParam->B4SOIpigcd);
|
||||
printf("Fatal: pigcd = %g is non-positive.\n", pParam->B4SOIpigcd);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
|
||||
|
||||
/* v2.2 release */
|
||||
if (model->B4SOIwth0 < 0.0)
|
||||
{ fprintf(fplog, "Warning: WTH0 = %g is negative.\n",
|
||||
|
|
@ -658,12 +694,6 @@ FILE *fplog;
|
|||
model->B4SOIntox);
|
||||
printf("Warning: Ntox = %g is negative.\n", model->B4SOIntox);
|
||||
}
|
||||
if (model->B4SOItoxref < 0.0)
|
||||
{ fprintf(fplog, "Warning: TOXREF = %g is negative.\n",
|
||||
model->B4SOItoxref);
|
||||
printf("Warning: Toxref = %g is negative.\n", model->B4SOItoxref);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
if (model->B4SOIebg < 0.0)
|
||||
{ fprintf(fplog, "Warning: EBG = %g is negative.\n",
|
||||
model->B4SOIebg);
|
||||
|
|
@ -709,26 +739,14 @@ FILE *fplog;
|
|||
model->B4SOIvgb2);
|
||||
printf("Warning: Vgb2 = %g is negative.\n", model->B4SOIvgb2);
|
||||
}
|
||||
if (model->B4SOItoxqm <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: Toxqm = %g is not positive.\n",
|
||||
model->B4SOItoxqm);
|
||||
printf("Fatal: Toxqm = %g is not positive.\n", model->B4SOItoxqm);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
if (model->B4SOIvoxh < 0.0)
|
||||
{ fprintf(fplog, "Warning: Voxh = %g is negative.\n",
|
||||
model->B4SOIvoxh);
|
||||
printf("Warning: Voxh = %g is negative.\n", model->B4SOIvoxh);
|
||||
}
|
||||
if (model->B4SOIdeltavox <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: Deltavox = %g is not positive.\n",
|
||||
model->B4SOIdeltavox);
|
||||
printf("Fatal: Deltavox = %g is not positive.\n", model->B4SOIdeltavox);
|
||||
}
|
||||
|
||||
|
||||
/* v2.0 release */
|
||||
if (model->B4SOIk1w1 < 0.0)
|
||||
if (model->B4SOIk1w1 < 0.0)
|
||||
{ fprintf(fplog, "Warning: K1W1 = %g is negative.\n",
|
||||
model->B4SOIk1w1);
|
||||
printf("Warning: K1w1 = %g is negative.\n", model->B4SOIk1w1);
|
||||
|
|
@ -779,7 +797,7 @@ FILE *fplog;
|
|||
printf("Warning: Sii1 = %g is negative.\n", model->B4SOIsii1);
|
||||
}
|
||||
if (model->B4SOIsii2 < 0.0)
|
||||
{ fprintf(fplog, "Warning: SII2 = %g is negative.\n",
|
||||
{ fprintf(fplog, "Warning: SII2 = %g is negative.\n",
|
||||
model->B4SOIsii2);
|
||||
printf("Warning: Sii2 = %g is negative.\n", model->B4SOIsii1);
|
||||
}
|
||||
|
|
@ -843,7 +861,7 @@ FILE *fplog;
|
|||
model->B4SOIrbsh);
|
||||
printf("Warning: Rbsh = %g is negative.\n", model->B4SOIrbsh);
|
||||
}
|
||||
if (pParam->B4SOIntrecf < 0.0)
|
||||
/* if (pParam->B4SOIntrecf < 0.0)
|
||||
{ fprintf(fplog, "Warning: NTRECF = %g is negative.\n",
|
||||
pParam->B4SOIntrecf);
|
||||
printf("Warning: Ntrecf = %g is negative.\n", pParam->B4SOIntrecf);
|
||||
|
|
@ -852,7 +870,7 @@ FILE *fplog;
|
|||
{ fprintf(fplog, "Warning: NTRECR = %g is negative.\n",
|
||||
pParam->B4SOIntrecr);
|
||||
printf("Warning: Ntrecr = %g is negative.\n", pParam->B4SOIntrecr);
|
||||
}
|
||||
} v4.2 bugfix: QA Test uses negative temp co-efficients*/
|
||||
|
||||
/* v3.0 bug fix */
|
||||
/*
|
||||
|
|
@ -863,7 +881,7 @@ FILE *fplog;
|
|||
}
|
||||
*/
|
||||
|
||||
if (model->B4SOItcjswg < 0.0)
|
||||
/* if (model->B4SOItcjswg < 0.0)
|
||||
{ fprintf(fplog, "Warning: TCJSWGS = %g is negative.\n",
|
||||
model->B4SOItcjswg);
|
||||
printf("Warning: Tcjswg = %g is negative.\n", model->B4SOItcjswg);
|
||||
|
|
@ -882,7 +900,7 @@ FILE *fplog;
|
|||
{ fprintf(fplog, "Warning: TPBSWGD = %g is negative.\n",
|
||||
model->B4SOItpbswgd);
|
||||
printf("Warning: Tpbswgd = %g is negative.\n", model->B4SOItpbswgd);
|
||||
}
|
||||
} v4.2 bugfix: QA Test uses negative temp co-efficients*/
|
||||
if ((model->B4SOIacde < 0.1) || (model->B4SOIacde > 1.6))
|
||||
{ fprintf(fplog, "Warning: ACDE = %g is out of range.\n",
|
||||
model->B4SOIacde);
|
||||
|
|
@ -913,7 +931,7 @@ FILE *fplog;
|
|||
if (fabs(model->B4SOIcgidl) < 1e-9)
|
||||
{ fprintf(fplog, "Warning: CGIDL = %g is smaller than 1e-9.\n",
|
||||
model->B4SOIcgidl);
|
||||
printf("Warning: Cgidl = %g is smaller than 1e-9.\n",
|
||||
printf("Warning: Cgidl = %g is smaller than 1e-9.\n",
|
||||
model->B4SOIcgidl);
|
||||
}
|
||||
if (model->B4SOIegidl < 0.0)
|
||||
|
|
@ -935,7 +953,7 @@ FILE *fplog;
|
|||
if (fabs(model->B4SOIcgisl) < 1e-9)
|
||||
{ fprintf(fplog, "Warning: CGISL = %g is smaller than 1e-9.\n",
|
||||
model->B4SOIcgisl);
|
||||
printf("Warning: Cgisl = %g is smaller than 1e-9.\n",
|
||||
printf("Warning: Cgisl = %g is smaller than 1e-9.\n",
|
||||
model->B4SOIcgisl);
|
||||
}
|
||||
if (model->B4SOIegisl < 0.0)
|
||||
|
|
@ -949,22 +967,28 @@ FILE *fplog;
|
|||
model->B4SOIesatii);
|
||||
printf("Warning: Esatii = %g should be within (0, 1).\n", model->B4SOIesatii);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if (!model->B4SOIvgstcvModGiven)
|
||||
{ fprintf(fplog, "Warning: The default vgstcvMod is changed in v4.2 from '0' to '1'.\n");
|
||||
printf("Warning: The default vgstcvMod is changed in v4.2 from '0' to '1'.\n");
|
||||
}
|
||||
if (pParam->B4SOIxj > model->B4SOItsi)
|
||||
{ fprintf(fplog, "Warning: Xj = %g is thicker than Tsi = %g.\n",
|
||||
pParam->B4SOIxj, model->B4SOItsi);
|
||||
printf("Warning: Xj = %g is thicker than Tsi = %g.\n",
|
||||
pParam->B4SOIxj, model->B4SOItsi);
|
||||
pParam->B4SOIxj, model->B4SOItsi);
|
||||
printf("Warning: Xj = %g is thicker than Tsi = %g.\n",
|
||||
pParam->B4SOIxj, model->B4SOItsi);
|
||||
}
|
||||
|
||||
if (model->B4SOIcapMod < 2)
|
||||
{ fprintf(fplog, "Warning: capMod < 2 is not supported by BSIM3SOI.\n");
|
||||
printf("Warning: Warning: capMod < 2 is not supported by BSIM3SOI.\n");
|
||||
}
|
||||
if (model->B4SOIcapMod > 3)
|
||||
{ fprintf(fplog, "Warning: capMod > 3 is not supported by BSIMSOI4.2.\n");
|
||||
printf("Warning: Warning: capMod > 3 is not supported by BSIMSOI4.2.\n");
|
||||
}
|
||||
|
||||
}/* loop for the parameter check for warning messages */
|
||||
}/* loop for the parameter check for warning messages */
|
||||
fclose(fplog);
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soicvtest.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soidel.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soidest.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
Author: 2005 Hui Wan (based on Samuel Fung's b3soiext.h)
|
||||
Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
Authors: 2009- Tanvir Morshed, Ali Niknejad, Chenming Hu.
|
||||
File: b4soiext.h
|
||||
**********/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soigetic.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
SPICEdev B4SOIinfo = {
|
||||
{ "B4SOI",
|
||||
"Berkeley SOI MOSFET model version 4.0",
|
||||
"Berkeley SOI MOSFET model version 4.3",
|
||||
|
||||
&B4SOInSize,
|
||||
&B4SOInSize,
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soimask.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -1229,10 +1232,10 @@ IFvalue *value)
|
|||
value->iValue = model->B4SOIrgateMod;
|
||||
return(OK);
|
||||
case B4SOI_MOD_XRCRG1:
|
||||
value->iValue = model->B4SOIxrcrg1;
|
||||
value->rValue = model->B4SOIxrcrg1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_XRCRG2:
|
||||
value->iValue = model->B4SOIxrcrg2;
|
||||
value->rValue = model->B4SOIxrcrg2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_RSHG:
|
||||
value->rValue = model->B4SOIrshg;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soimdel.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soimpar.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -217,20 +220,21 @@ GENmodel *inMod)
|
|||
case B4SOI_MOD_NPEAK:
|
||||
mod->B4SOInpeak = value->rValue;
|
||||
mod->B4SOInpeakGiven = TRUE;
|
||||
if (mod->B4SOInpeak > 1.0e20)
|
||||
mod->B4SOInpeak *= 1.0e-6;
|
||||
/* Bug # 22 Jul09 Proper limiting conditions are specified in the B4SOIcheck.c file*/
|
||||
/* if (mod->B4SOInpeak > 1.0e20)
|
||||
mod->B4SOInpeak *= 1.0e-6; */
|
||||
break;
|
||||
case B4SOI_MOD_NSD:
|
||||
mod->B4SOInsd = value->rValue;
|
||||
mod->B4SOInsdGiven = TRUE;
|
||||
if (mod->B4SOInsd > 1.0e23)
|
||||
mod->B4SOInsd *= 1.0e-6;
|
||||
/* if (mod->B4SOInsd > 1.0e23)
|
||||
mod->B4SOInsd *= 1.0e-6; */ /* Bug # 22 Jul09 Proper limiting conditions are specified in the B4SOIcheck.c file*/
|
||||
break;
|
||||
case B4SOI_MOD_NGATE:
|
||||
mod->B4SOIngate = value->rValue;
|
||||
mod->B4SOIngateGiven = TRUE;
|
||||
if (mod->B4SOIngate > 1.0e23)
|
||||
mod->B4SOIngate *= 1.0e-6;
|
||||
/* if (mod->B4SOIngate > 1.0e23)
|
||||
mod->B4SOIngate *= 1.0e-6; */ /* Bug # 22 Jul09 Proper limiting conditions are specified in the B4SOIcheck.c file*/
|
||||
break;
|
||||
case B4SOI_MOD_GAMMA1:
|
||||
mod->B4SOIgamma1 = value->rValue;
|
||||
|
|
@ -428,6 +432,7 @@ case B4SOI_MOD_UD:
|
|||
case B4SOI_MOD_PUCS:
|
||||
mod->B4SOIpucs = value->rValue;
|
||||
mod->B4SOIpucsGiven = TRUE;
|
||||
break; /* Bug fix # 31 Jul09 */
|
||||
case B4SOI_MOD_UCSTE:
|
||||
mod->B4SOIucste = value->rValue;
|
||||
mod->B4SOIucsteGiven = TRUE;
|
||||
|
|
@ -659,8 +664,9 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIfgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_FDMOD :
|
||||
mod->B4SOIfdMod = value->rValue;
|
||||
mod->B4SOIfdModGiven = TRUE;
|
||||
/* mod->B4SOIfdMod = value->rValue; v4.2 */
|
||||
mod->B4SOIfdMod = value->iValue;
|
||||
mod->B4SOIfdModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VSCE :
|
||||
mod->B4SOIvsce = value->rValue;
|
||||
|
|
@ -1167,7 +1173,8 @@ case B4SOI_MOD_UD:
|
|||
case B4SOI_MOD_RBDB :
|
||||
mod->B4SOIrbdb = value->rValue;
|
||||
mod->B4SOIrbdbGiven = TRUE;
|
||||
case B4SOI_MOD_RBSB :
|
||||
break; /* Bug fix # 31 Jul 09 */
|
||||
case B4SOI_MOD_RBSB :
|
||||
mod->B4SOIrbsb = value->rValue;
|
||||
mod->B4SOIrbsbGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1402,7 +1409,8 @@ case B4SOI_MOD_UD:
|
|||
case B4SOI_MOD_LODK2 :
|
||||
mod->B4SOIlodk2 = value->rValue;
|
||||
mod->B4SOIlodk2Given = TRUE;
|
||||
case B4SOI_MOD_STETA0 :
|
||||
break; /* Bug fix # 31 Jul 09*/
|
||||
case B4SOI_MOD_STETA0 :
|
||||
mod->B4SOIsteta0 = value->rValue;
|
||||
mod->B4SOIsteta0Given = TRUE;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soinoi.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -60,7 +63,7 @@ double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi;
|
|||
|
||||
pParam = here->pParam;
|
||||
cd = fabs(here->B4SOIcd);
|
||||
esat = 2.0 * pParam->B4SOIvsattemp / here->B4SOIueff;
|
||||
esat = 2.0 * here->B4SOIvsattemp / here->B4SOIueff;
|
||||
/* v2.2.3 bug fix */
|
||||
if(model->B4SOIem<=0.0) DelClm = 0.0;
|
||||
else {
|
||||
|
|
@ -79,7 +82,6 @@ double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi;
|
|||
Nl = model->B4SOIcox * here->B4SOIVgsteff
|
||||
* (1.0 - here->B4SOIAbovVgst2Vtm * here->B4SOIVdseff) / CHARGE;
|
||||
|
||||
|
||||
T3 = model->B4SOIoxideTrapDensityA
|
||||
* log(MAX(((N0 + here->B4SOInstar) / (Nl + here->B4SOInstar)), N_MINLOG));
|
||||
T4 = model->B4SOIoxideTrapDensityB * (N0 - Nl);
|
||||
|
|
@ -122,6 +124,7 @@ double Ssi, Swi;
|
|||
double npart_theta, npart_beta, igsquare, esat;
|
||||
/* v3.2 end */
|
||||
double gspr, gdpr;
|
||||
double tempRatioSH, Vdseffovcd; /* v4.2 bugfix */
|
||||
|
||||
int i;
|
||||
|
||||
|
|
@ -218,8 +221,22 @@ int i;
|
|||
case N_CALC:
|
||||
switch (mode)
|
||||
{ case N_DENS:
|
||||
if (model->B4SOItnoiMod == 0) /* v4.0 */
|
||||
{ if (model->B4SOIrdsMod == 0)
|
||||
/*v4.2 implementing SH temp */
|
||||
if ((model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0))
|
||||
tempRatioSH = here->B4SOITempSH / ckt->CKTtemp;
|
||||
else
|
||||
tempRatioSH = 1.0;
|
||||
/*v4.2 implementing limit on Vdseffovcd*/
|
||||
if (here->B4SOIcd != 0)
|
||||
{
|
||||
Vdseffovcd = here->B4SOIVdseff / here->B4SOIcd;
|
||||
if (Vdseffovcd >= 1.0e9) Vdseffovcd = 1.0e9 ;
|
||||
}
|
||||
else
|
||||
Vdseffovcd = 1.0e9;
|
||||
/* if (model->B4SOItnoiMod == 0) */ /* v4.0 */ /* v4.2 bugfix: consider tnoiMod = 2*/
|
||||
if (model->B4SOItnoiMod != 1)
|
||||
{ if (model->B4SOIrdsMod == 0)
|
||||
{ gspr = here->B4SOIsourceConductance;
|
||||
gdpr = here->B4SOIdrainConductance;
|
||||
}
|
||||
|
|
@ -230,8 +247,8 @@ int i;
|
|||
}
|
||||
else
|
||||
{
|
||||
esat = 2.0 * pParam->B4SOIvsattemp / here->B4SOIueff;
|
||||
T5 = here->B4SOIVgsteff / esat
|
||||
esat = 2.0 * here->B4SOIvsattemp / here->B4SOIueff;
|
||||
T5 = here->B4SOIVgsteff / esat
|
||||
/ pParam->B4SOIleff;
|
||||
T5 *= T5;
|
||||
npart_beta = model->B4SOIrnoia * (1.0 +
|
||||
|
|
@ -241,6 +258,13 @@ int i;
|
|||
T5 * model->B4SOItnoib *
|
||||
pParam->B4SOIleff);
|
||||
|
||||
/* v4.2 bugfix: implement bugfix from bsim4.6.2 */
|
||||
if(npart_theta > 0.9)
|
||||
npart_theta = 0.9;
|
||||
if(npart_theta > 0.9 * npart_beta)
|
||||
npart_theta = 0.9 * npart_beta;
|
||||
|
||||
|
||||
if (model->B4SOIrdsMod == 0)
|
||||
{ gspr = here->B4SOIsourceConductance;
|
||||
gdpr = here->B4SOIdrainConductance;
|
||||
|
|
@ -263,27 +287,39 @@ int i;
|
|||
NevalSrc(&noizDens[B4SOIRDNOIZ],
|
||||
&lnNdens[B4SOIRDNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIdNodePrime, here->B4SOIdNode,
|
||||
gdpr * here->B4SOIm);
|
||||
gdpr * tempRatioSH * here->B4SOIm); /* v4.2 self-heating temp */
|
||||
|
||||
NevalSrc(&noizDens[B4SOIRSNOIZ],
|
||||
&lnNdens[B4SOIRSNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIsNodePrime, here->B4SOIsNode,
|
||||
gspr * here->B4SOIm);
|
||||
gspr * tempRatioSH * here->B4SOIm); /* v4.2 self-heating temp */
|
||||
|
||||
if ((here->B4SOIrgateMod == 1) ||
|
||||
(here->B4SOIrgateMod == 2))
|
||||
/* v4.2 bugfix: implement correct thermal noise model (bsim4.6.0)*/
|
||||
/* if ((here->B4SOIrgateMod == 1) ||
|
||||
(here->B4SOIrgateMod == 2)) */
|
||||
if (here->B4SOIrgateMod == 1)
|
||||
{ NevalSrc(&noizDens[B4SOIRGNOIZ],
|
||||
&lnNdens[B4SOIRGNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIgNode,
|
||||
here->B4SOIgNodeExt,
|
||||
here->B4SOIgrgeltd);
|
||||
here->B4SOIgrgeltd * tempRatioSH * here->B4SOIm); /* v4.2 self-heating temp */
|
||||
}
|
||||
else if (here->B4SOIrgateMod == 2) /*v4.2*/
|
||||
{
|
||||
T0 = 1.0 + here->B4SOIgrgeltd/here->B4SOIgcrg;
|
||||
T1 = T0 * T0;
|
||||
NevalSrc(&noizDens[B4SOIRGNOIZ],
|
||||
&lnNdens[B4SOIRGNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIgNode,
|
||||
here->B4SOIgNodeExt,
|
||||
here->B4SOIgrgeltd/T1 * tempRatioSH * here->B4SOIm); /*v4.2*/
|
||||
}
|
||||
else if (here->B4SOIrgateMod == 3)
|
||||
{ NevalSrc(&noizDens[B4SOIRGNOIZ],
|
||||
&lnNdens[B4SOIRGNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIgNodeMid,
|
||||
here->B4SOIgNodeExt,
|
||||
here->B4SOIgrgeltd);
|
||||
here->B4SOIgrgeltd * tempRatioSH * here->B4SOIm); /* v4.2 self-heating temp */
|
||||
}
|
||||
else
|
||||
{ noizDens[B4SOIRGNOIZ] = 0.0;
|
||||
|
|
@ -297,11 +333,11 @@ int i;
|
|||
NevalSrc(&noizDens[B4SOIRBSBNOIZ],
|
||||
&lnNdens[B4SOIRBSBNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIbNode, here->B4SOIsbNode,
|
||||
here->B4SOIgrbsb);
|
||||
here->B4SOIgrbsb * here->B4SOIm);
|
||||
NevalSrc(&noizDens[B4SOIRBDBNOIZ],
|
||||
&lnNdens[B4SOIRBDBNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIbNode, here->B4SOIdbNode,
|
||||
here->B4SOIgrbdb);
|
||||
here->B4SOIgrbdb * tempRatioSH * here->B4SOIm); /* v4.2 self-heating temp */
|
||||
}
|
||||
else
|
||||
{ noizDens[B4SOIRBSBNOIZ] = 0.0;
|
||||
|
|
@ -317,15 +353,15 @@ int i;
|
|||
NevalSrc(&noizDens[B4SOIRBODYNOIZ],
|
||||
&lnNdens[B4SOIRBODYNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIbNode, here->B4SOIpNode,
|
||||
1/ (here->B4SOIrbodyext +
|
||||
pParam->B4SOIrbody));
|
||||
tempRatioSH / (here->B4SOIrbodyext + /* v4.2 self-heating temp */
|
||||
pParam->B4SOIrbody) * here->B4SOIm);
|
||||
}
|
||||
else
|
||||
{ noizDens[B4SOIRBODYNOIZ] = 0.0;
|
||||
lnNdens[B4SOIRBODYNOIZ] =
|
||||
log(MAX(noizDens[B4SOIRBODYNOIZ], N_MINLOG));
|
||||
}
|
||||
|
||||
|
||||
switch( model->B4SOItnoiMod )
|
||||
{
|
||||
case 0:
|
||||
|
|
@ -341,7 +377,8 @@ int i;
|
|||
+ here->B4SOIueff*fabs
|
||||
(here->B4SOIqinv)
|
||||
* here->B4SOIrds)))
|
||||
* model->B4SOIntnoi );
|
||||
* tempRatioSH /* v4.2 self-heating temp */
|
||||
* model->B4SOIntnoi * here->B4SOIm);
|
||||
break;
|
||||
|
||||
/* v2.2.3 bug fix */
|
||||
|
|
@ -349,7 +386,7 @@ int i;
|
|||
T0 = here->B4SOIgm + here->B4SOIgmbs +
|
||||
here->B4SOIgds;
|
||||
T0 *= T0;
|
||||
esat = 2.0 * pParam->B4SOIvsattemp /
|
||||
esat = 2.0 * here->B4SOIvsattemp /
|
||||
here->B4SOIueff;
|
||||
T5 = here->B4SOIVgsteff / esat /
|
||||
pParam->B4SOIleff;
|
||||
|
|
@ -360,20 +397,20 @@ int i;
|
|||
npart_theta = model->B4SOIrnoib * (1.0 +
|
||||
T5 * model->B4SOItnoib *
|
||||
pParam->B4SOIleff);
|
||||
igsquare = npart_theta * npart_theta *
|
||||
T0 * here->B4SOIVdseff /
|
||||
here->B4SOIcd;
|
||||
/*igsquare = npart_theta * npart_theta *
|
||||
T0 * here->B4SOIVdseff / here->B4SOIcd; v4.2 implementing limit on Vdseffovcd*/
|
||||
igsquare = npart_theta * npart_theta * T0 * Vdseffovcd;
|
||||
T1 = npart_beta * (here->B4SOIgm
|
||||
+ here->B4SOIgmbs) + here->B4SOIgds;
|
||||
T2 = T1 * T1 * here->B4SOIVdseff /
|
||||
here->B4SOIcd;
|
||||
|
||||
/*T2 = T1 * T1 * here->B4SOIVdseff / here->B4SOIcd; v4.2 implementing limit on Vdseffovcd*/
|
||||
T2 = T1 * T1 * Vdseffovcd;
|
||||
NevalSrc(&noizDens[B4SOIIDNOIZ],
|
||||
&lnNdens[B4SOIIDNOIZ], ckt,
|
||||
THERMNOISE,
|
||||
here->B4SOIdNodePrime,
|
||||
here->B4SOIsNodePrime,
|
||||
(T2 - igsquare));
|
||||
/* (T2 - igsquare)); */
|
||||
(T2 - igsquare) * tempRatioSH * here->B4SOIm); /* v4.2 self-heating temp */
|
||||
break;
|
||||
|
||||
case 2:
|
||||
|
|
@ -383,9 +420,10 @@ int i;
|
|||
here->B4SOIdNodePrime,
|
||||
here->B4SOIsNodePrime,
|
||||
model->B4SOIntnoi *
|
||||
tempRatioSH * /* v4.2 self-heating temp */
|
||||
(2.0 / 3.0 * fabs(here->B4SOIgm
|
||||
+ here->B4SOIgds
|
||||
+ here->B4SOIgmbs)));
|
||||
+ here->B4SOIgmbs)) * here->B4SOIm);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -423,13 +461,23 @@ int i;
|
|||
{ vds = -vds;
|
||||
vgs = vgs + vds;
|
||||
}
|
||||
|
||||
Ssi = B4SOIEval1ovFNoise(vds, model, here,
|
||||
data->freq, ckt->CKTtemp);
|
||||
|
||||
T10 = model->B4SOIoxideTrapDensityA
|
||||
* CONSTboltz * ckt->CKTtemp;
|
||||
T11 = pParam->B4SOIweff * here->B4SOInf
|
||||
/*v4.2 implementing SH temp */
|
||||
if ((model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0))
|
||||
Ssi = B4SOIEval1ovFNoise(vds, model, here,
|
||||
data->freq, here->B4SOITempSH);
|
||||
else
|
||||
Ssi = B4SOIEval1ovFNoise(vds, model, here,
|
||||
data->freq, ckt->CKTtemp); /*v4.2 implementing SH temp */
|
||||
|
||||
/*v4.2 implementing SH temp */
|
||||
if ((model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0))
|
||||
T10 = model->B4SOIoxideTrapDensityA
|
||||
* CONSTboltz * here->B4SOITempSH;
|
||||
else
|
||||
T10 = model->B4SOIoxideTrapDensityA
|
||||
* CONSTboltz * ckt->CKTtemp; /*v4.2 implementing SH temp */
|
||||
|
||||
T11 = pParam->B4SOIweff * here->B4SOInf
|
||||
* pParam->B4SOIleff
|
||||
* pow(data->freq, model->B4SOIef)
|
||||
* 1.0e10 * here->B4SOInstar
|
||||
|
|
@ -476,12 +524,17 @@ int i;
|
|||
here->B4SOIsNodePrime, here->B4SOIbNode,
|
||||
model->B4SOInoif * here->B4SOIibs * here->B4SOIm);
|
||||
|
||||
NevalSrc(&noizDens[B4SOIFB_IBDNOIZ],
|
||||
/* NevalSrc(&noizDens[B4SOIFB_IBDNOIZ],
|
||||
&lnNdens[B4SOIFB_IBDNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIdNodePrime, here->B4SOIbNode,
|
||||
model->B4SOInoif * fabs(here->B4SOIibd) * here->B4SOIm);
|
||||
model->B4SOInoif * fabs(here->B4SOIibd)); */ /*v4.2*/
|
||||
|
||||
noizDens[B4SOITOTNOIZ] = noizDens[B4SOIRDNOIZ]
|
||||
NevalSrc(&noizDens[B4SOIFB_IBDNOIZ],
|
||||
&lnNdens[B4SOIFB_IBDNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIdNodePrime, here->B4SOIbNode,
|
||||
model->B4SOInoif * (here->B4SOIibd) * here->B4SOIm); /*v4.2 extra fabs()removed */
|
||||
|
||||
noizDens[B4SOITOTNOIZ] = noizDens[B4SOIRDNOIZ]
|
||||
+ noizDens[B4SOIRSNOIZ]
|
||||
+ noizDens[B4SOIRGNOIZ]
|
||||
+ noizDens[B4SOIIDNOIZ]
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soipar.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -208,15 +211,19 @@ IFvalue *select)
|
|||
case 5:
|
||||
here->B4SOIicVPS = *(value->v.vec.rVec+4);
|
||||
here->B4SOIicVPSGiven = TRUE;
|
||||
break; /* v4.2 bugfix */
|
||||
case 4:
|
||||
here->B4SOIicVES = *(value->v.vec.rVec+3);
|
||||
here->B4SOIicVESGiven = TRUE;
|
||||
break; /* v4.2 bugfix */
|
||||
case 3:
|
||||
here->B4SOIicVBS = *(value->v.vec.rVec+2);
|
||||
here->B4SOIicVBSGiven = TRUE;
|
||||
break; /* v4.2 bugfix */
|
||||
case 2:
|
||||
here->B4SOIicVGS = *(value->v.vec.rVec+1);
|
||||
here->B4SOIicVGSGiven = TRUE;
|
||||
break; /* v4.2 bugfix */
|
||||
case 1:
|
||||
here->B4SOIicVDS = *(value->v.vec.rVec);
|
||||
here->B4SOIicVDSGiven = TRUE;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soipzld.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -37,7 +40,7 @@ double m;
|
|||
for (; model != NULL; model = model->B4SOInextModel)
|
||||
{ for (here = model->B4SOIinstances; here!= NULL;
|
||||
here = here->B4SOInextInstance)
|
||||
{
|
||||
{
|
||||
if (here->B4SOImode >= 0)
|
||||
{
|
||||
|
||||
|
|
@ -45,9 +48,9 @@ double m;
|
|||
continue;
|
||||
|
||||
Gm = here->B4SOIgm;
|
||||
Gmbs = here->B4SOIgmbs;
|
||||
FwdSum = Gm + Gmbs;
|
||||
RevSum = 0.0;
|
||||
Gmbs = here->B4SOIgmbs;
|
||||
FwdSum = Gm + Gmbs;
|
||||
RevSum = 0.0;
|
||||
cggb = here->B4SOIcggb;
|
||||
cgsb = here->B4SOIcgsb;
|
||||
cgdb = here->B4SOIcgdb;
|
||||
|
|
@ -60,11 +63,11 @@ double m;
|
|||
cdsb = here->B4SOIcdsb;
|
||||
cddb = here->B4SOIcddb;
|
||||
}
|
||||
else
|
||||
{ Gm = -here->B4SOIgm;
|
||||
Gmbs = -here->B4SOIgmbs;
|
||||
FwdSum = 0.0;
|
||||
RevSum = -Gm - Gmbs;
|
||||
else
|
||||
{ Gm = -here->B4SOIgm;
|
||||
Gmbs = -here->B4SOIgmbs;
|
||||
FwdSum = 0.0;
|
||||
RevSum = -Gm - Gmbs;
|
||||
cggb = here->B4SOIcggb;
|
||||
cgsb = here->B4SOIcgdb;
|
||||
cgdb = here->B4SOIcgsb;
|
||||
|
|
@ -86,10 +89,10 @@ double m;
|
|||
capbd= here->B4SOIcapbd;
|
||||
capbs= here->B4SOIcapbs;
|
||||
#endif
|
||||
GSoverlapCap = here->B4SOIcgso;
|
||||
GDoverlapCap = here->B4SOIcgdo;
|
||||
GSoverlapCap = here->B4SOIcgso;
|
||||
GDoverlapCap = here->B4SOIcgdo;
|
||||
#ifdef BULKCODE
|
||||
GBoverlapCap = here->pParam->B4SOIcgbo;
|
||||
GBoverlapCap = here->pParam->B4SOIcgbo;
|
||||
#endif
|
||||
|
||||
xcdgb = (cdgb - GDoverlapCap);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soiset.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -61,11 +64,14 @@ double Vbs0t, Qsi;
|
|||
model->B4SOIparamChk = 0;
|
||||
if (!model->B4SOIcapModGiven)
|
||||
model->B4SOIcapMod = 2;
|
||||
if (!model->B4SOIiiiModGiven) /* Bug fix #7 Jun 09 'iiimod' with default value added */
|
||||
model->B4SOIiiiMod = 0;
|
||||
|
||||
if (!model->B4SOImtrlModGiven)
|
||||
model->B4SOImtrlMod = 0; /*4.1*/
|
||||
if (!model->B4SOIvgstcvModGiven)
|
||||
model->B4SOIvgstcvMod = 0;
|
||||
/*model->B4SOIvgstcvMod = 0; v4.2 Bugfix */
|
||||
model->B4SOIvgstcvMod = 1;
|
||||
if (!model->B4SOIgidlModGiven)
|
||||
model->B4SOIgidlMod = 0;
|
||||
if (!model->B4SOIeotGiven)
|
||||
|
|
@ -307,7 +313,8 @@ double Vbs0t, Qsi;
|
|||
if (!model->B4SOIwudGiven)
|
||||
model->B4SOIwud = 0.0;
|
||||
if (!model->B4SOIpudGiven)
|
||||
model->B4SOIpud1 = 0.0;
|
||||
/* model->B4SOIpud1 = 0.0; */ /*Bug fix # 33 Jul 09 */
|
||||
model->B4SOIpud = 0.0;
|
||||
if (!model->B4SOIud1Given)
|
||||
model->B4SOIud1 = 0.0;
|
||||
if (!model->B4SOIlud1Given)
|
||||
|
|
@ -422,7 +429,7 @@ double Vbs0t, Qsi;
|
|||
if (!model->B4SOIbgidlGiven)
|
||||
model->B4SOIbgidl = 2.3e9; /* v4.0 */
|
||||
if (!model->B4SOIcgidlGiven) /* v4.0 */
|
||||
model->B4SOIcgidl = 0.0;
|
||||
model->B4SOIcgidl = 0.5; /* v4.2 default value changed from 0 to 0.5 */
|
||||
if (!model->B4SOIrgidlGiven) /* v4.1 */
|
||||
model->B4SOIrgidl = 1.0;
|
||||
if (!model->B4SOIkgidlGiven) /* v4.1 */
|
||||
|
|
@ -2041,8 +2048,7 @@ double Vbs0t, Qsi;
|
|||
model->B4SOIvsce = 0.0;
|
||||
if (!model->B4SOIcdsbsGiven)
|
||||
model->B4SOIcdsbs = 0.0;
|
||||
|
||||
if (!model->B4SOIminvcvGiven) /* v4.1 for Vgsteffcv */
|
||||
if (!model->B4SOIminvcvGiven) /* v4.1 for Vgsteffcv */
|
||||
model->B4SOIminvcv = 0.0;
|
||||
if (!model->B4SOIlminvcvGiven) /* v4.1 for Vgsteffcv */
|
||||
model->B4SOIlminvcv = 0.0;
|
||||
|
|
@ -2051,7 +2057,8 @@ double Vbs0t, Qsi;
|
|||
if (!model->B4SOIpminvcvGiven) /* v4.1 for Vgsteffcv */
|
||||
model->B4SOIpminvcv = 0.0;
|
||||
if (!model->B4SOIvoffcvGiven)
|
||||
model->B4SOIvoffcv = -0.08;
|
||||
/*model->B4SOIvoffcv = -0.08; v4.2 */
|
||||
model->B4SOIvoffcv = 0.0;
|
||||
if (!model->B4SOIlvoffcvGiven)
|
||||
model->B4SOIlvoffcv = 0.0;
|
||||
if (!model->B4SOIwvoffcvGiven)
|
||||
|
|
@ -2103,10 +2110,8 @@ double Vbs0t, Qsi;
|
|||
here->B4SOIsourceSquares = 1;
|
||||
if (!here->B4SOIwGiven)
|
||||
here->B4SOIw = 5e-6;
|
||||
|
||||
if (!here->B4SOImGiven)
|
||||
here->B4SOIm = 1;
|
||||
|
||||
here->B4SOIm = 1;
|
||||
/* v2.0 release */
|
||||
if (!here->B4SOInbcGiven)
|
||||
here->B4SOInbc = 0;
|
||||
|
|
@ -2657,7 +2662,9 @@ if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\
|
|||
}
|
||||
|
||||
int
|
||||
B4SOIunsetup(GENmodel *inModel, CKTcircuit *ckt)
|
||||
B4SOIunsetup(
|
||||
GENmodel *inModel,
|
||||
CKTcircuit *ckt)
|
||||
{
|
||||
#ifndef HAS_BATCHSIM
|
||||
B4SOImodel *model;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
/*** B4SOI 12/31/2009 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -9,6 +10,8 @@
|
|||
* File: b4soitrunc.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
B4SOI Drain Gate Source Back-gate(substrate) Body Tx W L (body ommitted for FB)
|
||||
* Modified by Darsen Lu 03/11/2009
|
||||
|
||||
.include ./nmos4p1.mod
|
||||
.include ./pmos4p1.mod
|
||||
.include ./nmos4p3.mod
|
||||
.include ./pmos4p3.mod
|
||||
.option TEMP=27C noacct
|
||||
|
||||
Vpower VD 0 1.5
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
B4SOI Drain Gate Source Back-gate(substrate) Body Tx W L (body ommitted for FB)
|
||||
* Modified by Darsen Lu 03/11/2009
|
||||
|
||||
.include ./nmos4p1.mod
|
||||
.include ./pmos4p1.mod
|
||||
.include ./nmos4p3.mod
|
||||
.include ./pmos4p3.mod
|
||||
.option TEMP=27C noacct
|
||||
|
||||
Vpower VD 0 1.5
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
* BSIMSOI4.1 example modelcard
|
||||
* BSIMSOI4.3 example modelcard
|
||||
.Model N1 NMOS Level= 10
|
||||
|
||||
+MOBMOD = 2 SHMOD = 0 CAPMOD = 2
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
*BSIMSOI4.1 example modelcard
|
||||
*BSIMSOI4.3 example modelcard
|
||||
.Model P1 PMOS Level= 10
|
||||
|
||||
+MOBMOD = 2 SHMOD = 0 CAPMOD = 2
|
||||
|
|
@ -16,8 +16,8 @@ cout buf ss 1pF
|
|||
*.option itl1=1000 itl4=20 temp=85 gmin=1e-15 abstol=1e-12 reltol=1e-4
|
||||
.tran 0.2n 10n
|
||||
.print tran v(out25) v(out50)
|
||||
.include nmos4p1.mod
|
||||
.include pmos4p1.mod
|
||||
.include nmos4p3.mod
|
||||
.include pmos4p3.mod
|
||||
|
||||
|
||||
.subckt inv1 dd ss sub in out
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
.option ingold=1
|
||||
.option gmin=0
|
||||
|
||||
m1 d g s 0 p n1 w=1u l=0.1u soimod=0
|
||||
m1 d g s b p n1 w=1u l=0.1u soimod=0
|
||||
+NF=1
|
||||
+SA=0.31u SB=0.2u SD=0.1u
|
||||
|
||||
|
|
@ -13,9 +13,10 @@ vg g 0 1.2
|
|||
vd d 0 1.2
|
||||
vs s 0 0.0
|
||||
vp p 0 0.0
|
||||
vb b 0 0.0
|
||||
|
||||
.dc vd 0 1.2 0.01 vg 0.2 1.2 0.1
|
||||
.include ./nmos4p1.mod
|
||||
.print dc i(vd)
|
||||
.include ./nmos4p3.mod
|
||||
.print dc i(vd) i(vs)
|
||||
.end
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -14,7 +14,7 @@ vs s 0 0.0
|
|||
vp p 0 0.0
|
||||
|
||||
.dc vd 0 1.2 0.02 vg 0.4 1.2 0.1
|
||||
.include ./nmos4p1.mod
|
||||
.include ./nmos4p3.mod
|
||||
.print dc i(vd)
|
||||
.end
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ vs s 0 0.0
|
|||
vp p 0 0.0
|
||||
|
||||
.dc vg 0 1.2 0.02 vd 0.05 1.2 0.5
|
||||
.include ./nmos4p1.mod
|
||||
.include ./nmos4p3.mod
|
||||
.print dc i(vd)
|
||||
.end
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ vs s 0 0.0
|
|||
vp p 0 0.0
|
||||
|
||||
.dc vg 0 1.2 0.02 vd 0.05 1.2 0.5
|
||||
.include ./nmos4p1.mod
|
||||
.include ./nmos4p3.mod
|
||||
.print dc i(vd)
|
||||
.end
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ vs s 0 0.0
|
|||
vp p 0 0.0
|
||||
|
||||
.dc vd 0 -1.2 -0.02 vg -0.4 -1.2 -0.1
|
||||
.include ./pmos4p1.mod
|
||||
.include ./pmos4p3.mod
|
||||
.print dc i(vd)
|
||||
.end
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ vs s 0 0.0
|
|||
vp p 0 0.0
|
||||
|
||||
.dc vd 0 -1.2 -0.02 vg -0.4 -1.2 -0.1
|
||||
.include ./pmos4p1.mod
|
||||
.include ./pmos4p3.mod
|
||||
.print dc i(vd)
|
||||
.end
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ vs s 0 0.0
|
|||
vp p 0 0.0
|
||||
|
||||
.dc vg 0 -1.2 -0.02 vd -0.05 -1.2 -0.5
|
||||
.include ./pmos4p1.mod
|
||||
.include ./pmos4p3.mod
|
||||
.print dc i(vd)
|
||||
.end
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ vs s 0 0.0
|
|||
vp p 0 0.0
|
||||
|
||||
.dc vg 0 -1.2 -0.02 vd -0.05 -1.2 -0.5
|
||||
.include ./pmos4p1.mod
|
||||
.include ./pmos4p3.mod
|
||||
.print dc i(vd)
|
||||
.end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue