Update to bsimsoi v4.1
This commit is contained in:
parent
b73a5feed2
commit
06ae02fbde
|
|
@ -47,7 +47,7 @@ DYNAMIC_DEVICELIBS = \
|
|||
spicelib/devices/bsim4v4/libbsim4v4.la \
|
||||
spicelib/devices/bsim4v5/libbsim4v5.la \
|
||||
spicelib/devices/cap/libcap.la \
|
||||
spicelib/devices/bsim3soi/libbsim3soi.la \
|
||||
spicelib/devices/bsim3soi/libbsim4soi.la \
|
||||
spicelib/devices/bsim3soi_pd/libbsim3soipd.la \
|
||||
spicelib/devices/bsim3soi_fd/libbsim3soifd.la \
|
||||
spicelib/devices/bsim3soi_dd/libbsim3soidd.la \
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
noinst_LTLIBRARIES = libbsim3soi.la
|
||||
noinst_LTLIBRARIES = libbsim4soi.la
|
||||
|
||||
libbsim3soi_la_SOURCES = \
|
||||
libbsim4soi_la_SOURCES = \
|
||||
b4soi.c \
|
||||
b4soiacld.c \
|
||||
b4soiask.c \
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soi.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soi.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
|
||||
|
|
@ -46,6 +48,7 @@ OP( "ibd", B4SOI_IBD, IF_REAL, "Ibd"),
|
|||
OP( "ibs", B4SOI_IBS, IF_REAL, "Ibs"),
|
||||
OP( "isub", B4SOI_ISUB, IF_REAL, "Isub"),
|
||||
OP( "igidl", B4SOI_IGIDL, IF_REAL, "Igidl"),
|
||||
OP( "igisl", B4SOI_IGISL, IF_REAL, "Igisl"),
|
||||
OP( "igs", B4SOI_IGS, IF_REAL, "Igs"),
|
||||
OP( "igd", B4SOI_IGD, IF_REAL, "Igd"),
|
||||
OP( "igb", B4SOI_IGB, IF_REAL, "Igb"),
|
||||
|
|
@ -66,6 +69,11 @@ OP( "qg", B4SOI_QG, IF_REAL, "Qgate"),
|
|||
OP( "qb", B4SOI_QB, IF_REAL, "Qbulk"),
|
||||
OP( "qd", B4SOI_QD, IF_REAL, "Qdrain"),
|
||||
OP( "qs", B4SOI_QS, IF_REAL, "Qsource"),
|
||||
#ifdef B4SOI_DEBUG_OUT
|
||||
OP( "debug1", B4SOI_DEBUG1, IF_REAL, "DebugOut1"),
|
||||
OP( "debug2", B4SOI_DEBUG2, IF_REAL, "DebugOut2"),
|
||||
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"),
|
||||
|
|
@ -89,6 +97,7 @@ IOP( "nseg", B4SOI_NSEG, IF_REAL, "Number segments for width partitionin
|
|||
IOP( "pdbcp", B4SOI_PDBCP, IF_REAL, "Perimeter length for bc parasitics at drain side"),
|
||||
IOP( "psbcp", B4SOI_PSBCP, IF_REAL, "Perimeter length for bc parasitics at source side"),
|
||||
IOP( "agbcp", B4SOI_AGBCP, IF_REAL, "Gate to body overlap area for bc parasitics"),
|
||||
IOP( "agbcp2", B4SOI_AGBCP2, IF_REAL, "Parasitic Gate to body overlap area for bc parasitics"), /* v4.1 improvement on BC */
|
||||
IOP( "agbcpd", B4SOI_AGBCPD, IF_REAL, "Gate to body overlap area for bc parasitics in DC"),
|
||||
IOP( "aebcp", B4SOI_AEBCP, IF_REAL, "Substrate to body overlap area for bc prasitics"),
|
||||
IOP( "vbsusr", B4SOI_VBSUSR, IF_REAL, "Vbs specified by user"),
|
||||
|
|
@ -101,6 +110,28 @@ IOP( "rbodymod", B4SOI_RBODYMOD, IF_INTEGER, "Body R model selector"),/* v4.0 */
|
|||
};
|
||||
|
||||
IFparm B4SOImPTable[] = { /* model parameters */
|
||||
/*4.1*/
|
||||
IOP( "mtrlmod", B4SOI_MOD_MTRLMOD, IF_INTEGER, "parameter for non-silicon substrate or metal gate selector"),
|
||||
IOP( "vgstcvmod", B4SOI_MOD_VGSTCVMOD, IF_INTEGER, "Improved VgsteffCV selector"),
|
||||
IOP( "gidlmod", B4SOI_MOD_GIDLMOD, IF_INTEGER, "parameter for GIDL selector"),
|
||||
IOP( "iiimod", B4SOI_MOD_IIIMOD, IF_INTEGER, "parameter for III selector"),
|
||||
IOP( "eot", B4SOI_MOD_EOT, IF_REAL, "Effective SiO2 thickness"),
|
||||
IOP( "epsrox", B4SOI_MOD_EPSROX, IF_REAL, "Dielectric constant of the gate oxide relative to vacuum"),
|
||||
IOP( "epsrsub", B4SOI_MOD_EPSRSUB, IF_REAL, "Dielectric constant of substrate relative to vacuum"),
|
||||
IOP( "ni0sub", B4SOI_MOD_NI0SUB, IF_REAL, "Intrinsic carrier concentration of substrate at Tnom"),
|
||||
IOP( "bg0sub", B4SOI_MOD_BG0SUB, IF_REAL, "Band-gap of substrate at T=0K"),
|
||||
IOP( "tbgasub", B4SOI_MOD_TBGASUB, IF_REAL, "First parameter of band-gap change due to temperature"),
|
||||
IOP( "tbgbsub", B4SOI_MOD_TBGBSUB, IF_REAL, "Second parameter of band-gap change due to temperature"),
|
||||
IOP( "phig", B4SOI_MOD_PHIG, IF_REAL, "Work function of gate"),
|
||||
IOP( "easub",B4SOI_MOD_EASUB, IF_REAL, "Electron affinity of substrate"),
|
||||
|
||||
IOP( "leffeot", B4SOI_MOD_LEFFEOT, IF_REAL, "Effective length for extraction of EOT"),
|
||||
IOP( "weffeot", B4SOI_MOD_WEFFEOT, IF_REAL, "Effective width for extraction of EOT"),
|
||||
IOP( "vddeot", B4SOI_MOD_VDDEOT, IF_REAL, "Voltage for extraction of EOT"),
|
||||
IOP( "tempeot", B4SOI_MOD_TEMPEOT, IF_REAL, " Temperature for extraction of EOT"),
|
||||
IOP( "ados", B4SOI_MOD_ADOS, IF_REAL, "Charge centroid parameter"),
|
||||
IOP( "bdos", B4SOI_MOD_BDOS, IF_REAL, "Charge centroid parameter"),
|
||||
IOP( "epsrgate", B4SOI_MOD_EPSRGATE, IF_REAL, "Dielectric constant of gate relative to vacuum"),
|
||||
IOP( "capmod", B4SOI_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"),
|
||||
IOP( "mobmod", B4SOI_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"),
|
||||
/*IOP( "noimod", B4SOI_MOD_NOIMOD, IF_INTEGER, "Noise model selector"), v3.2 */
|
||||
|
|
@ -108,6 +139,7 @@ IOP( "paramchk", B4SOI_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selec
|
|||
IOP( "binunit", B4SOI_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"),
|
||||
IOP( "version", B4SOI_MOD_VERSION, IF_REAL, " parameter for model version"),
|
||||
IOP( "tox", B4SOI_MOD_TOX, IF_REAL, "Gate oxide thickness in meters"),
|
||||
IOP( "toxp", B4SOI_MOD_TOXP, IF_REAL, " Physical gate oxide thickness"),
|
||||
IOP( "toxm", B4SOI_MOD_TOXM, IF_REAL, "Gate oxide thickness used in extraction"), /* v3.2 */
|
||||
IOP( "dtoxcv", B4SOI_MOD_DTOXCV, IF_REAL, "Delta oxide thickness in meters in CapMod3"), /* v2.2.3 */
|
||||
|
||||
|
|
@ -126,6 +158,7 @@ IOP( "keta", B4SOI_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depl
|
|||
IOP( "nsub", B4SOI_MOD_NSUB, IF_REAL, "Substrate doping concentration with polarity"),
|
||||
IOP( "nch", B4SOI_MOD_NPEAK, IF_REAL, "Channel doping concentration"),
|
||||
IOP( "ngate", B4SOI_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"),
|
||||
IOP( "nsd", B4SOI_MOD_NSD, IF_REAL, "S/D doping concentration"),
|
||||
IOP( "gamma1", B4SOI_MOD_GAMMA1, IF_REAL, "Vth body coefficient"),
|
||||
IOP( "gamma2", B4SOI_MOD_GAMMA2, IF_REAL, "Vth body coefficient"),
|
||||
IOP( "vbx", B4SOI_MOD_VBX, IF_REAL, "Vth transition body Voltage"),
|
||||
|
|
@ -152,6 +185,7 @@ IOP( "drout", B4SOI_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance")
|
|||
IOP( "dsub", B4SOI_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"),
|
||||
IOP( "vth0", B4SOI_MOD_VTH0, IF_REAL,"Threshold voltage"),
|
||||
IOP( "vtho", B4SOI_MOD_VTH0, IF_REAL,"Threshold voltage"),
|
||||
IOP( "vfb", B4SOI_MOD_VFB, IF_REAL, "Flat Band Voltage"), /* v4.1 */
|
||||
IOP( "ua", B4SOI_MOD_UA, IF_REAL, "Linear gate dependence of mobility"),
|
||||
IOP( "ua1", B4SOI_MOD_UA1, IF_REAL, "Temperature coefficient of ua"),
|
||||
IOP( "ub", B4SOI_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"),
|
||||
|
|
@ -159,7 +193,12 @@ IOP( "ub1", B4SOI_MOD_UB1, IF_REAL, "Temperature coefficient of ub"),
|
|||
IOP( "uc", B4SOI_MOD_UC, IF_REAL, "Body-bias dependence of mobility"),
|
||||
IOP( "uc1", B4SOI_MOD_UC1, IF_REAL, "Temperature coefficient of uc"),
|
||||
IOP( "u0", B4SOI_MOD_U0, IF_REAL, "Low-field mobility at Tnom"),
|
||||
IOP( "eu", B4SOI_MOD_EU, IF_REAL, "Mobility exponent"),
|
||||
IOP( "ute", B4SOI_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"),
|
||||
IOP( "ucs", B4SOI_MOD_UCS, IF_REAL, "Mobility exponent"),
|
||||
IOP( "ucste", B4SOI_MOD_UCSTE, IF_REAL, " Temperature coefficient of UCS"),
|
||||
IOP( "ud", B4SOI_MOD_UD, IF_REAL, "Coulomb scattering factor of mobility"),
|
||||
IOP( "ud1", B4SOI_MOD_UD1, IF_REAL, "Temperature coefficient of ud"),
|
||||
IOP( "voff", B4SOI_MOD_VOFF, IF_REAL, "Threshold voltage offset"),
|
||||
IOP( "tnom", B4SOI_MOD_TNOM, IF_REAL, "Parameter measurement temperature"),
|
||||
IOP( "cgso", B4SOI_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"),
|
||||
|
|
@ -189,14 +228,27 @@ IOP( "pvag", B4SOI_MOD_PVAG, IF_REAL, "Gate dependence of output resistance para
|
|||
IOP( "shmod", B4SOI_MOD_SHMOD, IF_INTEGER, "Self heating mode selector"),
|
||||
IOP( "ddmod", B4SOI_MOD_DDMOD, IF_INTEGER, "Dynamic depletion mode selector"),
|
||||
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( "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"),
|
||||
IOP( "xj", B4SOI_MOD_XJ, IF_REAL, "Junction Depth"),
|
||||
IOP( "rth0", B4SOI_MOD_RTH0, IF_REAL, "Self-heating thermal resistance"),
|
||||
IOP( "cth0", B4SOI_MOD_CTH0, IF_REAL, "Self-heating thermal capacitance"),
|
||||
IOP( "egidl", B4SOI_MOD_EGIDL, IF_REAL, "GIDL first parameter"),
|
||||
IOP( "agidl", B4SOI_MOD_AGIDL, IF_REAL, "GIDL second parameter"),
|
||||
IOP( "bgidl", B4SOI_MOD_BGIDL, IF_REAL, "GIDL third parameter"),
|
||||
IOP( "cgidl", B4SOI_MOD_CGIDL, IF_REAL, "GIDL vb parameter"),
|
||||
IOP( "cgidl", B4SOI_MOD_CGIDL, IF_REAL, "GIDL vb parameter"),
|
||||
IOP( "rgidl", B4SOI_MOD_RGIDL, IF_REAL, "GIDL vg parameter"),
|
||||
IOP( "kgidl", B4SOI_MOD_KGIDL, IF_REAL, "GIDL vb parameter"),
|
||||
IOP( "fgidl", B4SOI_MOD_FGIDL, IF_REAL, "GIDL vb parameter"),
|
||||
|
||||
IOP( "egisl", B4SOI_MOD_EGISL, IF_REAL, "GISL first parameter"),
|
||||
IOP( "agisl", B4SOI_MOD_AGISL, IF_REAL, "GISL second parameter"),
|
||||
IOP( "bgisl", B4SOI_MOD_BGISL, IF_REAL, "GISL third parameter"),
|
||||
IOP( "cgisl", B4SOI_MOD_CGISL, IF_REAL, "GISL vb parameter"),
|
||||
IOP( "rgisl", B4SOI_MOD_RGISL, IF_REAL, "GISL vg parameter"),
|
||||
IOP( "kgisl", B4SOI_MOD_KGISL, IF_REAL, "GISL vb parameter"),
|
||||
IOP( "fgisl", B4SOI_MOD_FGISL, IF_REAL, "GISL vb parameter"),
|
||||
|
||||
IOP( "ndiode", B4SOI_MOD_NDIODES, IF_REAL,"Diode non-ideality factor"),/*v4.0*/
|
||||
IOP( "ndioded", B4SOI_MOD_NDIODED, IF_REAL,"Diode non-ideality factor"),/*v4.0*/
|
||||
IOP( "xbjt", B4SOI_MOD_XBJT, IF_REAL, "Temperature coefficient for Isbjt"),
|
||||
|
|
@ -305,6 +357,18 @@ IOP( "dvtp1", B4SOI_MOD_DVTP1, IF_REAL, "Second parameter for Vth shift due to
|
|||
IOP( "ldvtp1", B4SOI_MOD_LDVTP1, IF_REAL, "Length dependence of dvtp1"),
|
||||
IOP( "wdvtp1", B4SOI_MOD_WDVTP1, IF_REAL, "Width dependence of dvtp1"),
|
||||
IOP( "pdvtp1", B4SOI_MOD_PDVTP1, IF_REAL, "Cross-term dependence of dvtp1"),
|
||||
IOP( "dvtp2", B4SOI_MOD_DVTP2, IF_REAL, "Third parameter for Vth shift due to pocket"),
|
||||
IOP( "ldvtp2", B4SOI_MOD_LDVTP2, IF_REAL, "Length dependence of dvtp2"),
|
||||
IOP( "wdvtp2", B4SOI_MOD_WDVTP2, IF_REAL, "Width dependence of dvtp2"),
|
||||
IOP( "pdvtp2", B4SOI_MOD_PDVTP2, IF_REAL, "Cross-term dependence of dvtp2"),
|
||||
IOP( "dvtp3", B4SOI_MOD_DVTP3, IF_REAL, "Third parameter for Vth shift due to pocket"),
|
||||
IOP( "ldvtp3", B4SOI_MOD_LDVTP3, IF_REAL, "Length dependence of dvtp3"),
|
||||
IOP( "wdvtp3", B4SOI_MOD_WDVTP3, IF_REAL, "Width dependence of dvtp3"),
|
||||
IOP( "pdvtp3", B4SOI_MOD_PDVTP3, IF_REAL, "Cross-term dependence of dvtp3"),
|
||||
IOP( "dvtp4", B4SOI_MOD_DVTP4, IF_REAL, "Forth parameter for Vth shift due to pocket"),
|
||||
IOP( "ldvtp4", B4SOI_MOD_LDVTP4, IF_REAL, "Length dependence of dvtp4"),
|
||||
IOP( "wdvtp4", B4SOI_MOD_WDVTP4, IF_REAL, "Width dependence of dvtp4"),
|
||||
IOP( "pdvtp4", B4SOI_MOD_PDVTP4, IF_REAL, "Cross-term dependence of dvtp4"),
|
||||
IOP( "minv", B4SOI_MOD_MINV, IF_REAL, "For moderate invversion in Vgsteff"),
|
||||
IOP( "lminv", B4SOI_MOD_LMINV, IF_REAL, "Length dependence of minv"),
|
||||
IOP( "wminv", B4SOI_MOD_WMINV, IF_REAL, "width dependence of minv"),
|
||||
|
|
@ -347,6 +411,13 @@ IOP( "sii1", B4SOI_MOD_SII1, IF_REAL, "Second Vgs dependent parameter for impact
|
|||
IOP( "sii2", B4SOI_MOD_SII2, IF_REAL, "Third Vgs dependent parameter for impact ionizition current"),
|
||||
IOP( "siid", B4SOI_MOD_SIID, IF_REAL, "Vds dependent parameter of drain saturation voltage for impact ionizition current"),
|
||||
IOP( "fbjtii", B4SOI_MOD_FBJTII, IF_REAL, "Fraction of bipolar current affecting the impact ionization"),
|
||||
/*4.1*/
|
||||
IOP( "ebjtii", B4SOI_MOD_EBJTII, IF_REAL, "Impact ionization parameter for BJT part"),
|
||||
IOP( "cbjtii", B4SOI_MOD_CBJTII, IF_REAL, "Length scaling parameter for II BJT part"),
|
||||
IOP( "vbci", B4SOI_MOD_VBCI, IF_REAL, "Internal B-C built-in potential"),
|
||||
IOP( "abjtii", B4SOI_MOD_ABJTII, IF_REAL, "Exponent factor for avalanche current"),
|
||||
IOP( "mbjtii", B4SOI_MOD_MBJTII, IF_REAL, "Internal B-C grading coefficient"),
|
||||
IOP( "tvbci", B4SOI_MOD_TVBCI, IF_REAL, "Temperature coefficient for VBCI"),
|
||||
IOP( "esatii", B4SOI_MOD_ESATII, IF_REAL, "Saturation electric field for impact ionization"),
|
||||
IOP( "ntun", B4SOI_MOD_NTUNS, IF_REAL,"Reverse tunneling non-ideality factor"),
|
||||
IOP( "ntund", B4SOI_MOD_NTUND, IF_REAL,"Reverse tunneling non-ideality factor"),
|
||||
|
|
@ -418,6 +489,9 @@ IOP( "vecb", B4SOI_MOD_VECB, IF_REAL, "Vaux parameter for conduction-band electr
|
|||
IOP( "alphagb2", B4SOI_MOD_ALPHAGB2, IF_REAL, "First Vox dependent parameter for gate current in accumulation"),
|
||||
IOP( "betagb2", B4SOI_MOD_BETAGB2, IF_REAL, "Second Vox dependent parameter for gate current in accumulation"),
|
||||
IOP( "vgb2", B4SOI_MOD_VGB2, IF_REAL, "Third Vox dependent parameter for gate current in accumulation"),
|
||||
IOP( "aigbcp2", B4SOI_MOD_AIGBCP2, IF_REAL, "First Vgp dependent parameter for gate current in accumulation in AGBCP2 region"),
|
||||
IOP( "bigbcp2", B4SOI_MOD_BIGBCP2, IF_REAL, "Second Vgp dependent parameter for gate current in accumulation in AGBCP2 region"),
|
||||
IOP( "cigbcp2", B4SOI_MOD_CIGBCP2, IF_REAL, "Third Vgp dependent parameter for gate current in accumulation in AGBCP2 region"),
|
||||
IOP( "voxh", B4SOI_MOD_VOXH, IF_REAL, "the limit of Vox in gate current calculation"),
|
||||
IOP( "deltavox", B4SOI_MOD_DELTAVOX, IF_REAL, "the smoothing parameter in the Vox smoothing function"),
|
||||
|
||||
|
|
@ -464,6 +538,18 @@ IOP( "rbodymod", B4SOI_MOD_RBODYMOD, IF_INTEGER, "Body R model selector"),
|
|||
/* 4.0 */
|
||||
IOP( "rdsmod", B4SOI_MOD_RDSMOD, IF_INTEGER, "Bias-dependent S/D resistance model selector"), /* v4.0 */
|
||||
|
||||
/* v4.1 */
|
||||
IOP( "fdmod", B4SOI_MOD_FDMOD, IF_INTEGER, "Improved dVbi model selector"),
|
||||
IOP( "vsce", B4SOI_MOD_VSCE, IF_REAL, "SCE parameter for improved dVbi model"),
|
||||
IOP( "cdsbs", B4SOI_MOD_CDSBS, IF_REAL, "coupling from Vd to Vbs for improved dVbi model"),
|
||||
IOP( "minvcv", B4SOI_MOD_MINVCV, IF_REAL, "For moderate invversion in VgsteffCV"),
|
||||
IOP( "lminvcv", B4SOI_MOD_LMINVCV, IF_REAL, "Length dependence of minvcv"),
|
||||
IOP( "wminvcv", B4SOI_MOD_WMINVCV, IF_REAL, "width dependence of minvcv"),
|
||||
IOP( "pminvcv", B4SOI_MOD_PMINVCV, IF_REAL, "Cross-term dependence of minvcv"),
|
||||
IOP( "voffcv", B4SOI_MOD_VOFFCV, IF_REAL, "CV Threshold voltage offset"),
|
||||
IOP( "lvoffcv", B4SOI_MOD_LVOFFCV, IF_REAL, "Length dependence of voffcv"),
|
||||
IOP( "wvoffcv", B4SOI_MOD_WVOFFCV, IF_REAL, "Width dependence of voffcv"),
|
||||
IOP( "pvoffcv", B4SOI_MOD_PVOFFCV, IF_REAL, "Cross-term dependence of voffcv"),
|
||||
/* Added for binning - START */
|
||||
/* Length Dependence */
|
||||
/* v3.1 */
|
||||
|
|
@ -472,6 +558,9 @@ IOP( "lalphagb1", B4SOI_MOD_LALPHAGB1, IF_REAL, "Length dependence of alphagb1")
|
|||
IOP( "lbetagb1", B4SOI_MOD_LBETAGB1, IF_REAL, "Length dependence of betagb1"),
|
||||
IOP( "lalphagb2", B4SOI_MOD_LALPHAGB2, IF_REAL, "Length dependence of alphagb2"),
|
||||
IOP( "lbetagb2", B4SOI_MOD_LBETAGB2, IF_REAL, "Length dependence of betagb2"),
|
||||
IOP( "laigbcp2", B4SOI_MOD_LAIGBCP2, IF_REAL, "Length dependence of aigbcp2"),
|
||||
IOP( "lbigbcp2", B4SOI_MOD_LBIGBCP2, IF_REAL, "Length dependence of bigbcp2"),
|
||||
IOP( "lcigbcp2", B4SOI_MOD_LCIGBCP2, IF_REAL, "Length dependence of cigbcp2"),
|
||||
IOP( "lcgsl", B4SOI_MOD_LCGSL, IF_REAL, "Length dependence of cgsl"),
|
||||
IOP( "lcgdl", B4SOI_MOD_LCGDL, IF_REAL, "Length dependence of cgdl"),
|
||||
IOP( "lckappa", B4SOI_MOD_LCKAPPA, IF_REAL, "Length dependence of ckappa"),
|
||||
|
|
@ -509,7 +598,9 @@ IOP( "lpoxedge", B4SOI_MOD_LPOXEDGE, IF_REAL, "Length dependence for poxedge"),
|
|||
IOP( "lnch", B4SOI_MOD_LNPEAK, IF_REAL, "Length dependence of nch"),
|
||||
IOP( "lnsub", B4SOI_MOD_LNSUB, IF_REAL, "Length dependence of nsub"),
|
||||
IOP( "lngate", B4SOI_MOD_LNGATE, IF_REAL, "Length dependence of ngate"),
|
||||
IOP( "lnsd", B4SOI_MOD_LNSD, IF_REAL, "Length dependence of nsd"),
|
||||
IOP( "lvth0", B4SOI_MOD_LVTH0, IF_REAL,"Length dependence of vto"),
|
||||
IOP( "lvfb", B4SOI_MOD_LVFB, IF_REAL, "Length dependence of vfb"), /* v4.1 */
|
||||
IOP( "lk1", B4SOI_MOD_LK1, IF_REAL, "Length dependence of k1"),
|
||||
IOP( "lk1w1", B4SOI_MOD_LK1W1, IF_REAL, "Length dependence of k1w1"),
|
||||
IOP( "lk1w2", B4SOI_MOD_LK1W2, IF_REAL, "Length dependence of k1w2"),
|
||||
|
|
@ -527,9 +618,12 @@ IOP( "ldvt0w", B4SOI_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"),
|
|||
IOP( "ldvt1w", B4SOI_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"),
|
||||
IOP( "ldvt2w", B4SOI_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"),
|
||||
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( "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"),
|
||||
IOP( "la0", B4SOI_MOD_LA0, IF_REAL, "Length dependence of a0"),
|
||||
IOP( "lags", B4SOI_MOD_LAGS, IF_REAL, "Length dependence of ags"),
|
||||
|
|
@ -579,6 +673,16 @@ IOP( "lagidl", B4SOI_MOD_LAGIDL, IF_REAL, "Length dependence of agidl"),
|
|||
IOP( "lbgidl", B4SOI_MOD_LBGIDL, IF_REAL, "Length dependence of bgidl"),
|
||||
IOP( "lcgidl", B4SOI_MOD_LCGIDL, IF_REAL, "Length dependence of cgidl"),
|
||||
IOP( "legidl", B4SOI_MOD_LEGIDL, IF_REAL, "Length dependence of egidl"),
|
||||
IOP( "lrgidl", B4SOI_MOD_LRGIDL, IF_REAL, "Length dependence of rgidl"),
|
||||
IOP( "lkgidl", B4SOI_MOD_LKGIDL, IF_REAL, "Length dependence of kgidl"),
|
||||
IOP( "lfgidl", B4SOI_MOD_LFGIDL, IF_REAL, "Length dependence of fgidl"),
|
||||
IOP( "lagisl", B4SOI_MOD_LAGISL, IF_REAL, "Length dependence of agisl"),
|
||||
IOP( "lbgisl", B4SOI_MOD_LBGISL, IF_REAL, "Length dependence of bgisl"),
|
||||
IOP( "lcgisl", B4SOI_MOD_LCGISL, IF_REAL, "Length dependence of cgisl"),
|
||||
IOP( "legisl", B4SOI_MOD_LEGISL, IF_REAL, "Length dependence of egisl"),
|
||||
IOP( "lrgisl", B4SOI_MOD_LRGISL, IF_REAL, "Length dependence of rgisl"),
|
||||
IOP( "lkgisl", B4SOI_MOD_LKGISL, IF_REAL, "Length dependence of kgisl"),
|
||||
IOP( "lfgisl", B4SOI_MOD_LFGISL, IF_REAL, "Length dependence of fgisl"),
|
||||
IOP( "lntun", B4SOI_MOD_LNTUNS, IF_REAL, "Length dependence of ntun"),
|
||||
IOP( "lntund", B4SOI_MOD_LNTUND, IF_REAL, "Length dependence of ntund"),
|
||||
IOP( "lndiode", B4SOI_MOD_LNDIODES, IF_REAL, "Length dependence of ndiode"),
|
||||
|
|
@ -624,6 +728,9 @@ IOP( "walphagb1", B4SOI_MOD_WALPHAGB1, IF_REAL, "Width dependence of alphagb1"),
|
|||
IOP( "wbetagb1", B4SOI_MOD_WBETAGB1, IF_REAL, "Width dependence of betagb1"),
|
||||
IOP( "walphagb2", B4SOI_MOD_WALPHAGB2, IF_REAL, "Width dependence of alphagb2"),
|
||||
IOP( "wbetagb2", B4SOI_MOD_WBETAGB2, IF_REAL, "Width dependence of betagb2"),
|
||||
IOP( "waigbcp2", B4SOI_MOD_WAIGBCP2, IF_REAL, "Width dependence of aigbcp2"),
|
||||
IOP( "wbigbcp2", B4SOI_MOD_WBIGBCP2, IF_REAL, "Width dependence of bigbcp2"),
|
||||
IOP( "wcigbcp2", B4SOI_MOD_WCIGBCP2, IF_REAL, "Width dependence of cigbcp2"),
|
||||
IOP( "wcgsl", B4SOI_MOD_WCGSL, IF_REAL, "Width dependence of cgsl"),
|
||||
IOP( "wcgdl", B4SOI_MOD_WCGDL, IF_REAL, "Width dependence of cgdl"),
|
||||
IOP( "wckappa", B4SOI_MOD_WCKAPPA, IF_REAL, "Width dependence of ckappa"),
|
||||
|
|
@ -661,7 +768,9 @@ 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"),
|
||||
IOP( "wnsd", B4SOI_MOD_WNSD, IF_REAL, "Width dependence of nsd"),
|
||||
IOP( "wvth0", B4SOI_MOD_WVTH0, IF_REAL,"Width dependence of vto"),
|
||||
IOP( "wvfb", B4SOI_MOD_WVFB, IF_REAL, "Width dependence of vfb"), /* v4.1 */
|
||||
IOP( "wk1", B4SOI_MOD_WK1, IF_REAL, "Width dependence of k1"),
|
||||
IOP( "wk1w1", B4SOI_MOD_WK1W1, IF_REAL, "Width dependence of k1w1"),
|
||||
IOP( "wk1w2", B4SOI_MOD_WK1W2, IF_REAL, "Width dependence of k1w2"),
|
||||
|
|
@ -679,9 +788,12 @@ IOP( "wdvt0w", B4SOI_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"),
|
|||
IOP( "wdvt1w", B4SOI_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"),
|
||||
IOP( "wdvt2w", B4SOI_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"),
|
||||
IOP( "wu0", B4SOI_MOD_WU0, IF_REAL, "Width dependence of u0"),
|
||||
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( "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"),
|
||||
IOP( "wa0", B4SOI_MOD_WA0, IF_REAL, "Width dependence of a0"),
|
||||
IOP( "wags", B4SOI_MOD_WAGS, IF_REAL, "Width dependence of ags"),
|
||||
|
|
@ -731,6 +843,16 @@ IOP( "wagidl", B4SOI_MOD_WAGIDL, IF_REAL, "Width dependence of agidl"),
|
|||
IOP( "wbgidl", B4SOI_MOD_WBGIDL, IF_REAL, "Width dependence of bgidl"),
|
||||
IOP( "wcgidl", B4SOI_MOD_WCGIDL, IF_REAL, "Width dependence of cgidl"),
|
||||
IOP( "wegidl", B4SOI_MOD_WEGIDL, IF_REAL, "Width dependence of egidl"),
|
||||
IOP( "wrgidl", B4SOI_MOD_WRGIDL, IF_REAL, "Width dependence of rgidl"),
|
||||
IOP( "wkgidl", B4SOI_MOD_WKGIDL, IF_REAL, "Width dependence of kgidl"),
|
||||
IOP( "wfgidl", B4SOI_MOD_WFGIDL, IF_REAL, "Width dependence of fgidl"),
|
||||
IOP( "wagisl", B4SOI_MOD_WAGISL, IF_REAL, "Width dependence of agisl"),
|
||||
IOP( "wbgisl", B4SOI_MOD_WBGISL, IF_REAL, "Width dependence of bgisl"),
|
||||
IOP( "wcgisl", B4SOI_MOD_WCGISL, IF_REAL, "Width dependence of cgisl"),
|
||||
IOP( "wegisl", B4SOI_MOD_WEGISL, IF_REAL, "Width dependence of egisl"),
|
||||
IOP( "wrgisl", B4SOI_MOD_WRGISL, IF_REAL, "Width dependence of rgisl"),
|
||||
IOP( "wkgisl", B4SOI_MOD_WKGISL, IF_REAL, "Width dependence of kgisl"),
|
||||
IOP( "wfgisl", B4SOI_MOD_WFGISL, IF_REAL, "Width dependence of fgisl"),
|
||||
IOP( "wntun", B4SOI_MOD_WNTUNS, IF_REAL, "Width dependence of ntun"),
|
||||
IOP( "wntund", B4SOI_MOD_WNTUND, IF_REAL, "Width dependence of ntund"),
|
||||
IOP( "wndiode", B4SOI_MOD_WNDIODES, IF_REAL, "Width dependence of ndiode"),
|
||||
|
|
@ -777,6 +899,9 @@ IOP( "palphagb1", B4SOI_MOD_PALPHAGB1, IF_REAL, "Cross-term dependence of alphag
|
|||
IOP( "pbetagb1", B4SOI_MOD_PBETAGB1, IF_REAL, "Cross-term dependence of betagb1"),
|
||||
IOP( "palphagb2", B4SOI_MOD_PALPHAGB2, IF_REAL, "Cross-term dependence of alphagb2"),
|
||||
IOP( "pbetagb2", B4SOI_MOD_PBETAGB2, IF_REAL, "Cross-term dependence of betagb2"),
|
||||
IOP( "paigbcp2", B4SOI_MOD_PAIGBCP2, IF_REAL, "Cross-term dependence of aigbcp2"),
|
||||
IOP( "pbigbcp2", B4SOI_MOD_PBIGBCP2, IF_REAL, "Cross-term dependence of bigbcp2"),
|
||||
IOP( "pcigbcp2", B4SOI_MOD_PCIGBCP2, IF_REAL, "Cross-term dependence of cigbcp2"),
|
||||
IOP( "pcgsl", B4SOI_MOD_PCGSL, IF_REAL, "Cross-term dependence of cgsl"),
|
||||
IOP( "pcgdl", B4SOI_MOD_PCGDL, IF_REAL, "Cross-term dependence of cgdl"),
|
||||
IOP( "pckappa", B4SOI_MOD_PCKAPPA, IF_REAL, "Cross-term dependence of ckappa"),
|
||||
|
|
@ -813,8 +938,10 @@ IOP( "ppoxedge", B4SOI_MOD_PPOXEDGE, IF_REAL, "Cross-term dependence for poxedge
|
|||
|
||||
IOP( "pnch", B4SOI_MOD_PNPEAK, IF_REAL, "Cross-term dependence of nch"),
|
||||
IOP( "pnsub", B4SOI_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"),
|
||||
IOP( "pnsd", B4SOI_MOD_PNSD, IF_REAL, "Cross-term dependence of nsd"),
|
||||
IOP( "pngate", B4SOI_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"),
|
||||
IOP( "pvth0", B4SOI_MOD_PVTH0, IF_REAL,"Cross-term dependence of vto"),
|
||||
IOP( "pvfb", B4SOI_MOD_PVFB, IF_REAL, "Cross-term dependence of vfb"), /* v4.1 */
|
||||
IOP( "pk1", B4SOI_MOD_PK1, IF_REAL, "Cross-term dependence of k1"),
|
||||
IOP( "pk1w1", B4SOI_MOD_PK1W1, IF_REAL, "Cross-term dependence of k1w1"),
|
||||
IOP( "pk1w2", B4SOI_MOD_PK1W2, IF_REAL, "Cross-term dependence of k1w2"),
|
||||
|
|
@ -832,9 +959,12 @@ IOP( "pdvt0w", B4SOI_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"),
|
|||
IOP( "pdvt1w", B4SOI_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"),
|
||||
IOP( "pdvt2w", B4SOI_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"),
|
||||
IOP( "pu0", B4SOI_MOD_PU0, IF_REAL, "Cross-term dependence of u0"),
|
||||
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( "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"),
|
||||
IOP( "pa0", B4SOI_MOD_PA0, IF_REAL, "Cross-term dependence of a0"),
|
||||
IOP( "pags", B4SOI_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"),
|
||||
|
|
@ -884,6 +1014,16 @@ IOP( "pagidl", B4SOI_MOD_PAGIDL, IF_REAL, "Cross-term dependence of agidl"),
|
|||
IOP( "pbgidl", B4SOI_MOD_PBGIDL, IF_REAL, "Cross-term dependence of bgidl"),
|
||||
IOP( "pcgidl", B4SOI_MOD_PCGIDL, IF_REAL, "Cross-term dependence of cgidl"),
|
||||
IOP( "pegidl", B4SOI_MOD_PEGIDL, IF_REAL, "Cross-term dependence of egidl"),
|
||||
IOP( "prgidl", B4SOI_MOD_PRGIDL, IF_REAL, "Cross-term dependence of rgidl"),
|
||||
IOP( "pkgidl", B4SOI_MOD_PKGIDL, IF_REAL, "Cross-term dependence of kgidl"),
|
||||
IOP( "pfgidl", B4SOI_MOD_PFGIDL, IF_REAL, "Cross-term dependence of fgidl"),
|
||||
IOP( "pagisl", B4SOI_MOD_PAGISL, IF_REAL, "Cross-term dependence of agisl"),
|
||||
IOP( "pbgisl", B4SOI_MOD_PBGISL, IF_REAL, "Cross-term dependence of bgisl"),
|
||||
IOP( "pcgisl", B4SOI_MOD_PCGISL, IF_REAL, "Cross-term dependence of cgisl"),
|
||||
IOP( "pegisl", B4SOI_MOD_PEGISL, IF_REAL, "Cross-term dependence of egisl"),
|
||||
IOP( "prgisl", B4SOI_MOD_PRGISL, IF_REAL, "Cross-term dependence of rgisl"),
|
||||
IOP( "pkgisl", B4SOI_MOD_PKGISL, IF_REAL, "Cross-term dependence of kgisl"),
|
||||
IOP( "pfgisl", B4SOI_MOD_PFGISL, IF_REAL, "Cross-term dependence of fgisl"),
|
||||
IOP( "pntun", B4SOI_MOD_PNTUNS, IF_REAL, "Cross-term dependence of ntun"),
|
||||
IOP( "pntund", B4SOI_MOD_PNTUND, IF_REAL, "Cross-term dependence of ntund"),
|
||||
IOP( "pndiode", B4SOI_MOD_PNDIODES, IF_REAL,"Cross-term dependence of ndiode"),
|
||||
|
|
@ -943,7 +1083,7 @@ char *B4SOInames[] = {
|
|||
"Gate",
|
||||
"Source",
|
||||
"Backgate",
|
||||
"",
|
||||
"Body_ext",
|
||||
"Body",
|
||||
"Temp",
|
||||
"Charge",
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soiacld.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soiacld.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -52,6 +54,7 @@ double gcrgd, gcrgg, gcrgs, gcrgb, gcrg;
|
|||
double xcgmgmb, xcgmdb, xcgmsb, xcgmeb, xcdgmb, xcsgmb, xcegmb;
|
||||
double geltd;
|
||||
double gigg, gigd, gigs, gigb, gige, gigT;
|
||||
double gigpg=0.0, gigpp=0.0;
|
||||
|
||||
/* v3.1.1 bug fix */
|
||||
double gIstotg, gIstotd, gIstotb, gIstots;
|
||||
|
|
@ -118,6 +121,10 @@ double m;
|
|||
gigd = here->B4SOIgigd;
|
||||
gigT = model->B4SOItype * here->B4SOIgigT;
|
||||
|
||||
/* v4.1 */
|
||||
gigpg = here->B4SOIgigpg;
|
||||
gigpp = here->B4SOIgigpp;
|
||||
|
||||
gbbg = -here->B4SOIgbgs;
|
||||
gbbdp = -here->B4SOIgbds;
|
||||
gbbb = -here->B4SOIgbbs;
|
||||
|
|
@ -753,6 +760,20 @@ double m;
|
|||
(*(here->B4SOIPpPtr) += m * gppp);
|
||||
}
|
||||
|
||||
/* v4.1 Ig_agbcp2 stamping */
|
||||
(*(here->B4SOIGgPtr) += gigpg);
|
||||
if (here->B4SOIbodyMod == 1) {
|
||||
(*(here->B4SOIPpPtr) -= m * gigpp);
|
||||
(*(here->B4SOIPgPtr) -= m * gigpg);
|
||||
(*(here->B4SOIGpPtr) += m * gigpp);
|
||||
}
|
||||
else if(here->B4SOIbodyMod == 2)
|
||||
{
|
||||
(*(here->B4SOIBbPtr) -= m * gigpp);
|
||||
(*(here->B4SOIBgPtr) -= m * gigpg);
|
||||
(*(here->B4SOIGbPtr) += m * gigpp);
|
||||
}
|
||||
|
||||
|
||||
/* v4.0 */
|
||||
if (here->B4SOIrbodyMod)
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soiask.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soiask.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -18,8 +20,7 @@
|
|||
#include "suffix.h"
|
||||
|
||||
int
|
||||
B4SOIask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value,
|
||||
IFvalue *select)
|
||||
B4SOIask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select)
|
||||
{
|
||||
B4SOIinstance *here = (B4SOIinstance*)inst;
|
||||
|
||||
|
|
@ -30,7 +31,9 @@ B4SOIinstance *here = (B4SOIinstance*)inst;
|
|||
case B4SOI_W:
|
||||
value->rValue = here->B4SOIw;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_M:
|
||||
value->rValue = here->B4SOIm;
|
||||
return(OK);
|
||||
case B4SOI_AS:
|
||||
value->rValue = here->B4SOIsourceArea;
|
||||
return(OK);
|
||||
|
|
@ -172,6 +175,9 @@ B4SOIinstance *here = (B4SOIinstance*)inst;
|
|||
case B4SOI_AGBCP:
|
||||
value->rValue = here->B4SOIagbcp;
|
||||
return(OK);
|
||||
case B4SOI_AGBCP2:
|
||||
value->rValue = here->B4SOIagbcp2;
|
||||
return(OK); /* v4.1 for BC improvement */
|
||||
case B4SOI_AGBCPD: /* v4.0 */
|
||||
value->rValue = here->B4SOIagbcpd;
|
||||
return(OK);
|
||||
|
|
@ -269,6 +275,9 @@ B4SOIinstance *here = (B4SOIinstance*)inst;
|
|||
case B4SOI_IGIDL:
|
||||
value->rValue = here->B4SOIigidl;
|
||||
return(OK);
|
||||
case B4SOI_IGISL:
|
||||
value->rValue = here->B4SOIigisl;
|
||||
return(OK);
|
||||
case B4SOI_IGS:
|
||||
value->rValue = here->B4SOIIgs;
|
||||
return(OK);
|
||||
|
|
@ -329,6 +338,17 @@ B4SOIinstance *here = (B4SOIinstance*)inst;
|
|||
case B4SOI_QBD:
|
||||
value->rValue = *(ckt->CKTstate0 + here->B4SOIqbd);
|
||||
return(OK);
|
||||
#ifdef B4SOI_DEBUG_OUT
|
||||
case B4SOI_DEBUG1:
|
||||
value->rValue = here->B4SOIdebug1;
|
||||
return(OK);
|
||||
case B4SOI_DEBUG2:
|
||||
value->rValue = here->B4SOIdebug2;
|
||||
return(OK);
|
||||
case B4SOI_DEBUG3:
|
||||
value->rValue = here->B4SOIdebug3;
|
||||
return(OK);
|
||||
#endif
|
||||
default:
|
||||
return(E_BADPARM);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soicheck.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soicheck.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -91,7 +93,30 @@ FILE *fplog;
|
|||
printf("Fatal: Tox = %g is not positive.\n", model->B4SOItox);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
|
||||
if (model->B4SOIleffeot <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: leffeot = %g is not positive.\n",
|
||||
model->B4SOIleffeot);
|
||||
printf("Fatal: Leffeot = %g is not positive.\n", model->B4SOIleffeot);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
if (model->B4SOIweffeot <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: weffeot = %g is not positive.\n",
|
||||
model->B4SOIweffeot);
|
||||
printf("Fatal: Weffeot = %g is not positive.\n", model->B4SOIweffeot);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
if (model->B4SOItoxp <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: Toxp = %g is not positive.\n",
|
||||
model->B4SOItoxp);
|
||||
printf("Fatal: Toxp = %g is not positive.\n", model->B4SOItoxp);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
if (model->B4SOIepsrgate < 0.0)
|
||||
{ fprintf(fplog, "Fatal: Epsrgate = %g is not positive.\n",
|
||||
model->B4SOIepsrgate);
|
||||
printf("Fatal: Epsrgate = %g is not positive.\n", model->B4SOIepsrgate);
|
||||
Fatal_Flag = 1;
|
||||
}
|
||||
|
||||
if (model->B4SOItoxm <= 0.0)
|
||||
{ fprintf(fplog, "Fatal: Toxm = %g is not positive.\n",
|
||||
|
|
@ -893,11 +918,35 @@ FILE *fplog;
|
|||
model->B4SOIegidl);
|
||||
printf("Warning: Egidl = %g is negative.\n", model->B4SOIegidl);
|
||||
}
|
||||
|
||||
if (model->B4SOIagisl < 0.0)
|
||||
{ fprintf(fplog, "Warning: AGISL = %g is negative.\n",
|
||||
model->B4SOIagisl);
|
||||
printf("Warning: Agidl = %g is negative.\n", model->B4SOIagidl);
|
||||
}
|
||||
if (model->B4SOIbgisl < 0.0)
|
||||
{ fprintf(fplog, "Warning: BGISL = %g is negative.\n",
|
||||
model->B4SOIbgisl);
|
||||
printf("Warning: Bgisl = %g is negative.\n", model->B4SOIbgisl);
|
||||
}
|
||||
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",
|
||||
model->B4SOIcgisl);
|
||||
}
|
||||
if (model->B4SOIegisl < 0.0)
|
||||
{ fprintf(fplog, "Warning: EGISL = %g is negative.\n",
|
||||
model->B4SOIegisl);
|
||||
printf("Warning: Egisl = %g is negative.\n", model->B4SOIegisl);
|
||||
}
|
||||
|
||||
if (model->B4SOIesatii < 0.0)
|
||||
{ fprintf(fplog, "Warning: Esatii = %g should be within positive.\n",
|
||||
model->B4SOIesatii);
|
||||
printf("Warning: Esatii = %g should be within (0, 1).\n", model->B4SOIesatii);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (pParam->B4SOIxj > model->B4SOItsi)
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soicvtest.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soicvtest.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -33,10 +35,8 @@ double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs;
|
|||
for (here = model->B4SOIinstances; here != NULL ;
|
||||
here=here->B4SOInextInstance)
|
||||
{
|
||||
|
||||
if (here->B4SOIowner != ARCHme)
|
||||
continue;
|
||||
|
||||
vbs = model->B4SOItype
|
||||
* (*(ckt->CKTrhsOld+here->B4SOIbNode)
|
||||
- *(ckt->CKTrhsOld+here->B4SOIsNodePrime));
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soidel.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soidel.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soidest.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soidest.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
/**********
|
||||
Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
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.
|
||||
File: b4soiext.h
|
||||
**********/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soigetic.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soigetic.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -25,10 +27,8 @@ B4SOIinstance *here;
|
|||
for (; model ; model = model->B4SOInextModel)
|
||||
{ for (here = model->B4SOIinstances; here; here = here->B4SOInextInstance)
|
||||
{
|
||||
|
||||
if (here->B4SOIowner != ARCHme)
|
||||
continue;
|
||||
|
||||
if(!here->B4SOIicVBSGiven)
|
||||
{ here->B4SOIicVBS = *(ckt->CKTrhs + here->B4SOIbNode)
|
||||
- *(ckt->CKTrhs + here->B4SOIsNode);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
/**********
|
||||
Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
Author: 2005 Hui Wan (based on Samuel Fung's b3soiitf.h)
|
||||
Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
File: b4soiitf.h
|
||||
**********/
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soimask.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soimask.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -48,11 +50,63 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_TOX :
|
||||
value->rValue = model->B4SOItox;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_TOXP :
|
||||
value->rValue = model->B4SOItoxp;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LEFFEOT :
|
||||
value->rValue = model->B4SOIleffeot;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WEFFEOT :
|
||||
value->rValue = model->B4SOIweffeot;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VDDEOT :
|
||||
value->rValue = model->B4SOIvddeot;
|
||||
return(OK);
|
||||
case B4SOI_MOD_TEMPEOT :
|
||||
value->rValue = model->B4SOItempeot;
|
||||
return(OK);
|
||||
case B4SOI_MOD_ADOS :
|
||||
value->rValue = model->B4SOIados;
|
||||
return(OK);
|
||||
case B4SOI_MOD_BDOS :
|
||||
value->rValue = model->B4SOIbdos;
|
||||
return(OK);
|
||||
case B4SOI_MOD_EPSRGATE:
|
||||
value->rValue = model->B4SOIepsrgate;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PHIG:
|
||||
value->rValue = model->B4SOIphig;
|
||||
return(OK);
|
||||
case B4SOI_MOD_EASUB:
|
||||
value->rValue = model->B4SOIeasub;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_TOXM :
|
||||
value->rValue = model->B4SOItoxm;
|
||||
return(OK); /* v3.2 */
|
||||
|
||||
|
||||
/*4.1*/
|
||||
case B4SOI_MOD_EOT :
|
||||
value->rValue = model->B4SOIeot;
|
||||
return(OK);
|
||||
case B4SOI_MOD_EPSROX :
|
||||
value->rValue = model->B4SOIepsrox;
|
||||
return(OK);
|
||||
case B4SOI_MOD_EPSRSUB:
|
||||
value->rValue = model->B4SOIepsrsub;
|
||||
return(OK);
|
||||
case B4SOI_MOD_NI0SUB:
|
||||
value->rValue = model->B4SOIni0sub;
|
||||
return(OK);
|
||||
case B4SOI_MOD_BG0SUB:
|
||||
value->rValue = model->B4SOIbg0sub;
|
||||
return(OK);
|
||||
case B4SOI_MOD_TBGASUB:
|
||||
value->rValue = model->B4SOItbgasub;
|
||||
return(OK);
|
||||
case B4SOI_MOD_TBGBSUB:
|
||||
value->rValue = model->B4SOItbgbsub;
|
||||
return(OK);
|
||||
/* v2.2.3 */
|
||||
case B4SOI_MOD_DTOXCV :
|
||||
value->rValue = model->B4SOIdtoxcv;
|
||||
|
|
@ -107,6 +161,9 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_NGATE:
|
||||
value->rValue = model->B4SOIngate;
|
||||
return(OK);
|
||||
case B4SOI_MOD_NSD:
|
||||
value->rValue = model->B4SOInsd;
|
||||
return(OK);
|
||||
case B4SOI_MOD_GAMMA1:
|
||||
value->rValue = model->B4SOIgamma1;
|
||||
return(OK);
|
||||
|
|
@ -179,6 +236,9 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_VTH0:
|
||||
value->rValue = model->B4SOIvth0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VFB:
|
||||
value->rValue = model->B4SOIvfb;
|
||||
return(OK); /* v4.1 */
|
||||
case B4SOI_MOD_UA:
|
||||
value->rValue = model->B4SOIua;
|
||||
return(OK);
|
||||
|
|
@ -203,6 +263,69 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_UTE:
|
||||
value->rValue = model->B4SOIute;
|
||||
return(OK);
|
||||
|
||||
/*4.1 mobmod=4*/
|
||||
case B4SOI_MOD_UD:
|
||||
value->rValue = model->B4SOIud;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LUD:
|
||||
value->rValue = model->B4SOIlud;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WUD:
|
||||
value->rValue = model->B4SOIwud;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PUD:
|
||||
value->rValue = model->B4SOIpud;
|
||||
return(OK);
|
||||
case B4SOI_MOD_UD1:
|
||||
value->rValue = model->B4SOIud1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LUD1:
|
||||
value->rValue = model->B4SOIlud1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WUD1:
|
||||
value->rValue = model->B4SOIwud1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PUD1:
|
||||
value->rValue = model->B4SOIpud1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_EU:
|
||||
value->rValue = model->B4SOIeu;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LEU:
|
||||
value->rValue = model->B4SOIleu;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WEU:
|
||||
value->rValue = model->B4SOIweu;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PEU:
|
||||
value->rValue = model->B4SOIpeu;
|
||||
return(OK);
|
||||
case B4SOI_MOD_UCS:
|
||||
value->rValue = model->B4SOIucs;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LUCS:
|
||||
value->rValue = model->B4SOIlucs;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WUCS:
|
||||
value->rValue = model->B4SOIwucs;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PUCS:
|
||||
value->rValue = model->B4SOIpucs;
|
||||
return(OK);
|
||||
case B4SOI_MOD_UCSTE:
|
||||
value->rValue = model->B4SOIucste;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LUCSTE:
|
||||
value->rValue = model->B4SOIlucste;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WUCSTE:
|
||||
value->rValue = model->B4SOIwucste;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PUCSTE:
|
||||
value->rValue = model->B4SOIpucste;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_VOFF:
|
||||
value->rValue = model->B4SOIvoff;
|
||||
return(OK);
|
||||
|
|
@ -304,6 +427,9 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
return(OK);
|
||||
case B4SOI_MOD_TSI:
|
||||
value->rValue = model->B4SOItsi;
|
||||
return(OK);
|
||||
case B4SOI_MOD_ETSI:
|
||||
value->rValue = model->B4SOIetsi;
|
||||
return(OK);
|
||||
case B4SOI_MOD_RTH0:
|
||||
value->rValue = model->B4SOIrth0;
|
||||
|
|
@ -591,6 +717,10 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_TII:
|
||||
value->rValue = model->B4SOItii;
|
||||
return(OK);
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_TVBCI:
|
||||
value->rValue = model->B4SOItvbci;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LII:
|
||||
value->rValue = model->B4SOIlii;
|
||||
return(OK);
|
||||
|
|
@ -609,6 +739,22 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_FBJTII:
|
||||
value->rValue = model->B4SOIfbjtii;
|
||||
return(OK);
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_EBJTII:
|
||||
value->rValue = model->B4SOIebjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_CBJTII:
|
||||
value->rValue = model->B4SOIcbjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VBCI:
|
||||
value->rValue = model->B4SOIvbci;
|
||||
return(OK);
|
||||
case B4SOI_MOD_ABJTII:
|
||||
value->rValue = model->B4SOIabjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_MBJTII:
|
||||
value->rValue = model->B4SOImbjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_ESATII:
|
||||
value->rValue = model->B4SOIesatii;
|
||||
return(OK);
|
||||
|
|
@ -754,7 +900,72 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_CGIDL:
|
||||
value->rValue = model->B4SOIcgidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_RGIDL:
|
||||
value->rValue = model->B4SOIrgidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_KGIDL:
|
||||
value->rValue = model->B4SOIkgidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_FGIDL:
|
||||
value->rValue = model->B4SOIfgidl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_EGISL:
|
||||
value->rValue = model->B4SOIegisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_AGISL:
|
||||
value->rValue = model->B4SOIagisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_BGISL:
|
||||
value->rValue = model->B4SOIbgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_CGISL:
|
||||
value->rValue = model->B4SOIcgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_RGISL:
|
||||
value->rValue = model->B4SOIrgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_KGISL:
|
||||
value->rValue = model->B4SOIkgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_FGISL:
|
||||
value->rValue = model->B4SOIfgisl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_FDMOD:
|
||||
value->rValue = model->B4SOIfdMod;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VSCE:
|
||||
value->rValue = model->B4SOIvsce;
|
||||
return(OK);
|
||||
case B4SOI_MOD_CDSBS:
|
||||
value->rValue = model->B4SOIcdsbs;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_MINVCV:
|
||||
value->rValue = model->B4SOIminvcv;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LMINVCV:
|
||||
value->rValue = model->B4SOIlminvcv;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WMINVCV:
|
||||
value->rValue = model->B4SOIwminvcv;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PMINVCV:
|
||||
value->rValue = model->B4SOIpminvcv;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VOFFCV:
|
||||
value->rValue = model->B4SOIvoffcv;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LVOFFCV:
|
||||
value->rValue = model->B4SOIlvoffcv;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WVOFFCV:
|
||||
value->rValue = model->B4SOIwvoffcv;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PVOFFCV:
|
||||
value->rValue = model->B4SOIpvoffcv;
|
||||
return(OK);
|
||||
/* v3.0 */
|
||||
case B4SOI_MOD_SOIMOD:
|
||||
value->iValue = model->B4SOIsoiMod;
|
||||
|
|
@ -835,6 +1046,15 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_VGB2:
|
||||
value->rValue = model->B4SOIvgb2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_AIGBCP2:
|
||||
value->rValue = model->B4SOIaigbcp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_BIGBCP2:
|
||||
value->rValue = model->B4SOIbigbcp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_CIGBCP2:
|
||||
value->rValue = model->B4SOIcigbcp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_TOXQM:
|
||||
value->rValue = model->B4SOItoxqm;
|
||||
return(OK);
|
||||
|
|
@ -869,24 +1089,60 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_DVTP1:
|
||||
value->rValue = model->B4SOIdvtp1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_DVTP2:
|
||||
value->rValue = model->B4SOIdvtp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_DVTP3:
|
||||
value->rValue = model->B4SOIdvtp3;
|
||||
return(OK);
|
||||
case B4SOI_MOD_DVTP4:
|
||||
value->rValue = model->B4SOIdvtp4;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LDVTP0:
|
||||
value->rValue = model->B4SOIldvtp0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LDVTP1:
|
||||
value->rValue = model->B4SOIldvtp1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LDVTP2:
|
||||
value->rValue = model->B4SOIldvtp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LDVTP3:
|
||||
value->rValue = model->B4SOIldvtp3;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LDVTP4:
|
||||
value->rValue = model->B4SOIldvtp4;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WDVTP0:
|
||||
value->rValue = model->B4SOIwdvtp0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WDVTP1:
|
||||
value->rValue = model->B4SOIwdvtp1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WDVTP2:
|
||||
value->rValue = model->B4SOIwdvtp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WDVTP3:
|
||||
value->rValue = model->B4SOIwdvtp3;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WDVTP4:
|
||||
value->rValue = model->B4SOIwdvtp4;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PDVTP0:
|
||||
value->rValue = model->B4SOIpdvtp0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PDVTP1:
|
||||
value->rValue = model->B4SOIpdvtp1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PDVTP2:
|
||||
value->rValue = model->B4SOIpdvtp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PDVTP3:
|
||||
value->rValue = model->B4SOIpdvtp3;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PDVTP4:
|
||||
value->rValue = model->B4SOIpdvtp4;
|
||||
return(OK);
|
||||
case B4SOI_MOD_MINV:
|
||||
value->rValue = model->B4SOIminv;
|
||||
return(OK);
|
||||
|
|
@ -987,7 +1243,20 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
value->rValue = model->B4SOIxgl;
|
||||
return(OK);
|
||||
/* v3.1 added for RF end */
|
||||
/*4.1*/
|
||||
|
||||
case B4SOI_MOD_MTRLMOD :
|
||||
value->iValue = model->B4SOImtrlMod;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VGSTCVMOD:
|
||||
value->iValue = model->B4SOIvgstcvMod;
|
||||
return(OK);
|
||||
case B4SOI_MOD_GIDLMOD :
|
||||
value->iValue = model->B4SOIgidlMod;
|
||||
return(OK);
|
||||
case B4SOI_MOD_IIIMOD :
|
||||
value->iValue = model->B4SOIiiiMod;
|
||||
return(OK);
|
||||
/* v3.0 */
|
||||
case B4SOI_MOD_IGBMOD:
|
||||
value->iValue = model->B4SOIigbMod;
|
||||
|
|
@ -1046,6 +1315,15 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_LBETAGB2:
|
||||
value->rValue = model->B4SOIlbetaGB2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LAIGBCP2:
|
||||
value->rValue = model->B4SOIlaigbcp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LBIGBCP2:
|
||||
value->rValue = model->B4SOIlbigbcp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LCIGBCP2:
|
||||
value->rValue = model->B4SOIlcigbcp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LNDIF:
|
||||
value->rValue = model->B4SOIlndif;
|
||||
return(OK);
|
||||
|
|
@ -1152,9 +1430,15 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_LNGATE:
|
||||
value->rValue = model->B4SOIlngate;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LNSD:
|
||||
value->rValue = model->B4SOIlnsd;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LVTH0:
|
||||
value->rValue = model->B4SOIlvth0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LVFB:
|
||||
value->rValue = model->B4SOIlvfb;
|
||||
return(OK); /* v4.1 */
|
||||
case B4SOI_MOD_LK1:
|
||||
value->rValue = model->B4SOIlk1;
|
||||
return(OK);
|
||||
|
|
@ -1319,6 +1603,22 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
return(OK);
|
||||
case B4SOI_MOD_LFBJTII:
|
||||
value->rValue = model->B4SOIlfbjtii;
|
||||
return(OK);
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_LEBJTII:
|
||||
value->rValue = model->B4SOIlebjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LCBJTII:
|
||||
value->rValue = model->B4SOIlcbjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LVBCI:
|
||||
value->rValue = model->B4SOIlvbci;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LABJTII:
|
||||
value->rValue = model->B4SOIlabjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LMBJTII:
|
||||
value->rValue = model->B4SOIlmbjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LBETA0:
|
||||
value->rValue = model->B4SOIlbeta0;
|
||||
|
|
@ -1362,6 +1662,37 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_LEGIDL:
|
||||
value->rValue = model->B4SOIlegidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LRGIDL:
|
||||
value->rValue = model->B4SOIlrgidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LKGIDL:
|
||||
value->rValue = model->B4SOIlkgidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LFGIDL:
|
||||
value->rValue = model->B4SOIlfgidl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_LAGISL:
|
||||
value->rValue = model->B4SOIlagisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LBGISL:
|
||||
value->rValue = model->B4SOIlbgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LCGISL:
|
||||
value->rValue = model->B4SOIlcgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LEGISL:
|
||||
value->rValue = model->B4SOIlegisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LRGISL:
|
||||
value->rValue = model->B4SOIlrgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LKGISL:
|
||||
value->rValue = model->B4SOIlkgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LFGISL:
|
||||
value->rValue = model->B4SOIlfgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LNTUNS: /* v4.0 */
|
||||
value->rValue = model->B4SOIlntun;
|
||||
return(OK);
|
||||
|
|
@ -1477,6 +1808,15 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_WBETAGB2:
|
||||
value->rValue = model->B4SOIwbetaGB2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WAIGBCP2:
|
||||
value->rValue = model->B4SOIwaigbcp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WBIGBCP2:
|
||||
value->rValue = model->B4SOIwbigbcp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WCIGBCP2:
|
||||
value->rValue = model->B4SOIwcigbcp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WNDIF:
|
||||
value->rValue = model->B4SOIwndif;
|
||||
return(OK);
|
||||
|
|
@ -1582,9 +1922,15 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_WNGATE:
|
||||
value->rValue = model->B4SOIwngate;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WNSD:
|
||||
value->rValue = model->B4SOIwnsd;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WVTH0:
|
||||
value->rValue = model->B4SOIwvth0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WVFB:
|
||||
value->rValue = model->B4SOIwvfb;
|
||||
return(OK); /* v4.1 */
|
||||
case B4SOI_MOD_WK1:
|
||||
value->rValue = model->B4SOIwk1;
|
||||
return(OK);
|
||||
|
|
@ -1750,6 +2096,22 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_WFBJTII:
|
||||
value->rValue = model->B4SOIwfbjtii;
|
||||
return(OK);
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_WEBJTII:
|
||||
value->rValue = model->B4SOIwebjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WCBJTII:
|
||||
value->rValue = model->B4SOIwcbjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WVBCI:
|
||||
value->rValue = model->B4SOIwvbci;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WABJTII:
|
||||
value->rValue = model->B4SOIwabjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WMBJTII:
|
||||
value->rValue = model->B4SOIwmbjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WBETA0:
|
||||
value->rValue = model->B4SOIwbeta0;
|
||||
return(OK);
|
||||
|
|
@ -1792,6 +2154,45 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_WEGIDL:
|
||||
value->rValue = model->B4SOIwegidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WRGIDL:
|
||||
value->rValue = model->B4SOIwrgidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WKGIDL:
|
||||
value->rValue = model->B4SOIwkgidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WFGIDL:
|
||||
value->rValue = model->B4SOIwfgidl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_WAGISL:
|
||||
value->rValue = model->B4SOIwagisl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_WBGISL:
|
||||
value->rValue = model->B4SOIwbgisl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_WCGISL:
|
||||
value->rValue = model->B4SOIwcgisl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_WEGISL:
|
||||
value->rValue = model->B4SOIwegisl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_WRGISL:
|
||||
value->rValue = model->B4SOIwrgisl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_WKGISL:
|
||||
value->rValue = model->B4SOIwkgisl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_WFGISL:
|
||||
value->rValue = model->B4SOIwfgisl;
|
||||
return(OK);
|
||||
|
||||
|
||||
case B4SOI_MOD_WNTUNS: /* v4.0 */
|
||||
value->rValue = model->B4SOIwntun;
|
||||
return(OK);
|
||||
|
|
@ -1907,6 +2308,15 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_PBETAGB2:
|
||||
value->rValue = model->B4SOIpbetaGB2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PAIGBCP2:
|
||||
value->rValue = model->B4SOIpaigbcp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PBIGBCP2:
|
||||
value->rValue = model->B4SOIpbigbcp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PCIGBCP2:
|
||||
value->rValue = model->B4SOIpcigbcp2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PNDIF:
|
||||
value->rValue = model->B4SOIpndif;
|
||||
return(OK);
|
||||
|
|
@ -2013,9 +2423,15 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_PNGATE:
|
||||
value->rValue = model->B4SOIpngate;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PNSD:
|
||||
value->rValue = model->B4SOIpnsd;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PVTH0:
|
||||
value->rValue = model->B4SOIpvth0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PVFB:
|
||||
value->rValue = model->B4SOIpvfb;
|
||||
return(OK); /* v4.1 */
|
||||
case B4SOI_MOD_PK1:
|
||||
value->rValue = model->B4SOIpk1;
|
||||
return(OK);
|
||||
|
|
@ -2181,6 +2597,23 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_PFBJTII:
|
||||
value->rValue = model->B4SOIpfbjtii;
|
||||
return(OK);
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_PEBJTII:
|
||||
value->rValue = model->B4SOIpebjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PCBJTII:
|
||||
value->rValue = model->B4SOIpcbjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PVBCI:
|
||||
value->rValue = model->B4SOIpvbci;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PABJTII:
|
||||
value->rValue = model->B4SOIpabjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PMBJTII:
|
||||
value->rValue = model->B4SOIpmbjtii;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_PBETA0:
|
||||
value->rValue = model->B4SOIpbeta0;
|
||||
return(OK);
|
||||
|
|
@ -2223,6 +2656,38 @@ B4SOImAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
|||
case B4SOI_MOD_PEGIDL:
|
||||
value->rValue = model->B4SOIpegidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PRGIDL:
|
||||
value->rValue = model->B4SOIprgidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PKGIDL:
|
||||
value->rValue = model->B4SOIpkgidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PFGIDL:
|
||||
value->rValue = model->B4SOIpfgidl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_PAGISL:
|
||||
value->rValue = model->B4SOIpagisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PBGISL:
|
||||
value->rValue = model->B4SOIpbgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PCGISL:
|
||||
value->rValue = model->B4SOIpcgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PEGISL:
|
||||
value->rValue = model->B4SOIpegisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PRGISL:
|
||||
value->rValue = model->B4SOIprgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PKGISL:
|
||||
value->rValue = model->B4SOIpkgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PFGISL:
|
||||
value->rValue = model->B4SOIpfgisl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_PNTUNS: /* v4.0 */
|
||||
value->rValue = model->B4SOIpntun;
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soimdel.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soimdel.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soimpar.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soimpar.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -52,17 +54,101 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
case B4SOI_MOD_VERSION :
|
||||
mod->B4SOIversion = value->rValue;
|
||||
mod->B4SOIversionGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_MTRLMOD :
|
||||
mod->B4SOImtrlMod = value->iValue;
|
||||
mod->B4SOImtrlModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VGSTCVMOD :
|
||||
mod->B4SOIvgstcvMod = value->iValue;
|
||||
mod->B4SOIvgstcvModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_GIDLMOD :
|
||||
mod->B4SOIgidlMod = value->iValue;
|
||||
mod->B4SOIgidlModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_IIIMOD :
|
||||
mod->B4SOIiiiMod = value->iValue;
|
||||
mod->B4SOIiiiModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_TOX :
|
||||
mod->B4SOItox = value->rValue;
|
||||
mod->B4SOItoxGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_TOXP :
|
||||
mod->B4SOItoxp = value->rValue;
|
||||
mod->B4SOItoxpGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LEFFEOT :
|
||||
mod->B4SOIleffeot = value->rValue;
|
||||
mod->B4SOIleffeotGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WEFFEOT :
|
||||
mod->B4SOIweffeot = value->rValue;
|
||||
mod->B4SOIweffeotGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VDDEOT :
|
||||
mod->B4SOIvddeot = value->rValue;
|
||||
mod->B4SOIvddeotGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_TEMPEOT :
|
||||
mod->B4SOItempeot = value->rValue;
|
||||
mod->B4SOItempeotGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_ADOS :
|
||||
mod->B4SOIados = value->rValue;
|
||||
mod->B4SOIadosGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_BDOS :
|
||||
mod->B4SOIbdos = value->rValue;
|
||||
mod->B4SOIbdosGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_EPSRGATE:
|
||||
mod->B4SOIepsrgate = value->rValue;
|
||||
mod->B4SOIepsrgateGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PHIG:
|
||||
mod->B4SOIphig = value->rValue;
|
||||
mod->B4SOIphigGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_EASUB:
|
||||
mod->B4SOIeasub = value->rValue;
|
||||
mod->B4SOIeasubGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_TOXM :
|
||||
mod->B4SOItoxm = value->rValue;
|
||||
mod->B4SOItoxmGiven = TRUE;
|
||||
break; /* v3.2 */
|
||||
|
||||
/*4.1 */
|
||||
case B4SOI_MOD_EOT :
|
||||
mod->B4SOIeot = value->rValue;
|
||||
mod->B4SOIeotGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_EPSROX :
|
||||
mod->B4SOIepsrox = value->rValue;
|
||||
mod->B4SOIepsroxGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_EPSRSUB:
|
||||
mod->B4SOIepsrsub = value->rValue;
|
||||
mod->B4SOIepsrsubGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_NI0SUB:
|
||||
mod->B4SOIni0sub = value->rValue;
|
||||
mod->B4SOIni0subGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_BG0SUB:
|
||||
mod->B4SOIbg0sub = value->rValue;
|
||||
mod->B4SOIbg0subGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_TBGASUB:
|
||||
mod->B4SOItbgasub = value->rValue;
|
||||
mod->B4SOItbgasubGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_TBGBSUB:
|
||||
mod->B4SOItbgbsub = value->rValue;
|
||||
mod->B4SOItbgbsubGiven = TRUE;
|
||||
break;
|
||||
/* v2.2.3 */
|
||||
case B4SOI_MOD_DTOXCV :
|
||||
mod->B4SOIdtoxcv = value->rValue;
|
||||
|
|
@ -131,6 +217,12 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
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;
|
||||
break;
|
||||
case B4SOI_MOD_NGATE:
|
||||
mod->B4SOIngate = value->rValue;
|
||||
mod->B4SOIngateGiven = TRUE;
|
||||
|
|
@ -233,6 +325,10 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIvth0 = value->rValue;
|
||||
mod->B4SOIvth0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VFB:
|
||||
mod->B4SOIvfb = value->rValue;
|
||||
mod->B4SOIvfbGiven = TRUE;
|
||||
break; /* v4.1 */
|
||||
case B4SOI_MOD_UA:
|
||||
mod->B4SOIua = value->rValue;
|
||||
mod->B4SOIuaGiven = TRUE;
|
||||
|
|
@ -265,6 +361,86 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIute = value->rValue;
|
||||
mod->B4SOIuteGiven = TRUE;
|
||||
break;
|
||||
/*4.1 mobmod=4*/
|
||||
case B4SOI_MOD_UD:
|
||||
mod->B4SOIud = value->rValue;
|
||||
mod->B4SOIudGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LUD:
|
||||
mod->B4SOIlud = value->rValue;
|
||||
mod->B4SOIludGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WUD:
|
||||
mod->B4SOIwud = value->rValue;
|
||||
mod->B4SOIwudGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PUD:
|
||||
mod->B4SOIpud = value->rValue;
|
||||
mod->B4SOIpudGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_UD1:
|
||||
mod->B4SOIud1 = value->rValue;
|
||||
mod->B4SOIud1Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LUD1:
|
||||
mod->B4SOIlud1 = value->rValue;
|
||||
mod->B4SOIlud1Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WUD1:
|
||||
mod->B4SOIwud1 = value->rValue;
|
||||
mod->B4SOIwud1Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PUD1:
|
||||
mod->B4SOIpud1 = value->rValue;
|
||||
mod->B4SOIpud1Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_EU:
|
||||
mod->B4SOIeu = value->rValue;
|
||||
mod->B4SOIeuGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LEU:
|
||||
mod->B4SOIleu = value->rValue;
|
||||
mod->B4SOIleuGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WEU:
|
||||
mod->B4SOIweu = value->rValue;
|
||||
mod->B4SOIweuGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PEU:
|
||||
mod->B4SOIpeu = value->rValue;
|
||||
mod->B4SOIpeuGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_UCS:
|
||||
mod->B4SOIucs = value->rValue;
|
||||
mod->B4SOIucsGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LUCS:
|
||||
mod->B4SOIlucs = value->rValue;
|
||||
mod->B4SOIlucsGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WUCS:
|
||||
mod->B4SOIwucs = value->rValue;
|
||||
mod->B4SOIwucsGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PUCS:
|
||||
mod->B4SOIpucs = value->rValue;
|
||||
mod->B4SOIpucsGiven = TRUE;
|
||||
case B4SOI_MOD_UCSTE:
|
||||
mod->B4SOIucste = value->rValue;
|
||||
mod->B4SOIucsteGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LUCSTE:
|
||||
mod->B4SOIlucste = value->rValue;
|
||||
mod->B4SOIlucsteGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WUCSTE:
|
||||
mod->B4SOIwucste = value->rValue;
|
||||
mod->B4SOIwucsteGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PUCSTE:
|
||||
mod->B4SOIpucste = value->rValue;
|
||||
mod->B4SOIpucsteGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VOFF:
|
||||
mod->B4SOIvoff = value->rValue;
|
||||
mod->B4SOIvoffGiven = TRUE;
|
||||
|
|
@ -397,6 +573,10 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
case B4SOI_MOD_TSI :
|
||||
mod->B4SOItsi = value->rValue;
|
||||
mod->B4SOItsiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_ETSI :
|
||||
mod->B4SOIetsi = value->rValue;
|
||||
mod->B4SOIetsiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_XJ :
|
||||
mod->B4SOIxj = value->rValue;
|
||||
|
|
@ -434,6 +614,92 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIcgidl = value->rValue;
|
||||
mod->B4SOIcgidlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_RGIDL :
|
||||
mod->B4SOIrgidl = value->rValue;
|
||||
mod->B4SOIrgidlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_KGIDL :
|
||||
mod->B4SOIkgidl = value->rValue;
|
||||
mod->B4SOIkgidlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_FGIDL :
|
||||
mod->B4SOIfgidl = value->rValue;
|
||||
mod->B4SOIfgidlGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_EGISL :
|
||||
mod->B4SOIegisl = value->rValue;
|
||||
mod->B4SOIegislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_AGISL :
|
||||
mod->B4SOIagisl = value->rValue;
|
||||
mod->B4SOIagislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_BGISL :
|
||||
mod->B4SOIbgisl = value->rValue;
|
||||
mod->B4SOIbgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_CGISL :
|
||||
mod->B4SOIcgisl = value->rValue;
|
||||
mod->B4SOIcgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_RGISL :
|
||||
mod->B4SOIrgisl = value->rValue;
|
||||
mod->B4SOIrgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_KGISL :
|
||||
mod->B4SOIkgisl = value->rValue;
|
||||
mod->B4SOIkgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_FGISL :
|
||||
mod->B4SOIfgisl = value->rValue;
|
||||
mod->B4SOIfgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_FDMOD :
|
||||
mod->B4SOIfdMod = value->rValue;
|
||||
mod->B4SOIfdModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VSCE :
|
||||
mod->B4SOIvsce = value->rValue;
|
||||
mod->B4SOIvsceGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_CDSBS :
|
||||
mod->B4SOIcdsbs = value->rValue;
|
||||
mod->B4SOIcdsbsGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_MINVCV:
|
||||
mod->B4SOIminvcv = value->rValue;
|
||||
mod->B4SOIminvcvGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LMINVCV:
|
||||
mod->B4SOIlminvcv = value->rValue;
|
||||
mod->B4SOIlminvcvGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WMINVCV:
|
||||
mod->B4SOIwminvcv = value->rValue;
|
||||
mod->B4SOIwminvcvGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PMINVCV:
|
||||
mod->B4SOIpminvcv = value->rValue;
|
||||
mod->B4SOIpminvcvGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VOFFCV:
|
||||
mod->B4SOIvoffcv = value->rValue;
|
||||
mod->B4SOIvoffcvGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LVOFFCV:
|
||||
mod->B4SOIlvoffcv = value->rValue;
|
||||
mod->B4SOIlvoffcvGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WVOFFCV:
|
||||
mod->B4SOIwvoffcv = value->rValue;
|
||||
mod->B4SOIwvoffcvGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PVOFFCV:
|
||||
mod->B4SOIpvoffcv = value->rValue;
|
||||
mod->B4SOIpvoffcvGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_NDIODES : /* v4.0 */
|
||||
mod->B4SOIndiode = value->rValue;
|
||||
mod->B4SOIndiodeGiven = TRUE;
|
||||
|
|
@ -776,6 +1042,18 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIvgb2 = value->rValue;
|
||||
mod->B4SOIvgb2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_AIGBCP2 :
|
||||
mod->B4SOIaigbcp2 = value->rValue;
|
||||
mod->B4SOIaigbcp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_BIGBCP2 :
|
||||
mod->B4SOIbigbcp2 = value->rValue;
|
||||
mod->B4SOIbigbcp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_CIGBCP2 :
|
||||
mod->B4SOIcigbcp2 = value->rValue;
|
||||
mod->B4SOIcigbcp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_TOXQM :
|
||||
mod->B4SOItoxqm = value->rValue;
|
||||
mod->B4SOItoxqmGiven = TRUE;
|
||||
|
|
@ -902,6 +1180,18 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIdvtp1 = value->rValue;
|
||||
mod->B4SOIdvtp1Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_DVTP2:
|
||||
mod->B4SOIdvtp2 = value->rValue;
|
||||
mod->B4SOIdvtp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_DVTP3:
|
||||
mod->B4SOIdvtp3 = value->rValue;
|
||||
mod->B4SOIdvtp3Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_DVTP4:
|
||||
mod->B4SOIdvtp4 = value->rValue;
|
||||
mod->B4SOIdvtp4Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LDVTP0:
|
||||
mod->B4SOIldvtp0 = value->rValue;
|
||||
mod->B4SOIldvtp0Given = TRUE;
|
||||
|
|
@ -910,6 +1200,18 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIldvtp1 = value->rValue;
|
||||
mod->B4SOIldvtp1Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LDVTP2:
|
||||
mod->B4SOIldvtp2 = value->rValue;
|
||||
mod->B4SOIldvtp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LDVTP3:
|
||||
mod->B4SOIldvtp3 = value->rValue;
|
||||
mod->B4SOIldvtp3Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LDVTP4:
|
||||
mod->B4SOIldvtp4 = value->rValue;
|
||||
mod->B4SOIldvtp4Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WDVTP0:
|
||||
mod->B4SOIwdvtp0 = value->rValue;
|
||||
mod->B4SOIwdvtp0Given = TRUE;
|
||||
|
|
@ -918,6 +1220,18 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIwdvtp1 = value->rValue;
|
||||
mod->B4SOIwdvtp1Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WDVTP2:
|
||||
mod->B4SOIwdvtp2 = value->rValue;
|
||||
mod->B4SOIwdvtp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WDVTP3:
|
||||
mod->B4SOIwdvtp3 = value->rValue;
|
||||
mod->B4SOIwdvtp3Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WDVTP4:
|
||||
mod->B4SOIwdvtp4 = value->rValue;
|
||||
mod->B4SOIwdvtp4Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PDVTP0:
|
||||
mod->B4SOIpdvtp0 = value->rValue;
|
||||
mod->B4SOIpdvtp0Given = TRUE;
|
||||
|
|
@ -926,6 +1240,18 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIpdvtp1 = value->rValue;
|
||||
mod->B4SOIpdvtp1Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PDVTP2:
|
||||
mod->B4SOIpdvtp2 = value->rValue;
|
||||
mod->B4SOIpdvtp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PDVTP3:
|
||||
mod->B4SOIpdvtp3 = value->rValue;
|
||||
mod->B4SOIpdvtp3Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PDVTP4:
|
||||
mod->B4SOIpdvtp4 = value->rValue;
|
||||
mod->B4SOIpdvtp4Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_MINV:
|
||||
mod->B4SOIminv = value->rValue;
|
||||
mod->B4SOIminvGiven = TRUE;
|
||||
|
|
@ -1152,6 +1478,10 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
case B4SOI_MOD_TII :
|
||||
mod->B4SOItii = value->rValue;
|
||||
mod->B4SOItiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_TVBCI :
|
||||
mod->B4SOItvbci = value->rValue;
|
||||
mod->B4SOItvbciGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LII :
|
||||
mod->B4SOIlii = value->rValue;
|
||||
|
|
@ -1177,6 +1507,27 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIfbjtii = value->rValue;
|
||||
mod->B4SOIfbjtiiGiven = TRUE;
|
||||
break;
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_EBJTII :
|
||||
mod->B4SOIebjtii = value->rValue;
|
||||
mod->B4SOIebjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_CBJTII :
|
||||
mod->B4SOIcbjtii = value->rValue;
|
||||
mod->B4SOIcbjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VBCI :
|
||||
mod->B4SOIvbci = value->rValue;
|
||||
mod->B4SOIvbciGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_ABJTII :
|
||||
mod->B4SOIabjtii = value->rValue;
|
||||
mod->B4SOIabjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_MBJTII :
|
||||
mod->B4SOImbjtii = value->rValue;
|
||||
mod->B4SOImbjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_ESATII :
|
||||
mod->B4SOIesatii = value->rValue;
|
||||
mod->B4SOIesatiiGiven = TRUE;
|
||||
|
|
@ -1371,6 +1722,18 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIlbetaGB2 = value->rValue;
|
||||
mod->B4SOIlbetaGB2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LAIGBCP2 :
|
||||
mod->B4SOIlaigbcp2 = value->rValue;
|
||||
mod->B4SOIlaigbcp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LBIGBCP2 :
|
||||
mod->B4SOIlbigbcp2 = value->rValue;
|
||||
mod->B4SOIlbigbcp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LCIGBCP2 :
|
||||
mod->B4SOIlcigbcp2 = value->rValue;
|
||||
mod->B4SOIlcigbcp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LNDIF :
|
||||
mod->B4SOIlndif = value->rValue;
|
||||
mod->B4SOIlndifGiven = TRUE;
|
||||
|
|
@ -1511,10 +1874,18 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIlngate = value->rValue;
|
||||
mod->B4SOIlngateGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LNSD:
|
||||
mod->B4SOIlnsd = value->rValue;
|
||||
mod->B4SOIlnsdGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LVTH0:
|
||||
mod->B4SOIlvth0 = value->rValue;
|
||||
mod->B4SOIlvth0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LVFB:
|
||||
mod->B4SOIlvfb = value->rValue;
|
||||
mod->B4SOIlvfbGiven = TRUE;
|
||||
break; /* v4.1 */
|
||||
case B4SOI_MOD_LK1:
|
||||
mod->B4SOIlk1 = value->rValue;
|
||||
mod->B4SOIlk1Given = TRUE;
|
||||
|
|
@ -1735,6 +2106,28 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIlfbjtii = value->rValue;
|
||||
mod->B4SOIlfbjtiiGiven = TRUE;
|
||||
break;
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_LEBJTII :
|
||||
mod->B4SOIlebjtii = value->rValue;
|
||||
mod->B4SOIlebjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LCBJTII :
|
||||
mod->B4SOIlcbjtii = value->rValue;
|
||||
mod->B4SOIlcbjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LVBCI :
|
||||
mod->B4SOIlvbci = value->rValue;
|
||||
mod->B4SOIlvbciGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LABJTII :
|
||||
mod->B4SOIlabjtii = value->rValue;
|
||||
mod->B4SOIlabjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LMBJTII :
|
||||
mod->B4SOIlmbjtii = value->rValue;
|
||||
mod->B4SOIlmbjtiiGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_LBETA0 :
|
||||
mod->B4SOIlbeta0 = value->rValue;
|
||||
mod->B4SOIlbeta0Given = TRUE;
|
||||
|
|
@ -1791,6 +2184,47 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIlegidl = value->rValue;
|
||||
mod->B4SOIlegidlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LRGIDL :
|
||||
mod->B4SOIlrgidl = value->rValue;
|
||||
mod->B4SOIlrgidlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LKGIDL :
|
||||
mod->B4SOIlkgidl = value->rValue;
|
||||
mod->B4SOIlkgidlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LFGIDL :
|
||||
mod->B4SOIlfgidl = value->rValue;
|
||||
mod->B4SOIlfgidlGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_LAGISL :
|
||||
mod->B4SOIlagisl = value->rValue;
|
||||
mod->B4SOIlagislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LBGISL :
|
||||
mod->B4SOIlbgisl = value->rValue;
|
||||
mod->B4SOIlbgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LCGISL :
|
||||
mod->B4SOIlcgisl = value->rValue;
|
||||
mod->B4SOIlcgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LEGISL :
|
||||
mod->B4SOIlegisl = value->rValue;
|
||||
mod->B4SOIlegislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LRGISL :
|
||||
mod->B4SOIlrgisl = value->rValue;
|
||||
mod->B4SOIlrgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LKGISL :
|
||||
mod->B4SOIlkgisl = value->rValue;
|
||||
mod->B4SOIlkgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LFGISL :
|
||||
mod->B4SOIlfgisl = value->rValue;
|
||||
mod->B4SOIlfgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LNTUNS : /* v4.0 */
|
||||
mod->B4SOIlntun = value->rValue;
|
||||
mod->B4SOIlntunGiven = TRUE;
|
||||
|
|
@ -1955,6 +2389,18 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIwbetaGB2 = value->rValue;
|
||||
mod->B4SOIwbetaGB2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WAIGBCP2 :
|
||||
mod->B4SOIwaigbcp2 = value->rValue;
|
||||
mod->B4SOIwaigbcp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WBIGBCP2 :
|
||||
mod->B4SOIwbigbcp2 = value->rValue;
|
||||
mod->B4SOIwbigbcp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WCIGBCP2 :
|
||||
mod->B4SOIwcigbcp2 = value->rValue;
|
||||
mod->B4SOIwcigbcp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WNDIF :
|
||||
mod->B4SOIwndif = value->rValue;
|
||||
mod->B4SOIwndifGiven = TRUE;
|
||||
|
|
@ -2094,10 +2540,18 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIwngate = value->rValue;
|
||||
mod->B4SOIwngateGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WNSD:
|
||||
mod->B4SOIwnsd = value->rValue;
|
||||
mod->B4SOIwnsdGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WVTH0:
|
||||
mod->B4SOIwvth0 = value->rValue;
|
||||
mod->B4SOIwvth0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WVFB:
|
||||
mod->B4SOIwvfb = value->rValue;
|
||||
mod->B4SOIwvfbGiven = TRUE;
|
||||
break; /* v4.1 */
|
||||
case B4SOI_MOD_WK1:
|
||||
mod->B4SOIwk1 = value->rValue;
|
||||
mod->B4SOIwk1Given = TRUE;
|
||||
|
|
@ -2318,6 +2772,28 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIwfbjtii = value->rValue;
|
||||
mod->B4SOIwfbjtiiGiven = TRUE;
|
||||
break;
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_WEBJTII :
|
||||
mod->B4SOIwebjtii = value->rValue;
|
||||
mod->B4SOIwebjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WCBJTII :
|
||||
mod->B4SOIwcbjtii = value->rValue;
|
||||
mod->B4SOIwcbjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WVBCI :
|
||||
mod->B4SOIwvbci = value->rValue;
|
||||
mod->B4SOIwvbciGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WABJTII :
|
||||
mod->B4SOIwabjtii = value->rValue;
|
||||
mod->B4SOIwabjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WMBJTII :
|
||||
mod->B4SOIwmbjtii = value->rValue;
|
||||
mod->B4SOIwmbjtiiGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_WBETA0 :
|
||||
mod->B4SOIwbeta0 = value->rValue;
|
||||
mod->B4SOIwbeta0Given = TRUE;
|
||||
|
|
@ -2374,6 +2850,56 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIwegidl = value->rValue;
|
||||
mod->B4SOIwegidlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WRGIDL :
|
||||
mod->B4SOIwrgidl = value->rValue;
|
||||
mod->B4SOIwrgidlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WKGIDL :
|
||||
mod->B4SOIwkgidl = value->rValue;
|
||||
mod->B4SOIwkgidlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WFGIDL :
|
||||
mod->B4SOIwfgidl = value->rValue;
|
||||
mod->B4SOIwfgidlGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case B4SOI_MOD_WAGISL :
|
||||
mod->B4SOIwagisl = value->rValue;
|
||||
mod->B4SOIwagislGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_WBGISL :
|
||||
mod->B4SOIwbgisl = value->rValue;
|
||||
mod->B4SOIwbgislGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_WCGISL :
|
||||
mod->B4SOIwcgisl = value->rValue;
|
||||
mod->B4SOIwcgislGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_WEGISL :
|
||||
mod->B4SOIwegisl = value->rValue;
|
||||
mod->B4SOIwegislGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_WRGISL :
|
||||
mod->B4SOIwrgisl = value->rValue;
|
||||
mod->B4SOIwrgislGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_WKGISL :
|
||||
mod->B4SOIwkgisl = value->rValue;
|
||||
mod->B4SOIwkgislGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_WFGISL :
|
||||
mod->B4SOIwfgisl = value->rValue;
|
||||
mod->B4SOIwfgislGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case B4SOI_MOD_WNTUNS : /* v4.0 */
|
||||
mod->B4SOIwntun = value->rValue;
|
||||
mod->B4SOIwntunGiven = TRUE;
|
||||
|
|
@ -2538,6 +3064,18 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIpbetaGB2 = value->rValue;
|
||||
mod->B4SOIpbetaGB2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PAIGBCP2 :
|
||||
mod->B4SOIpaigbcp2 = value->rValue;
|
||||
mod->B4SOIpaigbcp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PBIGBCP2 :
|
||||
mod->B4SOIpbigbcp2 = value->rValue;
|
||||
mod->B4SOIpbigbcp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PCIGBCP2 :
|
||||
mod->B4SOIpcigbcp2 = value->rValue;
|
||||
mod->B4SOIpcigbcp2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PNDIF :
|
||||
mod->B4SOIpndif = value->rValue;
|
||||
mod->B4SOIpndifGiven = TRUE;
|
||||
|
|
@ -2677,10 +3215,18 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIpngate = value->rValue;
|
||||
mod->B4SOIpngateGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PNSD:
|
||||
mod->B4SOIpnsd = value->rValue;
|
||||
mod->B4SOIpnsdGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PVTH0:
|
||||
mod->B4SOIpvth0 = value->rValue;
|
||||
mod->B4SOIpvth0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PVFB:
|
||||
mod->B4SOIpvfb = value->rValue;
|
||||
mod->B4SOIpvfbGiven = TRUE;
|
||||
break; /* v4.1 */
|
||||
case B4SOI_MOD_PK1:
|
||||
mod->B4SOIpk1 = value->rValue;
|
||||
mod->B4SOIpk1Given = TRUE;
|
||||
|
|
@ -2900,6 +3446,27 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
case B4SOI_MOD_PFBJTII :
|
||||
mod->B4SOIpfbjtii = value->rValue;
|
||||
mod->B4SOIpfbjtiiGiven = TRUE;
|
||||
break;
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_PEBJTII :
|
||||
mod->B4SOIpebjtii = value->rValue;
|
||||
mod->B4SOIpebjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PCBJTII :
|
||||
mod->B4SOIpcbjtii = value->rValue;
|
||||
mod->B4SOIpcbjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PVBCI :
|
||||
mod->B4SOIpvbci = value->rValue;
|
||||
mod->B4SOIpvbciGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PABJTII :
|
||||
mod->B4SOIpabjtii = value->rValue;
|
||||
mod->B4SOIpabjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PMBJTII :
|
||||
mod->B4SOIpmbjtii = value->rValue;
|
||||
mod->B4SOIpmbjtiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PBETA0 :
|
||||
mod->B4SOIpbeta0 = value->rValue;
|
||||
|
|
@ -2957,6 +3524,47 @@ B4SOImParam(int param, IFvalue *value, GENmodel *inMod)
|
|||
mod->B4SOIpegidl = value->rValue;
|
||||
mod->B4SOIpegidlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PRGIDL :
|
||||
mod->B4SOIprgidl = value->rValue;
|
||||
mod->B4SOIprgidlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PKGIDL :
|
||||
mod->B4SOIpkgidl = value->rValue;
|
||||
mod->B4SOIpkgidlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PFGIDL :
|
||||
mod->B4SOIpfgidl = value->rValue;
|
||||
mod->B4SOIpfgidlGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_PAGISL :
|
||||
mod->B4SOIpagisl = value->rValue;
|
||||
mod->B4SOIpagislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PBGISL :
|
||||
mod->B4SOIpbgisl = value->rValue;
|
||||
mod->B4SOIpbgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PCGISL :
|
||||
mod->B4SOIpcgisl = value->rValue;
|
||||
mod->B4SOIpcgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PEGISL :
|
||||
mod->B4SOIpegisl = value->rValue;
|
||||
mod->B4SOIpegislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PRGISL :
|
||||
mod->B4SOIprgisl = value->rValue;
|
||||
mod->B4SOIprgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PKGISL :
|
||||
mod->B4SOIpkgisl = value->rValue;
|
||||
mod->B4SOIpkgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PFGISL :
|
||||
mod->B4SOIpfgisl = value->rValue;
|
||||
mod->B4SOIpfgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PNTUNS : /* v4.0 */
|
||||
mod->B4SOIpntun = value->rValue;
|
||||
mod->B4SOIpntunGiven = TRUE;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soinoi.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soinoi.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -108,7 +110,7 @@ double T0, T1, T2, T5, T10, T11;
|
|||
double Ssi, Swi;
|
||||
|
||||
/* v3.2 */
|
||||
double npart_theta, npart_beta, igsquare, esat=0.0;
|
||||
double npart_theta, npart_beta, igsquare, esat;
|
||||
/* v3.2 end */
|
||||
double gspr, gdpr;
|
||||
|
||||
|
|
@ -139,11 +141,10 @@ int i;
|
|||
for (; model != NULL; model = model->B4SOInextModel)
|
||||
{ for (here = model->B4SOIinstances; here != NULL;
|
||||
here = here->B4SOInextInstance)
|
||||
{
|
||||
{
|
||||
if (here->B4SOIowner != ARCHme)
|
||||
continue;
|
||||
|
||||
pParam = here->pParam;
|
||||
pParam = here->pParam;
|
||||
switch (operation)
|
||||
{ case N_OPEN:
|
||||
/* see if we have to to produce a summary report */
|
||||
|
|
@ -219,7 +220,9 @@ int i;
|
|||
}
|
||||
}
|
||||
else
|
||||
{ T5 = here->B4SOIVgsteff / esat
|
||||
{
|
||||
esat = 2.0 * pParam->B4SOIvsattemp / here->B4SOIueff;
|
||||
T5 = here->B4SOIVgsteff / esat
|
||||
/ pParam->B4SOIleff;
|
||||
T5 *= T5;
|
||||
npart_beta = model->B4SOIrnoia * (1.0 +
|
||||
|
|
@ -239,11 +242,11 @@ int i;
|
|||
}
|
||||
if ( (*(ckt->CKTstates[0] + here->B4SOIvds))
|
||||
>= 0.0 )
|
||||
gspr = gspr / (1.0 + npart_theta
|
||||
gspr = gspr * (1.0 + npart_theta
|
||||
* npart_theta * gspr
|
||||
/ here->B4SOIidovVds);
|
||||
else
|
||||
gdpr = gdpr / (1.0 + npart_theta
|
||||
gdpr = gdpr * (1.0 + npart_theta
|
||||
* npart_theta * gdpr
|
||||
/ here->B4SOIidovVds);
|
||||
}
|
||||
|
|
@ -305,8 +308,8 @@ int i;
|
|||
NevalSrc(&noizDens[B4SOIRBODYNOIZ],
|
||||
&lnNdens[B4SOIRBODYNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIbNode, here->B4SOIpNode,
|
||||
1/ here->B4SOIrbodyext +
|
||||
1/ pParam->B4SOIrbody);
|
||||
1/ (here->B4SOIrbodyext +
|
||||
pParam->B4SOIrbody));
|
||||
}
|
||||
else
|
||||
{ noizDens[B4SOIRBODYNOIZ] = 0.0;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soipar.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soipar.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -175,6 +177,10 @@ B4SOIparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
|
|||
here->B4SOIagbcp = value->rValue;
|
||||
here->B4SOIagbcpGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_AGBCP2:
|
||||
here->B4SOIagbcp2 = value->rValue;
|
||||
here->B4SOIagbcp2Given = TRUE;
|
||||
break; /* v4.1 */
|
||||
case B4SOI_AGBCPD:
|
||||
here->B4SOIagbcpd = value->rValue;
|
||||
here->B4SOIagbcpdGiven = TRUE;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soipzld.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soipzld.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -22,9 +24,9 @@ B4SOIpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
|||
register B4SOImodel *model = (B4SOImodel*)inModel;
|
||||
register B4SOIinstance *here;
|
||||
double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb;
|
||||
double gdpr, gspr, gds, gbd, gbs, capbd = 0.0, capbs = 0.0, xcsgb, xcdsb, xcsdb;
|
||||
double gdpr, gspr, gds, gbd, gbs, capbd=0.0, capbs=0.0, xcsgb, xcdsb, xcsdb;
|
||||
double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb;
|
||||
double GSoverlapCap, GDoverlapCap, GBoverlapCap = 0.0;
|
||||
double GSoverlapCap, GDoverlapCap, GBoverlapCap=0.0;
|
||||
double FwdSum, RevSum, Gm, Gmbs;
|
||||
|
||||
double m;
|
||||
|
|
@ -32,15 +34,17 @@ double m;
|
|||
for (; model != NULL; model = model->B4SOInextModel)
|
||||
{ for (here = model->B4SOIinstances; here!= NULL;
|
||||
here = here->B4SOInextInstance)
|
||||
{
|
||||
if (here->B4SOIowner != ARCHme)
|
||||
{
|
||||
if (here->B4SOImode >= 0)
|
||||
{
|
||||
|
||||
if (here->B4SOIowner != ARCHme)
|
||||
continue;
|
||||
|
||||
if (here->B4SOImode >= 0)
|
||||
{ Gm = here->B4SOIgm;
|
||||
Gmbs = here->B4SOIgmbs;
|
||||
FwdSum = Gm + Gmbs;
|
||||
RevSum = 0.0;
|
||||
Gm = here->B4SOIgm;
|
||||
Gmbs = here->B4SOIgmbs;
|
||||
FwdSum = Gm + Gmbs;
|
||||
RevSum = 0.0;
|
||||
cggb = here->B4SOIcggb;
|
||||
cgsb = here->B4SOIcgsb;
|
||||
cgdb = here->B4SOIcgdb;
|
||||
|
|
@ -53,11 +57,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;
|
||||
|
|
@ -79,10 +83,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,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soiset.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soiset.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
@ -23,6 +25,9 @@
|
|||
#define PI 3.141592654
|
||||
#define Charge_q 1.60219e-19
|
||||
#define Meter2Micron 1.0e6
|
||||
#define EPS0 8.85418e-12
|
||||
|
||||
double epsrox, toxe, epssub;
|
||||
|
||||
int
|
||||
B4SOIsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||
|
|
@ -37,10 +42,6 @@ double Cboxt;
|
|||
/* v3.2 */
|
||||
double Vbs0t, Qsi;
|
||||
|
||||
/* Alan's Nodeset Fix */
|
||||
CKTnode *tmpNode;
|
||||
IFuid tmpName;
|
||||
|
||||
/* loop through all the B4SOI device models */
|
||||
for( ; model != NULL; model = model->B4SOInextModel )
|
||||
{
|
||||
|
|
@ -56,6 +57,46 @@ IFuid tmpName;
|
|||
model->B4SOIparamChk = 0;
|
||||
if (!model->B4SOIcapModGiven)
|
||||
model->B4SOIcapMod = 2;
|
||||
|
||||
if (!model->B4SOImtrlModGiven)
|
||||
model->B4SOImtrlMod = 0; /*4.1*/
|
||||
if (!model->B4SOIvgstcvModGiven)
|
||||
model->B4SOIvgstcvMod = 0;
|
||||
if (!model->B4SOIgidlModGiven)
|
||||
model->B4SOIgidlMod = 0;
|
||||
if (!model->B4SOIeotGiven)
|
||||
model->B4SOIeot = 100.0e-10;
|
||||
if (!model->B4SOIepsroxGiven)
|
||||
model->B4SOIepsrox = 3.9;
|
||||
if (!model->B4SOIepsrsubGiven)
|
||||
model->B4SOIepsrsub = 11.7;
|
||||
if (!model->B4SOIni0subGiven)
|
||||
model->B4SOIni0sub = 1.45e10; /* unit 1/cm3 */
|
||||
if (!model->B4SOIbg0subGiven)
|
||||
model->B4SOIbg0sub = 1.16; /* unit eV */
|
||||
if (!model->B4SOItbgasubGiven)
|
||||
model->B4SOItbgasub = 7.02e-4;
|
||||
if (!model->B4SOItbgbsubGiven)
|
||||
model->B4SOItbgbsub = 1108.0;
|
||||
if (!model->B4SOIleffeotGiven)
|
||||
model->B4SOIleffeot = 1.0;
|
||||
if (!model->B4SOIweffeotGiven)
|
||||
model->B4SOIweffeot = 10.0;
|
||||
if (!model->B4SOIvddeotGiven)
|
||||
model->B4SOIvddeot = (model->B4SOItype == NMOS) ? 1.5 : -1.5;
|
||||
if (!model->B4SOItempeotGiven)
|
||||
model->B4SOItempeot = 300.15;
|
||||
if (!model->B4SOIadosGiven)
|
||||
model->B4SOIados = 1.0;
|
||||
if (!model->B4SOIbdosGiven)
|
||||
model->B4SOIbdos = 1.0;
|
||||
if (!model->B4SOIepsrgateGiven)
|
||||
model->B4SOIepsrgate = 11.7;
|
||||
if (!model->B4SOIphigGiven)
|
||||
model->B4SOIphig = 4.05;
|
||||
if (!model->B4SOIeasubGiven)
|
||||
model->B4SOIeasub = 4.05;
|
||||
|
||||
/* if (!model->B4SOInoiModGiven)
|
||||
model->B4SOInoiMod = 1; v3.2 */
|
||||
if (!model->B4SOIshModGiven)
|
||||
|
|
@ -64,8 +105,30 @@ IFuid tmpName;
|
|||
model->B4SOIversion = 4.00;
|
||||
if (!model->B4SOItoxGiven)
|
||||
model->B4SOItox = 100.0e-10;
|
||||
model->B4SOIcox = 3.453133e-11 / model->B4SOItox;
|
||||
/*model->B4SOIcox = 3.453133e-11 / model->B4SOItox;*/
|
||||
if(model->B4SOImtrlMod)
|
||||
{
|
||||
epsrox = 3.9;
|
||||
toxe = model->B4SOIeot;
|
||||
epssub = EPS0 * model->B4SOIepsrsub;
|
||||
//model->B4SOIcox = 3.453133e-11 / model->B4SOItox;
|
||||
model->B4SOIcox = epsrox * EPS0 / toxe;
|
||||
}
|
||||
else
|
||||
{
|
||||
epsrox = model->B4SOIepsrox;
|
||||
toxe = model->B4SOItox;
|
||||
epssub = EPSSI;
|
||||
//model->B4SOIcox = epsrox * EPS0 / toxe;
|
||||
model->B4SOIcox = 3.453133e-11 / model->B4SOItox;
|
||||
}
|
||||
|
||||
|
||||
if (!model->B4SOItoxpGiven)
|
||||
model->B4SOItoxp = model->B4SOItox;
|
||||
|
||||
|
||||
|
||||
if (!model->B4SOItoxmGiven)
|
||||
model->B4SOItoxm = model->B4SOItox; /* v3.2 */
|
||||
|
||||
|
|
@ -98,7 +161,7 @@ IFuid tmpName;
|
|||
|
||||
if (!model->B4SOItnoiModGiven)
|
||||
model->B4SOItnoiMod = 0;
|
||||
else if ((model->B4SOItnoiMod != 0) && (model->B4SOItnoiMod != 1))
|
||||
else if ((model->B4SOItnoiMod != 0) && (model->B4SOItnoiMod != 1)&& (model->B4SOItnoiMod != 2))
|
||||
{ model->B4SOItnoiMod = 0;
|
||||
printf("Waring: tnoiMod has been set to default value:0.\n");
|
||||
}
|
||||
|
|
@ -173,6 +236,8 @@ IFuid tmpName;
|
|||
model->B4SOInpeak = 1.7e17; /* unit 1/cm3 */
|
||||
if (!model->B4SOIngateGiven)
|
||||
model->B4SOIngate = 0; /* unit 1/cm3 */
|
||||
if (!model->B4SOInsdGiven)
|
||||
model->B4SOInsd = 1.0e20;
|
||||
if (!model->B4SOIvbmGiven)
|
||||
model->B4SOIvbm = -3.0;
|
||||
if (!model->B4SOIxtGiven)
|
||||
|
|
@ -211,6 +276,8 @@ IFuid tmpName;
|
|||
model->B4SOIdsub = model->B4SOIdrout;
|
||||
if (!model->B4SOIvth0Given)
|
||||
model->B4SOIvth0 = (model->B4SOItype == NMOS) ? 0.7 : -0.7;
|
||||
if (!model->B4SOIvfbGiven)
|
||||
model->B4SOIvfb = -1.0; /* v4.1 */
|
||||
if (!model->B4SOIuaGiven)
|
||||
model->B4SOIua = 2.25e-9; /* unit m/V */
|
||||
if (!model->B4SOIua1Given)
|
||||
|
|
@ -227,6 +294,49 @@ IFuid tmpName;
|
|||
model->B4SOIu0 = (model->B4SOItype == NMOS) ? 0.067 : 0.025;
|
||||
if (!model->B4SOIuteGiven)
|
||||
model->B4SOIute = -1.5;
|
||||
|
||||
/*4.1 mobmod =4 */
|
||||
if (!model->B4SOIudGiven)
|
||||
model->B4SOIud = 0.0;
|
||||
if (!model->B4SOIludGiven)
|
||||
model->B4SOIlud = 0.0;
|
||||
if (!model->B4SOIwudGiven)
|
||||
model->B4SOIwud = 0.0;
|
||||
if (!model->B4SOIpudGiven)
|
||||
model->B4SOIpud1 = 0.0;
|
||||
if (!model->B4SOIud1Given)
|
||||
model->B4SOIud1 = 0.0;
|
||||
if (!model->B4SOIlud1Given)
|
||||
model->B4SOIlud1 = 0.0;
|
||||
if (!model->B4SOIwud1Given)
|
||||
model->B4SOIwud1 = 0.0;
|
||||
if (!model->B4SOIpud1Given)
|
||||
model->B4SOIpud1 = 0.0;
|
||||
if (!model->B4SOIeuGiven)
|
||||
model->B4SOIeu = (model->B4SOItype == NMOS) ? 1.67 : 1.0;
|
||||
if (!model->B4SOIleuGiven)
|
||||
model->B4SOIleu = 0.0;
|
||||
if (!model->B4SOIweuGiven)
|
||||
model->B4SOIweu = 0.0;
|
||||
if (!model->B4SOIpeuGiven)
|
||||
model->B4SOIpeu = 0.0;
|
||||
if (!model->B4SOIucsGiven)
|
||||
model->B4SOIucs = (model->B4SOItype == NMOS) ? 1.67 : 1.0;
|
||||
if (!model->B4SOIlucsGiven)
|
||||
model->B4SOIlucs =0.0;
|
||||
if (!model->B4SOIwucsGiven)
|
||||
model->B4SOIwucs =0.0;
|
||||
if (!model->B4SOIpucsGiven)
|
||||
model->B4SOIpucs =0.0;
|
||||
if (!model->B4SOIucsteGiven)
|
||||
model->B4SOIucste = -4.775e-3;
|
||||
if (!model->B4SOIlucsteGiven)
|
||||
model->B4SOIlucste = 0.0;
|
||||
if (!model->B4SOIwucsteGiven)
|
||||
model->B4SOIwucste = 0.0;
|
||||
if (!model->B4SOIpucsteGiven)
|
||||
model->B4SOIpucste = 0.0;
|
||||
|
||||
if (!model->B4SOIvoffGiven)
|
||||
model->B4SOIvoff = -0.08;
|
||||
if (!model->B4SOIdeltaGiven)
|
||||
|
|
@ -288,6 +398,8 @@ IFuid tmpName;
|
|||
model->B4SOItbox = 3e-7;
|
||||
if (!model->B4SOItsiGiven)
|
||||
model->B4SOItsi = 1e-7;
|
||||
if (!model->B4SOIetsiGiven)
|
||||
model->B4SOIetsi = 1e-7;
|
||||
if (!model->B4SOIxjGiven)
|
||||
model->B4SOIxj = model->B4SOItsi;
|
||||
if (!model->B4SOIrbodyGiven)
|
||||
|
|
@ -307,6 +419,25 @@ IFuid tmpName;
|
|||
model->B4SOIbgidl = 2.3e9; /* v4.0 */
|
||||
if (!model->B4SOIcgidlGiven) /* v4.0 */
|
||||
model->B4SOIcgidl = 0.0;
|
||||
if (!model->B4SOIrgidlGiven) /* v4.1 */
|
||||
model->B4SOIrgidl = 1.0;
|
||||
if (!model->B4SOIkgidlGiven) /* v4.1 */
|
||||
model->B4SOIkgidl = 0.0;
|
||||
if (!model->B4SOIfgidlGiven) /* v4.1 */
|
||||
model->B4SOIfgidl = 0.0;
|
||||
if (!model->B4SOIagislGiven)
|
||||
model->B4SOIagisl = model->B4SOIagidl;
|
||||
if (!model->B4SOIbgislGiven)
|
||||
model->B4SOIbgisl = model->B4SOIbgidl; /* v4.0 */
|
||||
if (!model->B4SOIcgislGiven) /* v4.0 */
|
||||
model->B4SOIcgisl = model->B4SOIcgidl;
|
||||
if (!model->B4SOIrgislGiven) /* v4.1 */
|
||||
model->B4SOIrgisl = model->B4SOIrgidl;
|
||||
if (!model->B4SOIkgislGiven) /* v4.1 */
|
||||
model->B4SOIkgisl = model->B4SOIkgidl;
|
||||
if (!model->B4SOIfgislGiven) /* v4.1 */
|
||||
model->B4SOIfgisl = model->B4SOIfgidl;
|
||||
|
||||
if (!model->B4SOIndiodeGiven) /* v4.0 */
|
||||
model->B4SOIndiode = 1.0;
|
||||
if (!model->B4SOIndiodedGiven) /* v4.0 */
|
||||
|
|
@ -400,6 +531,7 @@ IFuid tmpName;
|
|||
else
|
||||
model->B4SOIegidl = model->B4SOIngidl;
|
||||
}
|
||||
|
||||
if(model->B4SOIegidlGiven && model->B4SOIngidlGiven)
|
||||
printf("Warning: both egidl and ngidl are given. Egidl value is taken \n");
|
||||
if (!model->B4SOIlegidlGiven) {
|
||||
|
|
@ -427,6 +559,18 @@ IFuid tmpName;
|
|||
if(model->B4SOIpegidlGiven && model->B4SOIpngidlGiven)
|
||||
printf("Warning: both pegidl and pngidl are given. Pegidl value is taken \n");
|
||||
|
||||
if (!model->B4SOIegislGiven) {
|
||||
model->B4SOIegisl = model->B4SOIegidl;
|
||||
}
|
||||
if (!model->B4SOIlegislGiven) {
|
||||
model->B4SOIlegisl = model->B4SOIlegidl;
|
||||
}
|
||||
if (!model->B4SOIwegislGiven) {
|
||||
model->B4SOIwegisl = model->B4SOIwegidl;
|
||||
}
|
||||
if (!model->B4SOIpegislGiven) {
|
||||
model->B4SOIpegisl = model->B4SOIpegidl;
|
||||
}
|
||||
/* unit degree celcius */
|
||||
if (!model->B4SOItnomGiven)
|
||||
model->B4SOItnom = ckt->CKTnomTemp;
|
||||
|
|
@ -548,6 +692,12 @@ IFuid tmpName;
|
|||
model->B4SOIvecb = 0.026;
|
||||
if (!model->B4SOIvgb2Given)
|
||||
model->B4SOIvgb2 = 17;
|
||||
if (!model->B4SOIaigbcp2Given)
|
||||
model->B4SOIaigbcp2 = 0.043;
|
||||
if (!model->B4SOIbigbcp2Given)
|
||||
model->B4SOIbigbcp2 = 0.0054;
|
||||
if (!model->B4SOIcigbcp2Given)
|
||||
model->B4SOIcigbcp2 = 0.0075;
|
||||
if (!model->B4SOItoxqmGiven)
|
||||
model->B4SOItoxqm = model->B4SOItox;
|
||||
if (!model->B4SOIvoxhGiven)
|
||||
|
|
@ -612,6 +762,20 @@ IFuid tmpName;
|
|||
model->B4SOIsiid = 0.0;
|
||||
if (!model->B4SOIfbjtiiGiven)
|
||||
model->B4SOIfbjtii = 0.0;
|
||||
/*4.1 Iii model*/
|
||||
if (!model->B4SOIebjtiiGiven)
|
||||
model->B4SOIebjtii = 0.0;
|
||||
if (!model->B4SOIcbjtiiGiven)
|
||||
model->B4SOIcbjtii = 0.0;
|
||||
if (!model->B4SOIvbciGiven)
|
||||
model->B4SOIvbci = 0.0;
|
||||
if (!model->B4SOItvbciGiven)
|
||||
model->B4SOItvbci = 0.0;
|
||||
if (!model->B4SOIabjtiiGiven)
|
||||
model->B4SOIabjtii = 0.0;
|
||||
if (!model->B4SOImbjtiiGiven)
|
||||
model->B4SOImbjtii = 0.4;
|
||||
|
||||
if (!model->B4SOIesatiiGiven)
|
||||
model->B4SOIesatii = 1e7;
|
||||
if (!model->B4SOIlnGiven)
|
||||
|
|
@ -686,6 +850,12 @@ IFuid tmpName;
|
|||
model->B4SOIlbetaGB1 = 0.0;
|
||||
if (!model->B4SOIlbetaGB2Given)
|
||||
model->B4SOIlbetaGB2 = 0.0;
|
||||
if (!model->B4SOIlaigbcp2Given)
|
||||
model->B4SOIlaigbcp2 = 0.0;
|
||||
if (!model->B4SOIlbigbcp2Given)
|
||||
model->B4SOIlbigbcp2 = 0.0;
|
||||
if (!model->B4SOIlcigbcp2Given)
|
||||
model->B4SOIlcigbcp2 = 0.0;
|
||||
if (!model->B4SOIlndifGiven)
|
||||
model->B4SOIlndif = 0.0;
|
||||
if (!model->B4SOIlntrecfGiven)
|
||||
|
|
@ -757,8 +927,12 @@ IFuid tmpName;
|
|||
model->B4SOIlnsub = 0.0;
|
||||
if (!model->B4SOIlngateGiven)
|
||||
model->B4SOIlngate = 0.0;
|
||||
if (!model->B4SOIlnsdGiven)
|
||||
model->B4SOIlnsd = 0.0;
|
||||
if (!model->B4SOIlvth0Given)
|
||||
model->B4SOIlvth0 = 0.0;
|
||||
if (!model->B4SOIlvfbGiven)
|
||||
model->B4SOIlvfb = 0.0; /* v4.1 */
|
||||
if (!model->B4SOIlk1Given)
|
||||
model->B4SOIlk1 = 0.0;
|
||||
if (!model->B4SOIlk1w1Given)
|
||||
|
|
@ -867,6 +1041,18 @@ IFuid tmpName;
|
|||
model->B4SOIlalpha0 = 0.0;
|
||||
if (!model->B4SOIlfbjtiiGiven)
|
||||
model->B4SOIlfbjtii = 0.0;
|
||||
/*4.1 Iii model*/
|
||||
if (!model->B4SOIlebjtiiGiven)
|
||||
model->B4SOIlebjtii = 0.0;
|
||||
if (!model->B4SOIlcbjtiiGiven)
|
||||
model->B4SOIlcbjtii = 0.0;
|
||||
if (!model->B4SOIlvbciGiven)
|
||||
model->B4SOIlvbci = 0.0;
|
||||
if (!model->B4SOIlabjtiiGiven)
|
||||
model->B4SOIlabjtii = 0.0;
|
||||
if (!model->B4SOIlmbjtiiGiven)
|
||||
model->B4SOIlmbjtii = 0.0;
|
||||
|
||||
if (!model->B4SOIlbeta0Given)
|
||||
model->B4SOIlbeta0 = 0.0;
|
||||
if (!model->B4SOIlbeta1Given)
|
||||
|
|
@ -893,6 +1079,25 @@ IFuid tmpName;
|
|||
model->B4SOIlbgidl = 0.0;
|
||||
if (!model->B4SOIlcgidlGiven)
|
||||
model->B4SOIlcgidl = 0.0;
|
||||
if (!model->B4SOIlrgidlGiven)
|
||||
model->B4SOIlrgidl = 0.0;
|
||||
if (!model->B4SOIlkgidlGiven)
|
||||
model->B4SOIlkgidl = 0.0;
|
||||
if (!model->B4SOIlfgidlGiven)
|
||||
model->B4SOIlfgidl = 0.0;
|
||||
|
||||
if (!model->B4SOIlagislGiven)
|
||||
model->B4SOIlagisl = 0.0;
|
||||
if (!model->B4SOIlbgislGiven)
|
||||
model->B4SOIlbgisl = 0.0;
|
||||
if (!model->B4SOIlcgislGiven)
|
||||
model->B4SOIlcgisl = 0.0;
|
||||
if (!model->B4SOIlrgislGiven)
|
||||
model->B4SOIlrgisl = 0.0;
|
||||
if (!model->B4SOIlkgislGiven)
|
||||
model->B4SOIlkgisl = 0.0;
|
||||
if (!model->B4SOIlfgislGiven)
|
||||
model->B4SOIlfgisl = 0.0;
|
||||
if (!model->B4SOIlntunGiven) /* v4.0 */
|
||||
model->B4SOIlntun = 0.0;
|
||||
if (!model->B4SOIlntundGiven) /* v4.0 */
|
||||
|
|
@ -978,6 +1183,12 @@ IFuid tmpName;
|
|||
model->B4SOIwbetaGB1 = 0.0;
|
||||
if (!model->B4SOIwbetaGB2Given)
|
||||
model->B4SOIwbetaGB2 = 0.0;
|
||||
if (!model->B4SOIwaigbcp2Given)
|
||||
model->B4SOIwaigbcp2 = 0.0;
|
||||
if (!model->B4SOIwbigbcp2Given)
|
||||
model->B4SOIwbigbcp2 = 0.0;
|
||||
if (!model->B4SOIwcigbcp2Given)
|
||||
model->B4SOIwcigbcp2 = 0.0;
|
||||
if (!model->B4SOIwndifGiven)
|
||||
model->B4SOIwndif = 0.0;
|
||||
if (!model->B4SOIwntrecfGiven)
|
||||
|
|
@ -1050,8 +1261,12 @@ IFuid tmpName;
|
|||
model->B4SOIwnsub = 0.0;
|
||||
if (!model->B4SOIwngateGiven)
|
||||
model->B4SOIwngate = 0.0;
|
||||
if (!model->B4SOIwnsdGiven)
|
||||
model->B4SOIwnsd = 0.0;
|
||||
if (!model->B4SOIwvth0Given)
|
||||
model->B4SOIwvth0 = 0.0;
|
||||
if (!model->B4SOIwvfbGiven)
|
||||
model->B4SOIwvfb = 0.0; /* v4.1 */
|
||||
if (!model->B4SOIwk1Given)
|
||||
model->B4SOIwk1 = 0.0;
|
||||
if (!model->B4SOIwk1w1Given)
|
||||
|
|
@ -1160,6 +1375,17 @@ IFuid tmpName;
|
|||
model->B4SOIwalpha0 = 0.0;
|
||||
if (!model->B4SOIwfbjtiiGiven)
|
||||
model->B4SOIwfbjtii = 0.0;
|
||||
/*4.1 Iii model*/
|
||||
if (!model->B4SOIwebjtiiGiven)
|
||||
model->B4SOIwebjtii = 0.0;
|
||||
if (!model->B4SOIwcbjtiiGiven)
|
||||
model->B4SOIwcbjtii = 0.0;
|
||||
if (!model->B4SOIwvbciGiven)
|
||||
model->B4SOIwvbci = 0.0;
|
||||
if (!model->B4SOIwabjtiiGiven)
|
||||
model->B4SOIwabjtii = 0.0;
|
||||
if (!model->B4SOIwmbjtiiGiven)
|
||||
model->B4SOIwmbjtii = 0.0;
|
||||
if (!model->B4SOIwbeta0Given)
|
||||
model->B4SOIwbeta0 = 0.0;
|
||||
if (!model->B4SOIwbeta1Given)
|
||||
|
|
@ -1186,6 +1412,25 @@ IFuid tmpName;
|
|||
model->B4SOIwbgidl = 0.0;
|
||||
if (!model->B4SOIwcgidlGiven)
|
||||
model->B4SOIwcgidl = 0.0;
|
||||
if (!model->B4SOIwrgidlGiven)
|
||||
model->B4SOIwrgidl = 0.0;
|
||||
if (!model->B4SOIwkgidlGiven)
|
||||
model->B4SOIwkgidl = 0.0;
|
||||
if (!model->B4SOIwfgidlGiven)
|
||||
model->B4SOIwfgidl = 0.0;
|
||||
|
||||
if (!model->B4SOIwagislGiven)
|
||||
model->B4SOIwagisl = 0.0;
|
||||
if (!model->B4SOIwbgislGiven)
|
||||
model->B4SOIwbgisl = 0.0;
|
||||
if (!model->B4SOIwcgislGiven)
|
||||
model->B4SOIwcgisl = 0.0;
|
||||
if (!model->B4SOIwrgislGiven)
|
||||
model->B4SOIwrgisl = 0.0;
|
||||
if (!model->B4SOIwkgislGiven)
|
||||
model->B4SOIwkgisl = 0.0;
|
||||
if (!model->B4SOIwfgislGiven)
|
||||
model->B4SOIwfgisl = 0.0;
|
||||
if (!model->B4SOIwntunGiven) /* v4.0 */
|
||||
model->B4SOIwntun = 0.0;
|
||||
if (!model->B4SOIwntundGiven) /* v4.0 */
|
||||
|
|
@ -1272,6 +1517,12 @@ IFuid tmpName;
|
|||
model->B4SOIpbetaGB1 = 0.0;
|
||||
if (!model->B4SOIpbetaGB2Given)
|
||||
model->B4SOIpbetaGB2 = 0.0;
|
||||
if (!model->B4SOIpaigbcp2Given)
|
||||
model->B4SOIpaigbcp2 = 0.0;
|
||||
if (!model->B4SOIpbigbcp2Given)
|
||||
model->B4SOIpbigbcp2 = 0.0;
|
||||
if (!model->B4SOIpcigbcp2Given)
|
||||
model->B4SOIpcigbcp2 = 0.0;
|
||||
if (!model->B4SOIpndifGiven)
|
||||
model->B4SOIpndif = 0.0;
|
||||
if (!model->B4SOIpntrecfGiven)
|
||||
|
|
@ -1344,8 +1595,12 @@ IFuid tmpName;
|
|||
model->B4SOIpnsub = 0.0;
|
||||
if (!model->B4SOIpngateGiven)
|
||||
model->B4SOIpngate = 0.0;
|
||||
if (!model->B4SOIpnsdGiven)
|
||||
model->B4SOIpnsd = 0.0;
|
||||
if (!model->B4SOIpvth0Given)
|
||||
model->B4SOIpvth0 = 0.0;
|
||||
if (!model->B4SOIpvfbGiven)
|
||||
model->B4SOIpvfb = 0.0; /* v4.1 */
|
||||
if (!model->B4SOIpk1Given)
|
||||
model->B4SOIpk1 = 0.0;
|
||||
if (!model->B4SOIpk1w1Given)
|
||||
|
|
@ -1454,6 +1709,17 @@ IFuid tmpName;
|
|||
model->B4SOIpalpha0 = 0.0;
|
||||
if (!model->B4SOIpfbjtiiGiven)
|
||||
model->B4SOIpfbjtii = 0.0;
|
||||
/*4.1 Iii model*/
|
||||
if (!model->B4SOIpebjtiiGiven)
|
||||
model->B4SOIpebjtii = 0.0;
|
||||
if (!model->B4SOIpcbjtiiGiven)
|
||||
model->B4SOIpcbjtii = 0.0;
|
||||
if (!model->B4SOIpvbciGiven)
|
||||
model->B4SOIpvbci = 0.0;
|
||||
if (!model->B4SOIpabjtiiGiven)
|
||||
model->B4SOIpabjtii = 0.0;
|
||||
if (!model->B4SOIpmbjtiiGiven)
|
||||
model->B4SOIpmbjtii = 0.0;
|
||||
if (!model->B4SOIpbeta0Given)
|
||||
model->B4SOIpbeta0 = 0.0;
|
||||
if (!model->B4SOIpbeta1Given)
|
||||
|
|
@ -1480,6 +1746,25 @@ IFuid tmpName;
|
|||
model->B4SOIpbgidl = 0.0;
|
||||
if (!model->B4SOIpcgidlGiven)
|
||||
model->B4SOIpcgidl = 0.0;
|
||||
if (!model->B4SOIprgidlGiven)
|
||||
model->B4SOIprgidl = 0.0;
|
||||
if (!model->B4SOIpkgidlGiven)
|
||||
model->B4SOIpkgidl = 0.0;
|
||||
if (!model->B4SOIpfgidlGiven)
|
||||
model->B4SOIpfgidl = 0.0;
|
||||
|
||||
if (!model->B4SOIpagislGiven)
|
||||
model->B4SOIpagisl = 0.0;
|
||||
if (!model->B4SOIpbgislGiven)
|
||||
model->B4SOIpbgisl = 0.0;
|
||||
if (!model->B4SOIpcgislGiven)
|
||||
model->B4SOIpcgisl = 0.0;
|
||||
if (!model->B4SOIprgislGiven)
|
||||
model->B4SOIprgisl = 0.0;
|
||||
if (!model->B4SOIpkgislGiven)
|
||||
model->B4SOIpkgisl = 0.0;
|
||||
if (!model->B4SOIpfgislGiven)
|
||||
model->B4SOIpfgisl = 0.0;
|
||||
if (!model->B4SOIpntunGiven) /* v4.0 */
|
||||
model->B4SOIpntun = 0.0;
|
||||
if (!model->B4SOIpntundGiven) /* v4.0 */
|
||||
|
|
@ -1631,18 +1916,42 @@ IFuid tmpName;
|
|||
model->B4SOIdvtp0 = 0.0;
|
||||
if (!model->B4SOIdvtp1Given) /* v4.0 for Vth */
|
||||
model->B4SOIdvtp1 = 0.0;
|
||||
if (!model->B4SOIdvtp2Given) /* v4.1 for Vth */
|
||||
model->B4SOIdvtp2 = 0.0;
|
||||
if (!model->B4SOIdvtp3Given) /* v4.1 for Vth */
|
||||
model->B4SOIdvtp3 = 0.0;
|
||||
if (!model->B4SOIdvtp4Given) /* v4.1 for Vth */
|
||||
model->B4SOIdvtp4 = 0.0;
|
||||
if (!model->B4SOIldvtp0Given) /* v4.0 for Vth */
|
||||
model->B4SOIldvtp0 = 0.0;
|
||||
if (!model->B4SOIldvtp1Given) /* v4.0 for Vth */
|
||||
model->B4SOIldvtp1 = 0.0;
|
||||
if (!model->B4SOIldvtp2Given) /* v4.1 for Vth */
|
||||
model->B4SOIldvtp2 = 0.0;
|
||||
if (!model->B4SOIldvtp3Given) /* v4.1 for Vth */
|
||||
model->B4SOIldvtp3 = 0.0;
|
||||
if (!model->B4SOIldvtp4Given) /* v4.1 for Vth */
|
||||
model->B4SOIldvtp4 = 0.0;
|
||||
if (!model->B4SOIwdvtp0Given) /* v4.0 for Vth */
|
||||
model->B4SOIwdvtp0 = 0.0;
|
||||
if (!model->B4SOIwdvtp1Given) /* v4.0 for Vth */
|
||||
model->B4SOIwdvtp1 = 0.0;
|
||||
if (!model->B4SOIwdvtp2Given) /* v4.1 for Vth */
|
||||
model->B4SOIwdvtp2 = 0.0;
|
||||
if (!model->B4SOIwdvtp3Given) /* v4.1 for Vth */
|
||||
model->B4SOIwdvtp3 = 0.0;
|
||||
if (!model->B4SOIwdvtp4Given) /* v4.1 for Vth */
|
||||
model->B4SOIwdvtp4 = 0.0;
|
||||
if (!model->B4SOIpdvtp0Given) /* v4.0 for Vth */
|
||||
model->B4SOIpdvtp0 = 0.0;
|
||||
if (!model->B4SOIpdvtp1Given) /* v4.0 for Vth */
|
||||
model->B4SOIpdvtp1 = 0.0;
|
||||
if (!model->B4SOIpdvtp2Given) /* v4.1 for Vth */
|
||||
model->B4SOIpdvtp2 = 0.0;
|
||||
if (!model->B4SOIpdvtp3Given) /* v4.1 for Vth */
|
||||
model->B4SOIpdvtp3 = 0.0;
|
||||
if (!model->B4SOIpdvtp4Given) /* v4.1 for Vth */
|
||||
model->B4SOIpdvtp4 = 0.0;
|
||||
if (!model->B4SOIminvGiven) /* v4.0 for Vgsteff */
|
||||
model->B4SOIminv = 0.0;
|
||||
if (!model->B4SOIlminvGiven) /* v4.0 for Vgsteff */
|
||||
|
|
@ -1722,17 +2031,35 @@ IFuid tmpName;
|
|||
if (!model->B4SOIlodeta0Given)
|
||||
model->B4SOIlodeta0 = 1.0;
|
||||
/* stress effect end */
|
||||
|
||||
if (!model->B4SOIfdModGiven)
|
||||
model->B4SOIfdMod = 0;
|
||||
if (!model->B4SOIvsceGiven)
|
||||
model->B4SOIvsce = 0.0;
|
||||
if (!model->B4SOIcdsbsGiven)
|
||||
model->B4SOIcdsbs = 0.0;
|
||||
|
||||
if (!model->B4SOIminvcvGiven) /* v4.1 for Vgsteffcv */
|
||||
model->B4SOIminvcv = 0.0;
|
||||
if (!model->B4SOIlminvcvGiven) /* v4.1 for Vgsteffcv */
|
||||
model->B4SOIlminvcv = 0.0;
|
||||
if (!model->B4SOIwminvcvGiven) /* v4.1 for Vgsteffcv */
|
||||
model->B4SOIwminvcv = 0.0;
|
||||
if (!model->B4SOIpminvcvGiven) /* v4.1 for Vgsteffcv */
|
||||
model->B4SOIpminvcv = 0.0;
|
||||
if (!model->B4SOIvoffcvGiven)
|
||||
model->B4SOIvoffcv = -0.08;
|
||||
if (!model->B4SOIlvoffcvGiven)
|
||||
model->B4SOIlvoffcv = 0.0;
|
||||
if (!model->B4SOIwvoffcvGiven)
|
||||
model->B4SOIwvoffcv = 0.0;
|
||||
if (!model->B4SOIpvoffcvGiven)
|
||||
model->B4SOIpvoffcv = 0.0;
|
||||
/* loop through all the instances of the model */
|
||||
for (here = model->B4SOIinstances; here != NULL ;
|
||||
here=here->B4SOInextInstance)
|
||||
{
|
||||
if (here->B4SOIowner == ARCHme)
|
||||
{
|
||||
/* allocate a chunk of the state vector */
|
||||
here->B4SOIstates = *states;
|
||||
*states += B4SOInumStates;
|
||||
}
|
||||
{ /* allocate a chunk of the state vector */
|
||||
here->B4SOIstates = *states;
|
||||
*states += B4SOInumStates;
|
||||
/* perform the parameter defaulting */
|
||||
if (!here->B4SOIdrainAreaGiven)
|
||||
here->B4SOIdrainArea = 0.0;
|
||||
|
|
@ -1772,8 +2099,9 @@ IFuid tmpName;
|
|||
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)
|
||||
|
|
@ -1786,6 +2114,8 @@ IFuid tmpName;
|
|||
here->B4SOIpsbcp = 0;
|
||||
if (!here->B4SOIagbcpGiven)
|
||||
here->B4SOIagbcp = 0;
|
||||
if (!here->B4SOIagbcp2Given)
|
||||
here->B4SOIagbcp2 = 0; /* v4.1 */
|
||||
if (!here->B4SOIagbcpdGiven)
|
||||
here->B4SOIagbcpd = here->B4SOIagbcp;
|
||||
if (!here->B4SOIaebcpGiven)
|
||||
|
|
@ -1795,20 +2125,13 @@ IFuid tmpName;
|
|||
here->B4SOIoff = 0;
|
||||
|
||||
/* process drain series resistance */
|
||||
|
||||
if ( ((model->B4SOIsheetResistance > 0.0) &&
|
||||
(here->B4SOIdrainSquares > 0.0 ) &&
|
||||
(here->B4SOIdNodePrime == 0)) )
|
||||
{ error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"drain");
|
||||
if(error) return(error);
|
||||
here->B4SOIdNodePrime = tmp->number;
|
||||
if (ckt->CKTcopyNodesets) {
|
||||
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
|
||||
if (tmpNode->nsGiven) {
|
||||
tmp->nodeset=tmpNode->nodeset;
|
||||
tmp->nsGiven=tmpNode->nsGiven;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{ here->B4SOIdNodePrime = here->B4SOIdNode;
|
||||
|
|
@ -1821,14 +2144,6 @@ IFuid tmpName;
|
|||
{ error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"source");
|
||||
if(error) return(error);
|
||||
here->B4SOIsNodePrime = tmp->number;
|
||||
if (ckt->CKTcopyNodesets) {
|
||||
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
|
||||
if (tmpNode->nsGiven) {
|
||||
tmp->nodeset=tmpNode->nodeset;
|
||||
tmp->nsGiven=tmpNode->nsGiven;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{ here->B4SOIsNodePrime = here->B4SOIsNode;
|
||||
|
|
@ -1836,13 +2151,28 @@ IFuid tmpName;
|
|||
|
||||
/* process effective silicon film thickness */
|
||||
model->B4SOIcbox = 3.453133e-11 / model->B4SOItbox;
|
||||
model->B4SOIcsi = 1.03594e-10 / model->B4SOItsi;
|
||||
if(model->B4SOImtrlMod)
|
||||
{
|
||||
model->B4SOIcsi = 1.03594e-10 / model->B4SOIetsi;
|
||||
}
|
||||
else
|
||||
{
|
||||
model->B4SOIcsi = 1.03594e-10 / model->B4SOItsi;
|
||||
}
|
||||
Cboxt = model->B4SOIcbox * model->B4SOIcsi / (model->B4SOIcbox + model->B4SOIcsi);
|
||||
|
||||
|
||||
/* v3.2 */
|
||||
if(model->B4SOImtrlMod)
|
||||
{
|
||||
Qsi = Charge_q * model->B4SOInpeak
|
||||
* (1.0 + model->B4SOIlpe0 / here->B4SOIl) * 1e6 * model->B4SOIetsi;
|
||||
}
|
||||
else
|
||||
{
|
||||
Qsi = Charge_q * model->B4SOInpeak
|
||||
* (1.0 + model->B4SOIlpe0 / here->B4SOIl) * 1e6 * model->B4SOItsi;
|
||||
}
|
||||
Vbs0t = 0.8 - 0.5 * Qsi / model->B4SOIcsi + model->B4SOIvbsa;
|
||||
|
||||
if (!here->B4SOIsoiModGiven)
|
||||
|
|
@ -2179,8 +2509,13 @@ if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\
|
|||
TSTALLOC(B4SOIBpPtr, B4SOIbNode, B4SOIpNode)
|
||||
TSTALLOC(B4SOIPbPtr, B4SOIpNode, B4SOIbNode)
|
||||
TSTALLOC(B4SOIPpPtr, B4SOIpNode, B4SOIpNode)
|
||||
|
||||
/* 4.1 for Igb2_agbcp2 */
|
||||
TSTALLOC(B4SOIPgPtr , B4SOIpNode, B4SOIgNode)
|
||||
TSTALLOC(B4SOIGpPtr , B4SOIgNode, B4SOIpNode)
|
||||
}
|
||||
|
||||
|
||||
/* v3.1 added for RF */
|
||||
if (here->B4SOIrgateMod != 0)
|
||||
{ TSTALLOC(B4SOIGEgePtr, B4SOIgNodeExt, B4SOIgNodeExt)
|
||||
|
|
@ -2347,4 +2682,3 @@ B4SOIunsetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
#endif
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soitemp.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soitemp.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
/* Lmin, Lmax, Wmin, Wmax */
|
||||
|
|
@ -23,6 +25,7 @@
|
|||
#define KboQ 8.617087e-5 /* Kb / q where q = 1.60219e-19 */
|
||||
#define EPSOX 3.453133e-11
|
||||
#define EPSSI 1.03594e-10
|
||||
#define EPS0 8.85418e-12
|
||||
#define PI 3.141592654
|
||||
#define Charge_q 1.60219e-19
|
||||
#define Eg300 1.115 /* energy gap at 300K */
|
||||
|
|
@ -48,20 +51,30 @@ B4SOItemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
register B4SOImodel *model = (B4SOImodel*) inModel;
|
||||
register B4SOIinstance *here;
|
||||
struct b4soiSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL;
|
||||
double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5;
|
||||
double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, T6;
|
||||
double Ldrn=0.0, Wdrn;
|
||||
double Temp, TempRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom, TRatio;
|
||||
double Temp, TempRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom;
|
||||
double SDphi, SDgamma;
|
||||
double Inv_saref, Inv_sbref, Inv_sa, Inv_sb, rho, dvth0_lod;
|
||||
double W_tmp, Inv_ODeff, OD_offset, dk2_lod, deta0_lod, kvsat=0.0;
|
||||
double W_tmp, Inv_ODeff, OD_offset, dk2_lod, deta0_lod, kvsat;
|
||||
int Size_Not_Found, i;
|
||||
double PowWeffWr, T10; /*v4.0 */
|
||||
double Vtm0eot, Vtmeot,vbieot,phieot,sqrtphieot,vddeot;
|
||||
double Vgs_eff,Vgsteff, V0, Vth,Vgst;
|
||||
double lt1,ltw;
|
||||
double TempRatioMinus1;
|
||||
double n, VgstNVt, ExpArg, sqrtPhisExt,ExpVgst,Vgst2Vtm,vtfbphi2eot;
|
||||
double DIBL_Sft,Lpe_Vb,DITS_Sft,DeltVthtemp, DITS_Sft2;
|
||||
double Theta0,Delt_vth,DeltVthw;
|
||||
double niter,toxpf,toxpi, Tcen;
|
||||
double n0;
|
||||
|
||||
|
||||
|
||||
/* v2.0 release */
|
||||
double tmp3, T7;
|
||||
|
||||
/*4.1*/
|
||||
double epsrox, toxe, epssub;
|
||||
|
||||
/* loop through all the B4SOI device models */
|
||||
for (; model != NULL; model = model->B4SOInextModel)
|
||||
|
|
@ -75,29 +88,64 @@ double tmp3, T7;
|
|||
|
||||
Tnom = model->B4SOItnom;
|
||||
TempRatio = Temp / Tnom;
|
||||
|
||||
|
||||
if(model->B4SOImtrlMod)
|
||||
{
|
||||
epsrox = 3.9;
|
||||
toxe = model->B4SOIeot;
|
||||
epssub = EPS0 * model->B4SOIepsrsub;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
epsrox = model->B4SOIepsrox;
|
||||
toxe = model->B4SOItox;
|
||||
epssub = EPSSI;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*model->B4SOIcox = epsrox * EPS0 / toxe;*/
|
||||
|
||||
model->B4SOIvcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14));
|
||||
model->B4SOIfactor1 = sqrt(EPSSI / EPSOX * model->B4SOItox);
|
||||
if(model->B4SOImtrlMod == 0)
|
||||
model->B4SOIfactor1 = sqrt(EPSSI / EPSOX * model->B4SOItox);
|
||||
else
|
||||
model->B4SOIfactor1 = sqrt(epssub / (epsrox*EPS0) * toxe);/*4.1*/
|
||||
|
||||
if (model->B4SOImtrlMod==0)
|
||||
{
|
||||
Vtm0 = KboQ * Tnom;
|
||||
Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0);
|
||||
model->B4SOIeg0 = Eg0;
|
||||
model->B4SOIvtm = KboQ * Temp;
|
||||
|
||||
Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0);
|
||||
|
||||
/* ni is in cm^-3 */
|
||||
ni = 1.45e10 * (Temp / 300.15) * sqrt(Temp / 300.15)
|
||||
* exp(21.5565981 - Eg / (2.0 * model->B4SOIvtm));
|
||||
|
||||
}
|
||||
else
|
||||
{ Vtm0 = KboQ * Tnom;
|
||||
Eg0 = model->B4SOIbg0sub - model->B4SOItbgasub * Tnom * Tnom
|
||||
/ (Tnom + model->B4SOItbgbsub);
|
||||
model->B4SOIeg0 = Eg0;
|
||||
model->B4SOIvtm = KboQ * Temp;
|
||||
Eg = model->B4SOIbg0sub - model->B4SOItbgasub * Temp * Temp
|
||||
/ (Temp + model->B4SOItbgbsub);
|
||||
|
||||
ni = model->B4SOIni0sub * (Temp / Tnom) * sqrt(Temp / Tnom)
|
||||
* exp(Eg0/(2.0*Vtm0) - Eg / (2.0 * model->B4SOIvtm));
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* loop through all the instances of the model */
|
||||
/* MCJ: Length and Width not initialized */
|
||||
for (here = model->B4SOIinstances; here != NULL;
|
||||
here = here->B4SOInextInstance)
|
||||
{
|
||||
if (here->B4SOIowner != ARCHme)
|
||||
continue;
|
||||
|
||||
here->B4SOIrbodyext = here->B4SOIbodySquares *
|
||||
model->B4SOIrbsh;
|
||||
pSizeDependParamKnot = model->pSizeDependParamKnot;
|
||||
|
|
@ -119,7 +167,7 @@ double tmp3, T7;
|
|||
}
|
||||
|
||||
if (Size_Not_Found)
|
||||
{ pParam = (struct b4soiSizeDependParam *)tmalloc(
|
||||
{ pParam = (struct b4soiSizeDependParam *)malloc(
|
||||
sizeof(struct b4soiSizeDependParam));
|
||||
if (pLastKnot == NULL)
|
||||
model->pSizeDependParamKnot = pParam;
|
||||
|
|
@ -289,10 +337,22 @@ double tmp3, T7;
|
|||
+ model->B4SOIlngate * Inv_L
|
||||
+ model->B4SOIwngate * Inv_W
|
||||
+ model->B4SOIpngate * Inv_LW;
|
||||
/*4.1*/
|
||||
pParam->B4SOInsd = model->B4SOInsd
|
||||
+ model->B4SOIlnsd * Inv_L
|
||||
+ model->B4SOIwnsd * Inv_W
|
||||
+ model->B4SOIpnsd * Inv_LW;
|
||||
|
||||
|
||||
|
||||
pParam->B4SOIvth0 = model->B4SOIvth0
|
||||
+ model->B4SOIlvth0 * Inv_L
|
||||
+ model->B4SOIwvth0 * Inv_W
|
||||
+ model->B4SOIpvth0 * Inv_LW;
|
||||
pParam->B4SOIvfb = model->B4SOIvfb
|
||||
+ model->B4SOIlvfb * Inv_L
|
||||
+ model->B4SOIwvfb * Inv_W
|
||||
+ model->B4SOIpvfb * Inv_LW; /* v4.1 */
|
||||
pParam->B4SOIk1 = model->B4SOIk1
|
||||
+ model->B4SOIlk1 * Inv_L
|
||||
+ model->B4SOIwk1 * Inv_W
|
||||
|
|
@ -513,6 +573,29 @@ double tmp3, T7;
|
|||
+ model->B4SOIlfbjtii * Inv_L
|
||||
+ model->B4SOIwfbjtii * Inv_W
|
||||
+ model->B4SOIpfbjtii * Inv_LW;
|
||||
/*4.1 Iii model*/
|
||||
pParam->B4SOIebjtii = model->B4SOIebjtii
|
||||
+ model->B4SOIlebjtii * Inv_L
|
||||
+ model->B4SOIwebjtii * Inv_W
|
||||
+ model->B4SOIpebjtii * Inv_LW;
|
||||
pParam->B4SOIcbjtii = model->B4SOIcbjtii
|
||||
+ model->B4SOIlcbjtii * Inv_L
|
||||
+ model->B4SOIwcbjtii * Inv_W
|
||||
+ model->B4SOIpcbjtii * Inv_LW;
|
||||
pParam->B4SOIvbci = model->B4SOIvbci
|
||||
+ model->B4SOIlvbci * Inv_L
|
||||
+ model->B4SOIwvbci * Inv_W
|
||||
+ model->B4SOIpvbci * Inv_LW;
|
||||
|
||||
pParam->B4SOIabjtii = model->B4SOIabjtii
|
||||
+ model->B4SOIlabjtii * Inv_L
|
||||
+ model->B4SOIwabjtii * Inv_W
|
||||
+ model->B4SOIpabjtii * Inv_LW;
|
||||
pParam->B4SOImbjtii = model->B4SOImbjtii
|
||||
+ model->B4SOIlmbjtii * Inv_L
|
||||
+ model->B4SOIwmbjtii * Inv_W
|
||||
+ model->B4SOIpmbjtii * Inv_LW;
|
||||
|
||||
pParam->B4SOIbeta0 = model->B4SOIbeta0
|
||||
+ model->B4SOIlbeta0 * Inv_L
|
||||
+ model->B4SOIwbeta0 * Inv_W
|
||||
|
|
@ -569,6 +652,47 @@ double tmp3, T7;
|
|||
+ model->B4SOIlegidl * Inv_L
|
||||
+ model->B4SOIwegidl * Inv_W
|
||||
+ model->B4SOIpegidl * Inv_LW;
|
||||
pParam->B4SOIrgidl = model->B4SOIrgidl
|
||||
+ model->B4SOIlrgidl * Inv_L
|
||||
+ model->B4SOIwrgidl * Inv_W
|
||||
+ model->B4SOIprgidl * Inv_LW;
|
||||
pParam->B4SOIkgidl = model->B4SOIkgidl
|
||||
+ model->B4SOIlkgidl * Inv_L
|
||||
+ model->B4SOIwkgidl * Inv_W
|
||||
+ model->B4SOIpkgidl * Inv_LW;
|
||||
pParam->B4SOIfgidl = model->B4SOIfgidl
|
||||
+ model->B4SOIlfgidl * Inv_L
|
||||
+ model->B4SOIwfgidl * Inv_W
|
||||
+ model->B4SOIpfgidl * Inv_LW;
|
||||
pParam->B4SOIagisl = model->B4SOIagisl
|
||||
+ model->B4SOIlagisl * Inv_L
|
||||
+ model->B4SOIwagisl * Inv_W
|
||||
+ model->B4SOIpagisl * Inv_LW;
|
||||
pParam->B4SOIbgisl = model->B4SOIbgisl
|
||||
+ model->B4SOIlbgisl * Inv_L
|
||||
+ model->B4SOIwbgisl * Inv_W
|
||||
+ model->B4SOIpbgisl * Inv_LW;
|
||||
pParam->B4SOIcgisl = model->B4SOIcgisl
|
||||
+ model->B4SOIlcgisl * Inv_L
|
||||
+ model->B4SOIwcgisl * Inv_W
|
||||
+ model->B4SOIpcgisl * Inv_LW;
|
||||
pParam->B4SOIegisl = model->B4SOIegisl
|
||||
+ model->B4SOIlegisl * Inv_L
|
||||
+ model->B4SOIwegisl * Inv_W
|
||||
+ model->B4SOIpegisl * Inv_LW;
|
||||
pParam->B4SOIrgisl = model->B4SOIrgisl
|
||||
+ model->B4SOIlrgisl * Inv_L
|
||||
+ model->B4SOIwrgisl * Inv_W
|
||||
+ model->B4SOIprgisl * Inv_LW;
|
||||
pParam->B4SOIkgisl = model->B4SOIkgisl
|
||||
+ model->B4SOIlkgisl * Inv_L
|
||||
+ model->B4SOIwkgisl * Inv_W
|
||||
+ model->B4SOIpkgisl * Inv_LW;
|
||||
pParam->B4SOIfgisl = model->B4SOIfgisl
|
||||
+ model->B4SOIlfgisl * Inv_L
|
||||
+ model->B4SOIwfgisl * Inv_W
|
||||
+ model->B4SOIpfgisl * Inv_LW;
|
||||
|
||||
pParam->B4SOIntun = model->B4SOIntun /* v4.0 */
|
||||
+ model->B4SOIlntun * Inv_L
|
||||
+ model->B4SOIwntun * Inv_W
|
||||
|
|
@ -752,6 +876,29 @@ double tmp3, T7;
|
|||
+ model->B4SOIlute * Inv_L
|
||||
+ model->B4SOIwute * Inv_W
|
||||
+ model->B4SOIpute * Inv_LW;
|
||||
|
||||
/*4.1 mobmod=4*/
|
||||
pParam->B4SOIud = model->B4SOIud
|
||||
+ model->B4SOIud * Inv_L
|
||||
+ model->B4SOIwud * Inv_W
|
||||
+ model->B4SOIpud * Inv_LW;
|
||||
pParam->B4SOIud1 = model->B4SOIud1
|
||||
+ model->B4SOIlud1 * Inv_L
|
||||
+ model->B4SOIwud1 * Inv_W
|
||||
+ model->B4SOIpud1 * Inv_LW;
|
||||
pParam->B4SOIeu = model->B4SOIeu
|
||||
+ model->B4SOIleu * Inv_L
|
||||
+ model->B4SOIweu * Inv_W
|
||||
+ model->B4SOIpeu * Inv_LW;
|
||||
pParam->B4SOIucs = model->B4SOIucs
|
||||
+ model->B4SOIlucs * Inv_L
|
||||
+ model->B4SOIwucs * Inv_W
|
||||
+ model->B4SOIpucs * Inv_LW;
|
||||
pParam->B4SOIucste = model->B4SOIucste
|
||||
+ model->B4SOIlucste * Inv_L
|
||||
+ model->B4SOIwucste * Inv_W
|
||||
+ model->B4SOIpucste * Inv_LW;
|
||||
|
||||
pParam->B4SOIkt1 = model->B4SOIkt1
|
||||
+ model->B4SOIlkt1 * Inv_L
|
||||
+ model->B4SOIwkt1 * Inv_W
|
||||
|
|
@ -875,10 +1022,26 @@ double tmp3, T7;
|
|||
+ model->B4SOIldvtp1 * Inv_L
|
||||
+ model->B4SOIwdvtp1 * Inv_W
|
||||
+ model->B4SOIpdvtp1 * Inv_LW; /* v4.0 */
|
||||
pParam->B4SOIdvtp2 = model->B4SOIdvtp2
|
||||
+ model->B4SOIldvtp2 * Inv_L
|
||||
+ model->B4SOIwdvtp2 * Inv_W
|
||||
+ model->B4SOIpdvtp2 * Inv_LW; /* v4.1 */
|
||||
pParam->B4SOIdvtp3 = model->B4SOIdvtp3
|
||||
+ model->B4SOIldvtp3 * Inv_L
|
||||
+ model->B4SOIwdvtp3 * Inv_W
|
||||
+ model->B4SOIpdvtp3 * Inv_LW; /* v4.1 */
|
||||
pParam->B4SOIdvtp4 = model->B4SOIdvtp4
|
||||
+ model->B4SOIldvtp4 * Inv_L
|
||||
+ model->B4SOIwdvtp4 * Inv_W
|
||||
+ model->B4SOIpdvtp4 * Inv_LW; /* v4.1 */
|
||||
pParam->B4SOIminv = model->B4SOIminv
|
||||
+ model->B4SOIlminv * Inv_L
|
||||
+ model->B4SOIwminv * Inv_W
|
||||
+ model->B4SOIpminv * Inv_LW; /* v4.0 */
|
||||
pParam->B4SOIminvcv = model->B4SOIminvcv
|
||||
+ model->B4SOIlminvcv * Inv_L
|
||||
+ model->B4SOIwminvcv * Inv_W
|
||||
+ model->B4SOIpminvcv * Inv_LW; /* v4.1 */
|
||||
pParam->B4SOIfprout = model->B4SOIfprout
|
||||
+ model->B4SOIlfprout * Inv_L
|
||||
+ model->B4SOIwfprout * Inv_W
|
||||
|
|
@ -891,11 +1054,27 @@ double tmp3, T7;
|
|||
+ model->B4SOIlpditsd * Inv_L
|
||||
+ model->B4SOIwpditsd * Inv_W
|
||||
+ model->B4SOIppditsd * Inv_LW; /* v4.0 */
|
||||
pParam->B4SOIaigbcp2 = model->B4SOIaigbcp2
|
||||
+ model->B4SOIlaigbcp2 * Inv_L
|
||||
+ model->B4SOIwaigbcp2 * Inv_W
|
||||
+ model->B4SOIpaigbcp2 * Inv_LW; /* v4.0 */
|
||||
pParam->B4SOIbigbcp2 = model->B4SOIbigbcp2
|
||||
+ model->B4SOIlbigbcp2 * Inv_L
|
||||
+ model->B4SOIwbigbcp2 * Inv_W
|
||||
+ model->B4SOIpbigbcp2 * Inv_LW; /* v4.0 */
|
||||
pParam->B4SOIcigbcp2 = model->B4SOIcigbcp2
|
||||
+ model->B4SOIlcigbcp2 * Inv_L
|
||||
+ model->B4SOIwcigbcp2 * Inv_W
|
||||
+ model->B4SOIpcigbcp2 * Inv_LW; /* v4.0 */
|
||||
|
||||
/* Added for binning - END */
|
||||
|
||||
/* v4.0 add mstar for Vgsteff */
|
||||
pParam->B4SOImstar = 0.5 + atan(pParam->B4SOIminv) / PI;
|
||||
if (model->B4SOIvgstcvMod == 0)
|
||||
printf("vgstcvMod = 0, users are suggested to use vgstcvMod = 1 or 2.\n");
|
||||
/* v4.1 add mstarcv for Vgsteffcv */
|
||||
pParam->B4SOImstarcv = 0.5 + atan(pParam->B4SOIminvcv) / PI;
|
||||
|
||||
T0 = (TempRatio - 1.0);
|
||||
|
||||
|
|
@ -1032,7 +1211,7 @@ double tmp3, T7;
|
|||
pParam->B4SOIjrecd = pParam->B4SOIidrec * T2;
|
||||
T7 = pParam->B4SOIxtund * (TempRatio - 1);
|
||||
DEXP(T7, T0);
|
||||
pParam->B4SOIjtund = pParam->B4SOIistun * T0;
|
||||
pParam->B4SOIjtund = pParam->B4SOIidtun * T0;
|
||||
|
||||
if (pParam->B4SOInsub > 0)
|
||||
pParam->B4SOIvfbb = -model->B4SOItype * model->B4SOIvtm *
|
||||
|
|
@ -1071,9 +1250,9 @@ double tmp3, T7;
|
|||
|
||||
if (!model->B4SOIcsdminGiven) {
|
||||
/* Cdmin */
|
||||
tmp = sqrt(2.0 * EPSSI * SDphi / (Charge_q *
|
||||
tmp = sqrt(2.0 * epssub * SDphi / (Charge_q *
|
||||
fabs(pParam->B4SOInsub) * 1.0e6));
|
||||
tmp1 = EPSSI / tmp;
|
||||
tmp1 = epssub / tmp;
|
||||
model->B4SOIcsdmin = tmp1 * model->B4SOIcbox /
|
||||
(tmp1 + model->B4SOIcbox);
|
||||
}
|
||||
|
|
@ -1085,26 +1264,44 @@ double tmp3, T7;
|
|||
pParam->B4SOIsqrtPhi = sqrt(pParam->B4SOIphi);
|
||||
pParam->B4SOIphis3 = pParam->B4SOIsqrtPhi * pParam->B4SOIphi;
|
||||
|
||||
pParam->B4SOIXdep0 = sqrt(2.0 * EPSSI / (Charge_q
|
||||
pParam->B4SOIXdep0 = sqrt(2.0 * epssub / (Charge_q
|
||||
* pParam->B4SOInpeak * 1.0e6))
|
||||
* pParam->B4SOIsqrtPhi;
|
||||
pParam->B4SOIsqrtXdep0 = sqrt(pParam->B4SOIXdep0);
|
||||
pParam->B4SOIlitl = sqrt(3.0 * pParam->B4SOIxj
|
||||
/*4.1*/
|
||||
if (model->B4SOImtrlMod==0)
|
||||
pParam->B4SOIlitl = sqrt(3.0 *3.9/epsrox* pParam->B4SOIxj
|
||||
* model->B4SOItox);
|
||||
else
|
||||
pParam->B4SOIlitl = sqrt(epssub * pParam->B4SOIxj * model->B4SOItox/(epsrox*EPS0));
|
||||
pParam->B4SOIvbi = model->B4SOIvtm * log(1.0e20
|
||||
* pParam->B4SOInpeak / (ni * ni));
|
||||
pParam->B4SOIcdep0 = sqrt(Charge_q * EPSSI
|
||||
pParam->B4SOIcdep0 = sqrt(Charge_q * epssub
|
||||
* pParam->B4SOInpeak * 1.0e6 / 2.0
|
||||
/ pParam->B4SOIphi);
|
||||
|
||||
/* v3.0 */
|
||||
/*4.1 */
|
||||
if (model->B4SOImtrlMod ==0)
|
||||
{
|
||||
if (pParam->B4SOIngate > 0.0)
|
||||
{ pParam->B4SOIvfbsd = Vtm0 * log(pParam->B4SOIngate
|
||||
/ 1.0e20);
|
||||
}
|
||||
else
|
||||
pParam->B4SOIvfbsd = 0.0;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
T0 = Vtm0 * log(pParam->B4SOInsd/ni);
|
||||
T1 = 0.5 * Eg0;
|
||||
if(T0 > T1)
|
||||
T0 = T1;
|
||||
T2 = model->B4SOIeasub + T1 - model->B4SOItype * T0;
|
||||
pParam->B4SOIvfbsd = model->B4SOIphig - T2;
|
||||
|
||||
|
||||
}
|
||||
pParam->B4SOIToxRatio = exp(model->B4SOIntox
|
||||
* log(model->B4SOItoxref /model->B4SOItoxqm))
|
||||
/model->B4SOItoxqm /model->B4SOItoxqm;
|
||||
|
|
@ -1195,7 +1392,7 @@ double tmp3, T7;
|
|||
if ((T0 = pParam->B4SOIweff + pParam->B4SOIk1w2) < 1e-8)
|
||||
T0 = 1e-8;
|
||||
pParam->B4SOIk1eff = pParam->B4SOIk1 * (1 + pParam->B4SOIk1w1/T0);
|
||||
|
||||
/*4.0
|
||||
if (model->B4SOIvth0Given)
|
||||
{ pParam->B4SOIvfb = model->B4SOItype * pParam->B4SOIvth0
|
||||
- pParam->B4SOIphi - pParam->B4SOIk1eff
|
||||
|
|
@ -1207,12 +1404,31 @@ double tmp3, T7;
|
|||
+ pParam->B4SOIphi + pParam->B4SOIk1eff
|
||||
* pParam->B4SOIsqrtPhi);
|
||||
}
|
||||
|
||||
*/
|
||||
/* v4.1 */
|
||||
if (!model->B4SOIvfbGiven)
|
||||
{ if (model->B4SOIvth0Given)
|
||||
{ pParam->B4SOIvfb = model->B4SOItype * pParam->B4SOIvth0
|
||||
- pParam->B4SOIphi - pParam->B4SOIk1eff
|
||||
* pParam->B4SOIsqrtPhi;
|
||||
}
|
||||
else
|
||||
{ pParam->B4SOIvfb = -1.0;
|
||||
}
|
||||
}
|
||||
if (!model->B4SOIvth0Given)
|
||||
{ pParam->B4SOIvth0 = model->B4SOItype * (pParam->B4SOIvfb
|
||||
+ pParam->B4SOIphi + pParam->B4SOIk1eff
|
||||
* pParam->B4SOIsqrtPhi);
|
||||
}
|
||||
/* v4.0 */
|
||||
pParam->B4SOIk1ox = pParam->B4SOIk1eff * model->B4SOItox
|
||||
/ model->B4SOItoxm;
|
||||
|
||||
if(model->B4SOImtrlMod == 0)
|
||||
T1 = sqrt(EPSSI / EPSOX * model->B4SOItox
|
||||
* pParam->B4SOIXdep0);
|
||||
else
|
||||
T1 = sqrt(epssub / (epsrox*EPS0) * model->B4SOItox
|
||||
* pParam->B4SOIXdep0);
|
||||
T0 = exp(-0.5 * pParam->B4SOIdsub * pParam->B4SOIleff / T1);
|
||||
pParam->B4SOItheta0vb0 = (T0 + 2.0 * T0 * T0);
|
||||
|
|
@ -1222,6 +1438,9 @@ double tmp3, T7;
|
|||
pParam->B4SOIthetaRout = pParam->B4SOIpdibl1 * T2
|
||||
+ pParam->B4SOIpdibl2;
|
||||
|
||||
/* New DITS term (added in 4.1) */
|
||||
pParam->B4SOIdvtp2factor = pParam->B4SOIdvtp2 / exp(pParam->B4SOIdvtp3 * log(pParam->B4SOIleff));
|
||||
|
||||
/* stress effect */
|
||||
T0 = pow(Ldrn, model->B4SOIllodku0);
|
||||
W_tmp = Wdrn + model->B4SOIwlod;
|
||||
|
|
@ -1238,9 +1457,8 @@ double tmp3, T7;
|
|||
pParam->B4SOIkvth0 = sqrt( pParam->B4SOIkvth0
|
||||
* pParam->B4SOIkvth0 + DELTA);
|
||||
|
||||
/*dw init of TRatio is missing */
|
||||
TRatio = TempRatio;
|
||||
T0 = (TRatio - 1.0);
|
||||
/*T0 = (TRatio - 1.0);*/
|
||||
T0 = (TempRatio - 1.0); /* bug fix v4.1 */
|
||||
pParam->B4SOIku0temp = pParam->B4SOIku0 * (1.0
|
||||
+ model->B4SOItku0 * T0) + DELTA;
|
||||
|
||||
|
|
@ -1343,6 +1561,235 @@ TRatio = TempRatio;
|
|||
|
||||
if ((pParam->B4SOIvearly = pParam->B4SOIvabjt + pParam->B4SOIaely * pParam->B4SOIleff) < 1)
|
||||
pParam->B4SOIvearly = 1;
|
||||
|
||||
/*4.1 toxp calculation*/
|
||||
if(model->B4SOImtrlMod==0)
|
||||
{
|
||||
model->B4SOItoxp = model->B4SOItox - model->B4SOIdtoxcv;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Calculate TOXP from EOT */
|
||||
/* Calculate Vgs_eff @ Vgs = VDD with Poly Depletion Effect */
|
||||
Vtm0eot = KboQ * model->B4SOItempeot;
|
||||
Vtmeot = Vtm0eot;
|
||||
vbieot = Vtm0eot * log(1.0e20
|
||||
* pParam->B4SOInpeak / (ni * ni));
|
||||
phieot = 2.0 * Vtm0eot
|
||||
* log(pParam->B4SOInpeak / ni);
|
||||
sqrtphieot = sqrt(phieot);
|
||||
tmp2 = here->B4SOIvfb + phieot;
|
||||
vddeot = model->B4SOItype * model->B4SOIvddeot;
|
||||
|
||||
T0 = model->B4SOIepsrgate * EPS0;
|
||||
if ((pParam->B4SOIngate > 1.0e18) && (pParam->B4SOIngate < 1.0e25)
|
||||
&& (vddeot > tmp2) && (T0!=0))
|
||||
{ T1 = 1.0e6 * Charge_q * epssub * pParam->B4SOIngate
|
||||
/ (model->B4SOIcox * model->B4SOIcox);
|
||||
T4 = sqrt(1.0 + 2.0 * (vddeot - T0) / T1);
|
||||
T2 = T1 * (T4 - 1.0);
|
||||
T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */
|
||||
T7 = 1.12 - T3 - 0.05;
|
||||
T6 = sqrt(T7 * T7 + 0.224);
|
||||
T5 = 1.12 - 0.5 * (T7 + T6);
|
||||
Vgs_eff = vddeot - T5;
|
||||
|
||||
}
|
||||
else
|
||||
{ Vgs_eff = vddeot;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Calculate Vth @ Vds=Vbs=0 */
|
||||
|
||||
V0 = vbieot - phieot;
|
||||
|
||||
T3 = sqrt(pParam->B4SOIXdep0);
|
||||
|
||||
|
||||
|
||||
|
||||
lt1 = model->B4SOIfactor1 * T3;
|
||||
|
||||
|
||||
|
||||
ltw= model->B4SOIfactor1 * T3 ;
|
||||
|
||||
|
||||
T0 = -0.5 * pParam->B4SOIdvt1 * model->B4SOIleffeot / lt1;
|
||||
if (T0 > -EXPL_THRESHOLD)
|
||||
{ T1 = exp(T0);
|
||||
Theta0 = T1 * (1.0 + 2.0 * T1);
|
||||
|
||||
}
|
||||
else
|
||||
{ T1 = MIN_EXPL;
|
||||
Theta0 = T1 * (1.0 + 2.0 * T1);
|
||||
|
||||
}
|
||||
|
||||
/* Calculate n */
|
||||
T2 = pParam->B4SOInfactor * epssub / pParam->B4SOIXdep0;
|
||||
T3 = pParam->B4SOIcdsc ;
|
||||
T4 = (T2 + T3 * Theta0 + pParam->B4SOIcit) / model->B4SOIcox;
|
||||
|
||||
|
||||
if (T4 >= -0.5)
|
||||
{ n = 1.0 + T4;
|
||||
|
||||
}
|
||||
else
|
||||
/* avoid discontinuity problems caused by T4 */
|
||||
{ T0 = 1.0 / (3.0 + 8.0 * T4);
|
||||
n = (1.0 + 3.0 * T4) * T0;
|
||||
|
||||
}
|
||||
|
||||
/* v4.0 DITS */
|
||||
if (pParam->B4SOIdvtp0 > 0.0) {
|
||||
T0 = 0.0;
|
||||
if (T0 < -EXPL_THRESHOLD) {
|
||||
T2 = MIN_EXPL;
|
||||
|
||||
}
|
||||
else {
|
||||
T2 = exp(T0);
|
||||
|
||||
}
|
||||
|
||||
T3 = model->B4SOIleffeot + pParam->B4SOIdvtp0 * (1.0 + T2);
|
||||
|
||||
T4 = Vtmeot * log(model->B4SOIleffeot / T3);
|
||||
|
||||
DITS_Sft = n * T4;
|
||||
|
||||
|
||||
}
|
||||
else {
|
||||
DITS_Sft=0.0;
|
||||
|
||||
}
|
||||
|
||||
here->B4SOIthetavth = pParam->B4SOIdvt0 * Theta0;
|
||||
Delt_vth = here->B4SOIthetavth * V0;
|
||||
|
||||
T0 = -0.5 * pParam->B4SOIdvt1w * model->B4SOIweffeot
|
||||
* model->B4SOIleffeot / ltw;
|
||||
if (T0 > -EXPL_THRESHOLD)
|
||||
{ T1 = exp(T0);
|
||||
T2 = T1 * (1.0 + 2.0 * T1);
|
||||
|
||||
}
|
||||
else
|
||||
{ T1 = MIN_EXPL;
|
||||
T2 = T1 * (1.0 + 2.0 * T1);
|
||||
|
||||
}
|
||||
|
||||
T0 = pParam->B4SOIdvt0w * T2;
|
||||
DeltVthw = T0 * V0;
|
||||
|
||||
TempRatioMinus1 = model->B4SOItempeot / model->B4SOItnom - 1.0;
|
||||
|
||||
T0 = sqrt(1.0 + pParam->B4SOIlpe0 / model->B4SOIleffeot);
|
||||
T1 = (pParam->B4SOIkt1 + pParam->B4SOIkt1l / model->B4SOIleffeot);
|
||||
DeltVthtemp = pParam->B4SOIk1ox * (T0 - 1.0) * sqrtphieot
|
||||
+ T1 * TempRatioMinus1; /* v4.0 */
|
||||
|
||||
|
||||
tmp2 = toxe * phieot
|
||||
/ (model->B4SOIweffeot + pParam->B4SOIw0);
|
||||
|
||||
|
||||
DIBL_Sft = 0.0;
|
||||
DITS_Sft2 = 0.0;
|
||||
|
||||
|
||||
Lpe_Vb = sqrt(1.0 + pParam->B4SOIlpeb / model->B4SOIleffeot);
|
||||
|
||||
|
||||
sqrtPhisExt = sqrtphieot;
|
||||
|
||||
|
||||
Vth = model->B4SOItype * here->B4SOIvth0
|
||||
+ (pParam->B4SOIk1ox * sqrtPhisExt
|
||||
- pParam->B4SOIk1eff * sqrtphieot) * Lpe_Vb
|
||||
- Delt_vth - DeltVthw
|
||||
+pParam->B4SOIk3 * tmp2
|
||||
+ DeltVthtemp - DIBL_Sft -DITS_Sft - DITS_Sft2;
|
||||
|
||||
|
||||
Vgst = Vgs_eff - Vth;
|
||||
|
||||
|
||||
T10 = n * Vtmeot; /* v4.0 */
|
||||
VgstNVt = pParam->B4SOImstar * Vgst / T10; /* v4.0 */
|
||||
ExpArg = (pParam->B4SOIvoff - (1- pParam->B4SOImstar) * Vgst)
|
||||
/ T10; /* v4.0 */
|
||||
|
||||
/* MCJ: Very small Vgst */
|
||||
if (VgstNVt > EXPL_THRESHOLD)
|
||||
{ Vgsteff = Vgst;
|
||||
/* T0 is dVgsteff_dVbseff */
|
||||
|
||||
}
|
||||
else if (ExpArg > EXPL_THRESHOLD)
|
||||
{ T0 = (Vgst - pParam->B4SOIvoff) / (n * Vtmeot);
|
||||
ExpVgst = exp(T0);
|
||||
Vgsteff = Vtmeot * pParam->B4SOIcdep0 / model->B4SOIcox * ExpVgst;
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{ ExpVgst = exp(VgstNVt);
|
||||
T1 = T10 * log(1.0 + ExpVgst);
|
||||
|
||||
T3 = (1.0 / model->B4SOItempeot);
|
||||
|
||||
|
||||
T4 = -model->B4SOIcox / (Vtm0eot * pParam->B4SOIcdep0)
|
||||
* exp(ExpArg) * (1 - pParam->B4SOImstar);
|
||||
T2 = pParam->B4SOImstar - T10 * T4
|
||||
/ (1.0 - pParam->B4SOImstar);
|
||||
|
||||
Vgsteff = T1 / T2;
|
||||
|
||||
}
|
||||
Vgst2Vtm = Vgsteff + 2.0 * Vtmeot;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* calculating Toxp */
|
||||
T3 = model->B4SOItype * here->B4SOIvth0
|
||||
- here->B4SOIvfb - phieot;
|
||||
|
||||
|
||||
vtfbphi2eot = 4.0 * T3;
|
||||
if (vtfbphi2eot < 0.0)
|
||||
vtfbphi2eot = 0.0;
|
||||
|
||||
|
||||
niter = 0;
|
||||
toxpf = toxe;
|
||||
do
|
||||
{
|
||||
toxpi = toxpf;
|
||||
tmp2 = 2.0e8 * toxpf;
|
||||
T0 = (Vgsteff + vtfbphi2eot) / tmp2;
|
||||
T1 = 1.0 + exp(model->B4SOIbdos * 0.7 * log(T0));
|
||||
Tcen = model->B4SOIados * 1.9e-9 / T1;
|
||||
toxpf = toxe - epsrox/model->B4SOIepsrsub * Tcen;
|
||||
niter++;
|
||||
} while ((niter<=4)&&(ABS(toxpf-toxpi)>1e-12));
|
||||
model->B4SOItoxp = toxpf;
|
||||
/*model->B4SOIcoxp = epsrox * EPS0 / model->B4SOItoxp;*/
|
||||
|
||||
|
||||
}/*End of Toxp*/
|
||||
|
||||
/* vfbzb calculation for capMod 3 */
|
||||
tmp = sqrt(pParam->B4SOIXdep0);
|
||||
|
|
@ -1374,9 +1821,12 @@ TRatio = TempRatio;
|
|||
T3 = pParam->B4SOIdvt0 * T3 * tmp1;
|
||||
|
||||
/* v2.2.3 */
|
||||
T4 = (model->B4SOItox - model->B4SOIdtoxcv) * pParam->B4SOIphi
|
||||
/*4.1*/
|
||||
/* T4 = (model->B4SOItox - model->B4SOIdtoxcv) * pParam->B4SOIphi
|
||||
/ (pParam->B4SOIweff + pParam->B4SOIw0);
|
||||
*/
|
||||
T4 = model->B4SOItoxp * pParam->B4SOIphi
|
||||
/ (pParam->B4SOIweff + pParam->B4SOIw0);
|
||||
|
||||
T0 = sqrt(1.0 + pParam->B4SOIlpe0 / pParam->B4SOIleff); /*v4.0*/
|
||||
T5 = pParam->B4SOIk1ox * (T0 - 1.0) * pParam->B4SOIsqrtPhi
|
||||
+ (pParam->B4SOIkt1 + pParam->B4SOIkt1l / pParam->B4SOIleff)
|
||||
|
|
@ -1424,8 +1874,7 @@ TRatio = TempRatio;
|
|||
+ 1.0 / here->B4SOIrbsb;
|
||||
}
|
||||
/* v4.0 rbodyMod end */
|
||||
|
||||
/* v4.0 stress effect */
|
||||
/* v4.0 stress effect */
|
||||
if( (here->B4SOIsa > 0.0) && (here->B4SOIsb > 0.0) &&
|
||||
( (here->B4SOInf == 1.0) ||
|
||||
((here->B4SOInf > 1.0) && (here->B4SOIsd > 0.0))
|
||||
|
|
@ -1439,7 +1888,7 @@ TRatio = TempRatio;
|
|||
model->B4SOIwlod = 0.0;
|
||||
}
|
||||
|
||||
if (model->B4SOIkvsat < -1.0 )
|
||||
if (model->B4SOIkvsat < -1.0 )
|
||||
{ fprintf(stderr, "Warning: KVSAT = %g is too small; Reset to -1.0.\n",model->B4SOIkvsat);
|
||||
here->B4SOIkvsat = kvsat = -1.0;
|
||||
}
|
||||
|
|
@ -1464,7 +1913,7 @@ TRatio = TempRatio;
|
|||
T0 = (1.0 + rho)/(1.0 + pParam->B4SOIrho_ref);
|
||||
here->B4SOIu0temp = pParam->B4SOIu0temp * T0;
|
||||
|
||||
T1 = (1.0 + kvsat * rho)/(1.0 + kvsat * pParam->B4SOIrho_ref);
|
||||
T1 = (1.0 + here->B4SOIkvsat * rho)/(1.0 + here->B4SOIkvsat * pParam->B4SOIrho_ref);/*self-heating bug fix*/
|
||||
here->B4SOIvsattemp = pParam->B4SOIvsattemp * T1;
|
||||
|
||||
OD_offset = Inv_ODeff - pParam->B4SOIinv_od_ref;
|
||||
|
|
@ -1488,8 +1937,13 @@ TRatio = TempRatio;
|
|||
here->B4SOIvsattemp = pParam->B4SOIvsattemp;
|
||||
here->B4SOIk2 = pParam->B4SOIk2;
|
||||
here->B4SOIeta0 = pParam->B4SOIeta0;
|
||||
here->B4SOIInv_ODeff = 0;
|
||||
here->B4SOIInv_ODeff = 0;
|
||||
pParam->B4SOIinv_od_ref = 0; /*Stress bug fix*/
|
||||
here->B4SOIkvsat = 0; /*Stress bug fix*/
|
||||
} /* v4.0 stress effect end */
|
||||
|
||||
|
||||
|
||||
|
||||
here->B4SOIk2ox = here->B4SOIk2 * model->B4SOItox
|
||||
/ model->B4SOItoxm; /* v4.0 */
|
||||
|
|
@ -1497,8 +1951,71 @@ TRatio = TempRatio;
|
|||
here->B4SOIvfb = pParam->B4SOIvfb + model->B4SOItype * here->B4SOIdelvto;
|
||||
here->B4SOIvfbzb = pParam->B4SOIvfbzb + model->B4SOItype * here->B4SOIdelvto;
|
||||
|
||||
pParam->B4SOIldeb = sqrt(EPSSI * Vtm0 /
|
||||
pParam->B4SOIldeb = sqrt(epssub * Vtm0 /
|
||||
(Charge_q * pParam->B4SOInpeak * 1.0e6)) / 3.0;
|
||||
|
||||
/*For high k mobility*/
|
||||
T1 = model->B4SOItype * here->B4SOIvth0
|
||||
- here->B4SOIvfb - pParam->B4SOIphi;
|
||||
T2 = T1 + T1;
|
||||
T3 = 2.5 * T1;
|
||||
here->B4SOIvtfbphi1 = (model->B4SOItype == NMOS) ? T2 : T3;
|
||||
if (here->B4SOIvtfbphi1 < 0.0)
|
||||
here->B4SOIvtfbphi1 = 0.0;
|
||||
/*Calculate VgsteffVth for mobMod=4*/
|
||||
if(model->B4SOImobMod == 4)
|
||||
{
|
||||
/*Calculate n @ Vbs=Vds=0*/
|
||||
V0 = pParam->B4SOIvbi - pParam->B4SOIphi;
|
||||
lt1 = model->B4SOIfactor1* pParam->B4SOIsqrtXdep0;
|
||||
ltw = lt1;
|
||||
T0 = pParam->B4SOIdvt1 * pParam->B4SOIleff / lt1;
|
||||
if (T0 < EXPL_THRESHOLD)
|
||||
{
|
||||
T1 = exp(T0);
|
||||
T2 = T1 - 1.0;
|
||||
T3 = T2 * T2;
|
||||
T4 = T3 + 2.0 * T1 * MIN_EXPL;
|
||||
Theta0 = T1 / T4;
|
||||
}
|
||||
else
|
||||
Theta0 = 1.0 / (MAX_EXPL - 2.0);
|
||||
|
||||
tmp1 = epssub / pParam->B4SOIXdep0;
|
||||
here->B4SOInstar = model->B4SOIvtm / Charge_q *
|
||||
(model->B4SOIcox + tmp1 + pParam->B4SOIcit);
|
||||
tmp2 = pParam->B4SOInfactor * tmp1;
|
||||
tmp3 = (tmp2 + pParam->B4SOIcdsc * Theta0 + pParam->B4SOIcit) / model->B4SOIcox;
|
||||
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 * Vtm0;
|
||||
T1 = pParam->B4SOIvoff;
|
||||
T2 = T1/T0;
|
||||
if (T2 < -EXPL_THRESHOLD)
|
||||
{ T3 = model->B4SOIcox * MIN_EXPL / pParam->B4SOIcdep0;
|
||||
T4 = pParam->B4SOImstar + T3 * n0;
|
||||
}
|
||||
else if (T2 > EXPL_THRESHOLD)
|
||||
{ T3 = model->B4SOIcox * MAX_EXPL / pParam->B4SOIcdep0;
|
||||
T4 = pParam->B4SOImstar + T3 * n0;
|
||||
}
|
||||
else
|
||||
{ T3 = exp(T2)* model->B4SOIcox / pParam->B4SOIcdep0;
|
||||
T4 = pParam->B4SOImstar + T3 * n0;
|
||||
|
||||
}
|
||||
|
||||
here->B4SOIvgsteffvth = T0 * log(2.0)/T4;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*** B4SOI 11/30/2005 Xuemei (Jane) Xi Release ***/
|
||||
/*** B4SOI 03/06/2009 Wenwei Yang Release ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2005 Regents of the University of California. All rights reserved.
|
||||
* Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
|
||||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soitrunc.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soitrunc.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
|
|
|
|||
Loading…
Reference in New Issue