Revert "update hisimhv model to version 2.2.0"

This reverts commit c2ef7aeff3.
This commit is contained in:
dwarning 2015-03-25 14:13:07 +01:00
parent db52073f5d
commit adcec9fa5f
33 changed files with 3653 additions and 10266 deletions

View File

@ -11,10 +11,7 @@ libhisimhv1_la_SOURCES = hisimhv.h \
hsmhvdel.c \
hsmhvdest.c \
hsmhveval.c \
hsmhveval_dep.h \
hsmhveval_dio.c \
hsmhveval_qover.h \
hsmhveval_rdrift.c \
hsmhvevalenv.h \
hsmhvext.h \
hsmhvgetic.c \
@ -33,8 +30,6 @@ libhisimhv1_la_SOURCES = hisimhv.h \
hsmhvsoachk.c \
hsmhvtemp.c \
hsmhvtemp_eval.h \
hsmhvtemp_eval_dio.h \
hsmhvtemp_eval_rdri.h \
hsmhvtrunc.c
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hisimhv.h
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "hsmhvdef.h"
#include "ngspice/cktdefs.h"
@ -110,31 +68,10 @@ extern int HSMHVevaluate
double vbs_jct,
double vbd_jct,
double vsubs,
double vddp,
double deltemp,
HSMHVinstance *here,
HSMHVmodel *model,
CKTcircuit *ckt
) ;
extern int HSMHVrdrift
(
double vddp,
double ivds,
double ivbs,
double vsubs,
double deltemp,
HSMHVinstance *here,
HSMHVmodel *model,
CKTcircuit *ckt
) ;
extern int HSMHVdio
(
double vbs_jct,
double vbd_jct,
double deltemp,
HSMHVinstance *here,
HSMHVmodel *model,
CKTcircuit *ckt
) ;
#endif /* _HiSIMHV_H */

View File

@ -1,14 +1,14 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhv.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
@ -16,48 +16,6 @@
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "ngspice/devdefs.h"
#include "hsmhvdef.h"
@ -106,8 +64,6 @@ IFparm HSMHVpTable[] = { /* parameters */
/* Output Physical Values: */
OP ( "ids", HSMHV_CD, IF_REAL , "Ids"), /* Drain-Source current */
OP ( "isub", HSMHV_ISUB, IF_REAL , "Isub"), /* Substrate current */
OP ( "isubld", HSMHV_ISUBLD, IF_REAL , "IsubLD"), /* Substrate current */
OP ( "idsibpc", HSMHV_IDSIBPC, IF_REAL , "IdsIBPC"), /* Impact-Ionization Induced Bulk Potential Change (IBPC)*/
OP ( "igidl", HSMHV_IGIDL, IF_REAL , "Igidl"), /* Gate-Induced Drain Leakage current */
OP ( "igisl", HSMHV_IGISL, IF_REAL , "Igisl"), /* Gate-Induced Source Leakage current */
OP ( "igd", HSMHV_IGD, IF_REAL , "Igd"), /* Gate-Drain current */
@ -168,15 +124,11 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("coign", HSMHV_MOD_COIGN, IF_INTEGER, "Calculate induced gate noise"),
IOP("codfm", HSMHV_MOD_CODFM, IF_INTEGER, "Calculation of model for DFM"),
IOP("coqovsm", HSMHV_MOD_COQOVSM, IF_INTEGER, "select smoothing method of Qover"),
IOP("coselfheat", HSMHV_MOD_COSELFHEAT, IF_INTEGER, "Calculation of self heating model"),
IOP("coselfheat", HSMHV_MOD_COSELFHEAT, IF_INTEGER, "Calculation of self heating model"),
IOP("cosubnode", HSMHV_MOD_COSUBNODE, IF_INTEGER, "Switch tempNode to subNode"),
IOP("cosym", HSMHV_MOD_COSYM, IF_INTEGER, "Model selector for symmetry device"),
IOP("cotemp", HSMHV_MOD_COTEMP, IF_INTEGER, "Model flag for temperature dependence"),
IOP("coldrift", HSMHV_MOD_COLDRIFT, IF_INTEGER, "selector for Ldrift parameter"),
IOP("cordrift", HSMHV_MOD_CORDRIFT, IF_INTEGER, ""),
IOP("coerrrep", HSMHV_MOD_COERRREP, IF_INTEGER, "selector for error report"),
IOP("codep", HSMHV_MOD_CODEP, IF_INTEGER, "selector for depletion device"),
IOP("coddlt", HSMHV_MOD_CODDLT, IF_INTEGER, "selector for DDLT model"),
IOP("vbsmin", HSMHV_MOD_VBSMIN, IF_REAL, "Minimum back bias voltage to be treated in hsmhveval [V]"),
@ -205,12 +157,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("ldrift1s", HSMHV_MOD_LDRIFT1S, IF_REAL, "Drift region length-1 on the source side[m]"),
IOP("ldrift2s", HSMHV_MOD_LDRIFT2S, IF_REAL, "Drift region length-2 on the source side[m]"),
IOP("subld1", HSMHV_MOD_SUBLD1, IF_REAL, "Impact-ionization current in the drift region [-]"),
IOP("subld1l", HSMHV_MOD_SUBLD1L, IF_REAL, "Impact-ionization current in the drift region [um^{subld1lp}]"),
IOP("subld1lp", HSMHV_MOD_SUBLD1LP, IF_REAL, "Impact-ionization current in the drift region [-]"),
IOP("subld2", HSMHV_MOD_SUBLD2, IF_REAL, "Impact-ionization current in the drift region [m^{-1}*V^{3/2}]"),
IOP("xpdv", HSMHV_MOD_XPDV, IF_REAL, "Impact-ionization current in the drift region [m^{-1}]"),
IOP("xpvdth", HSMHV_MOD_XPVDTH, IF_REAL, "Impact-ionization current in the drift region [V]"),
IOP("xpvdthg", HSMHV_MOD_XPVDTHG, IF_REAL, "Impact-ionization current in the drift region [V^{-1}]"),
IOP("ddltmax", HSMHV_MOD_DDLTMAX, IF_REAL, ""), /* Vdseff */
IOP("ddltslp", HSMHV_MOD_DDLTSLP, IF_REAL, ""), /* Vdseff */
IOP("ddltict", HSMHV_MOD_DDLTICT, IF_REAL, ""), /* Vdseff */
@ -257,7 +204,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("sc4", HSMHV_MOD_SC4, IF_REAL, "Parameter for SCE [1/V]"),
IOP("pgd1", HSMHV_MOD_PGD1, IF_REAL, "Parameter for gate-poly depletion [V]"),
IOP("pgd2", HSMHV_MOD_PGD2, IF_REAL, "Parameter for gate-poly depletion [V]"),
//IOP("pgd3", HSMHV_MOD_PGD3, IF_REAL, "Parameter for gate-poly depletion [-]"),
IOP("pgd3", HSMHV_MOD_PGD3, IF_REAL, "Parameter for gate-poly depletion [-]"),
IOP("pgd4", HSMHV_MOD_PGD4, IF_REAL, "Parameter for gate-poly depletion [-]"),
IOP("ndep", HSMHV_MOD_NDEP, IF_REAL, "Coeff. of Qbm for Eeff [-]"),
IOP("ndepl", HSMHV_MOD_NDEPL, IF_REAL, "Coeff. of Qbm for Eeff [-]"),
@ -355,7 +302,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("cvb", HSMHV_MOD_CVB, IF_REAL, "Bias dependence coefficient of cisb [-]"),
IOP("ctemp", HSMHV_MOD_CTEMP, IF_REAL, "Temperature coefficient [-]"),
IOP("cisbk", HSMHV_MOD_CISBK, IF_REAL, "Reverse bias saturation current [A]"),
IOP("cvbk", HSMHV_MOD_CVBK, IF_REAL, "Inactived by CVB "),
IOP("cvbk", HSMHV_MOD_CVBK, IF_REAL, "Bias dependence coefficient of cisb [-]"),
IOP("divx", HSMHV_MOD_DIVX, IF_REAL, " [1/V]"),
IOP("clm1", HSMHV_MOD_CLM1, IF_REAL, "Parameter for CLM [-]"),
@ -403,7 +350,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("cit", HSMHV_MOD_CIT, IF_REAL, ""),
IOP("falph", HSMHV_MOD_FALPH, IF_REAL, "Parameter for 1/f noise"),
IOP("kappa", HSMHV_MOD_KAPPA, IF_REAL, "Dielectric constant for high-k stacked gate"),
//IOP("pthrou", HSMHV_MOD_PTHROU, IF_REAL, "Modify subthreshold slope [-]"),
IOP("pthrou", HSMHV_MOD_PTHROU, IF_REAL, "Modify subthreshold slope [-]"),
IOP("vdiffj", HSMHV_MOD_VDIFFJ, IF_REAL, "Threshold voltage for S/D junction diode [V]"),
IOP("dly1", HSMHV_MOD_DLY1, IF_REAL, "Parameter for transit time [-]"),
IOP("dly2", HSMHV_MOD_DLY2, IF_REAL, "Parameter for transit time [-]"),
@ -421,23 +368,10 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("rbsb", HSMHV_MOD_RBSB, IF_REAL, ""),
IOP("ibpc1", HSMHV_MOD_IBPC1, IF_REAL, "Parameter for impact-ionization induced bulk potential change"),
IOP("ibpc1l", HSMHV_MOD_IBPC1L, IF_REAL, "Parameter for impact-ionization induced bulk potential change"),
IOP("ibpc1lp", HSMHV_MOD_IBPC1LP, IF_REAL, "Parameter for impact-ionization induced bulk potential change"),
IOP("ibpc2", HSMHV_MOD_IBPC2, IF_REAL, "Parameter for impact-ionization induced bulk potential change"),
IOP("mphdfm", HSMHV_MOD_MPHDFM, IF_REAL, "NSUBCDFM dependence of phonon scattering for DFM"),
IOP("ptl", HSMHV_MOD_PTL, IF_REAL, ""),
IOP("ptp", HSMHV_MOD_PTP, IF_REAL, ""),
IOP("pt2", HSMHV_MOD_PT2, IF_REAL, ""),
IOP("ptlp", HSMHV_MOD_PTLP, IF_REAL, ""),
IOP("gdl", HSMHV_MOD_GDL, IF_REAL, ""),
IOP("gdlp", HSMHV_MOD_GDLP, IF_REAL, ""),
IOP("gdld", HSMHV_MOD_GDLD, IF_REAL, ""),
IOP("pt4", HSMHV_MOD_PT4, IF_REAL, ""),
IOP("pt4p", HSMHV_MOD_PT4P, IF_REAL, ""),
IOP("rdvg11", HSMHV_MOD_RDVG11, IF_REAL, ""),
IOP("rdvg12", HSMHV_MOD_RDVG12, IF_REAL, ""),
IOP("rth0", HSMHV_MOD_RTH0, IF_REAL, "Thermal resistance"), /* Self-heating model --SHE---*/
@ -466,6 +400,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("rd23", HSMHV_MOD_RD23, IF_REAL, ""),
IOP("rd24", HSMHV_MOD_RD24, IF_REAL, ""),
IOP("rd25", HSMHV_MOD_RD25, IF_REAL, ""),
IOP("rd26", HSMHV_MOD_RD26, IF_REAL, "alias for qovsm"),
IOP("rdvdl", HSMHV_MOD_RDVDL, IF_REAL, ""),
IOP("rdvdlp", HSMHV_MOD_RDVDLP, IF_REAL, ""),
IOP("rdvds", HSMHV_MOD_RDVDS, IF_REAL, ""),
@ -476,8 +411,8 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("rd23sp", HSMHV_MOD_RD23SP, IF_REAL, ""),
IOP("rds", HSMHV_MOD_RDS, IF_REAL, ""),
IOP("rdsp", HSMHV_MOD_RDSP, IF_REAL, ""),
//IOP("qovsm", HSMHV_MOD_QOVSM, IF_REAL, "Smoothing Qover at depletion/inversion transition"),
// IOP("ldrift", HSMHV_MOD_LDRIFT, IF_REAL, "alias for ldrift2"),
IOP("qovsm", HSMHV_MOD_QOVSM, IF_REAL, "Smoothing Qover at depletion/inversion transition"),
IOP("ldrift", HSMHV_MOD_LDRIFT, IF_REAL, "alias for ldrift2"),
IOP("rdtemp1", HSMHV_MOD_RDTEMP1, IF_REAL, "Temperature-dependence of Rd"),
IOP("rdtemp2", HSMHV_MOD_RDTEMP2, IF_REAL, "Temperature-dependence of Rd"),
IOP("rth0r", HSMHV_MOD_RTH0R, IF_REAL, "Heat radiation for SHE"), /* not used */
@ -493,95 +428,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("ddrift", HSMHV_MOD_DDRIFT, IF_REAL, "model parameter for the substrate effect"),
IOP("vbisub", HSMHV_MOD_VBISUB, IF_REAL, "model parameter for the substrate effect"),
IOP("nsubsub", HSMHV_MOD_NSUBSUB, IF_REAL, "model parameter for the substrate effect"),
IOP("rdrmue", HSMHV_MOD_RDRMUE, IF_REAL, ""),
IOP("rdrvmax", HSMHV_MOD_RDRVMAX, IF_REAL, ""),
IOP("rdrmuetmp", HSMHV_MOD_RDRMUETMP, IF_REAL, ""),
IOP("ndepm", HSMHV_MOD_NDEPM, IF_REAL, "N- layer concentlation of the depletion MOS model"),
IOP("tndep", HSMHV_MOD_TNDEP, IF_REAL, "N- layer depth of the depletion MOS model"),
IOP("depmue0", HSMHV_MOD_DEPMUE0, IF_REAL, "coulomb scattering of resistor region "),
IOP("depmue1", HSMHV_MOD_DEPMUE1, IF_REAL, "coulomb scattering of resistor region"),
IOP("depmueback0", HSMHV_MOD_DEPMUEBACK0, IF_REAL, "coulomb scattering of back region"),
IOP("depmueback1", HSMHV_MOD_DEPMUEBACK1, IF_REAL, "coulomb scattering of back region"),
IOP("depleak", HSMHV_MOD_DEPLEAK, IF_REAL, "leakage current coefficient"),
IOP("depeta", HSMHV_MOD_DEPETA, IF_REAL, "Vds dependence"),
IOP("depvmax", HSMHV_MOD_DEPVMAX, IF_REAL, "velocity saturation"),
IOP("depvdsef1", HSMHV_MOD_DEPVDSEF1, IF_REAL, "Vds dependece of leakage current"),
IOP("depvdsef2", HSMHV_MOD_DEPVDSEF2, IF_REAL, "Vds dependece of leakage current"),
IOP("depmueph0", HSMHV_MOD_DEPMUEPH0, IF_REAL, "phonon scattering"),
IOP("depmueph1", HSMHV_MOD_DEPMUEPH1, IF_REAL, "phonon scattering"),
IOP("depbb", HSMHV_MOD_DEPBB, IF_REAL, "high field effect coeeficient"),
IOP("depvtmp", HSMHV_MOD_DEPVTMP, IF_REAL, "temperature dependence of velocity saturation"),
IOP("depmuetmp", HSMHV_MOD_DEPMUETMP, IF_REAL, "temperature dependence of mobility"),
IOP("isbreak", HSMHV_MOD_ISBREAK, IF_REAL, "reverse saturation current for breakdown"),
IOP("rwell", HSMHV_MOD_RWELL, IF_REAL, "well resistance for breakdown"),
IOP("rdrvtmp", HSMHV_MOD_RDRVTMP, IF_REAL, ""),
/* IOP("rdrvmaxt1", HSMHV_MOD_RDRVMAXT1, IF_REAL, ""), */
/* IOP("rdrvmaxt2", HSMHV_MOD_RDRVMAXT2, IF_REAL, ""), */
IOP("rdrdjunc", HSMHV_MOD_RDRDJUNC, IF_REAL, ""),
IOP("rdrcx", HSMHV_MOD_RDRCX, IF_REAL, ""),
IOP("rdrcar", HSMHV_MOD_RDRCAR, IF_REAL, ""),
IOP("rdrdl1", HSMHV_MOD_RDRDL1, IF_REAL, ""),
IOP("rdrdl2", HSMHV_MOD_RDRDL2, IF_REAL, ""),
IOP("rdrvmaxw", HSMHV_MOD_RDRVMAXW, IF_REAL, ""),
IOP("rdrvmaxwp", HSMHV_MOD_RDRVMAXWP, IF_REAL, ""),
IOP("rdrvmaxl", HSMHV_MOD_RDRVMAXL, IF_REAL, ""),
IOP("rdrvmaxlp", HSMHV_MOD_RDRVMAXLP, IF_REAL, ""),
IOP("rdrmuel", HSMHV_MOD_RDRMUEL, IF_REAL, ""),
IOP("rdrmuelp", HSMHV_MOD_RDRMUELP, IF_REAL, ""),
IOP("rdrqover", HSMHV_MOD_RDRQOVER, IF_REAL, ""),
IOP("qovadd", HSMHV_MOD_QOVADD, IF_REAL, "parameter for additional Qover Charge [-]"),
IOP("js0d", HSMHV_MOD_JS0D, IF_REAL, "Saturation current density for drain junction [A/m^2]"),
IOP("js0swd", HSMHV_MOD_JS0SWD, IF_REAL, "Side wall saturation current density for drain junction [A/m ]"),
IOP("njd", HSMHV_MOD_NJD, IF_REAL, "Emission coefficient for drain junction [- ]"),
IOP("njswd", HSMHV_MOD_NJSWD, IF_REAL, "Sidewall emission coefficient for drain junction [ ]"),
IOP("xtid", HSMHV_MOD_XTID, IF_REAL, "Junction current temparature exponent coefficient for drain junction [- ]"),
IOP("cjd", HSMHV_MOD_CJD, IF_REAL, "Bottom junction capacitance per unit area at zero bias for drain junction [F/m^2]"),
IOP("cjswd", HSMHV_MOD_CJSWD, IF_REAL, "Sidewall junction capacitance grading coefficient per unit length at zero bias for drain junction [F/m ]"),
IOP("cjswgd", HSMHV_MOD_CJSWGD, IF_REAL, "Gate sidewall junction capacitance per unit length at zero bias for drain junction [F/m ]"),
IOP("mjd", HSMHV_MOD_MJD, IF_REAL, "Bottom junction capacitance grading coefficient for drain junction [ ]"),
IOP("mjswd", HSMHV_MOD_MJSWD, IF_REAL, "Sidewall junction capacitance grading coefficient for drain junction [ ]"),
IOP("mjswgd", HSMHV_MOD_MJSWGD, IF_REAL, "Gate sidewall junction capacitance grading coefficient for drain junction [ ]"),
IOP("pbd", HSMHV_MOD_PBD, IF_REAL, "Bottom junction build-in potential for drain junction [V ]"),
IOP("pbswd", HSMHV_MOD_PBSWD, IF_REAL, "Sidewall junction build-in potential for drain junction [V ]"),
IOP("pbswgd", HSMHV_MOD_PBSWDG, IF_REAL, "Gate sidewall junction build-in potential for drain junction [V ]"),
IOP("xti2d", HSMHV_MOD_XTI2D, IF_REAL, "Temperature coefficient for drain junction [- ]"),
IOP("cisbd", HSMHV_MOD_CISBD, IF_REAL, "Reverse bias saturation current for drain junction [- ]"),
IOP("cvbd", HSMHV_MOD_CVBD, IF_REAL, "Bias dependence coefficient of cisb for drain junction [- ]"),
IOP("ctempd", HSMHV_MOD_CTEMPD, IF_REAL, "Temperature coefficient for drain junction [- ]"),
IOP("cisbkd", HSMHV_MOD_CISBKD, IF_REAL, "Reverse bias saturation current for drain junction [A ]"),
IOP("divxd", HSMHV_MOD_DIVXD, IF_REAL, "Reverse coefficient coefficient for drain junction [1/V ]"),
IOP("vdiffjd", HSMHV_MOD_VDIFFJD, IF_REAL, "Threshold voltage for junction diode for drain junction [V ]"),
IOP("js0s", HSMHV_MOD_JS0S, IF_REAL, "Saturation current density for source junction [A/m^2]"),
IOP("js0sws", HSMHV_MOD_JS0SWS, IF_REAL, "Side wall saturation current density for source junction [A/m ]"),
IOP("njs", HSMHV_MOD_NJS, IF_REAL, "Emission coefficient for source junction [- ]"),
IOP("njsws", HSMHV_MOD_NJSWS, IF_REAL, "Sidewall emission coefficient for source junction [ ]"),
IOP("xtis", HSMHV_MOD_XTIS, IF_REAL, "Junction current temparature exponent coefficient for source junction [- ]"),
IOP("cjs", HSMHV_MOD_CJS, IF_REAL, "Bottom junction capacitance per unit area at zero bias for source junction [F/m^2]"),
IOP("cjsws", HSMHV_MOD_CJSSW, IF_REAL, "Sidewall junction capacitance grading coefficient per unit length at zero bias for source junction [F/m ]"),
IOP("cjswgs", HSMHV_MOD_CJSWGS, IF_REAL, "Gate sidewall junction capacitance per unit length at zero bias for source junction [F/m ]"),
IOP("mjs", HSMHV_MOD_MJS, IF_REAL, "Bottom junction capacitance grading coefficient for source junction [ ]"),
IOP("mjsws", HSMHV_MOD_MJSWS, IF_REAL, "Sidewall junction capacitance grading coefficient for source junction [ ]"),
IOP("mjswgs", HSMHV_MOD_MJSWGS, IF_REAL, "Gate sidewall junction capacitance grading coefficient for source junction [ ]"),
IOP("pbs", HSMHV_MOD_PBS, IF_REAL, "Bottom junction build-in potential for source junction [V ]"),
IOP("pbsws", HSMHV_MOD_PBSWS, IF_REAL, "Sidewall junction build-in potential for source junction [V ]"),
IOP("pbswgs", HSMHV_MOD_PBSWSG, IF_REAL, "Gate sidewall junction build-in potential for source junction [V ]"),
IOP("xti2s", HSMHV_MOD_XTI2S, IF_REAL, "Temperature coefficient for source junction [- ]"),
IOP("cisbs", HSMHV_MOD_CISBS, IF_REAL, "Reverse bias saturation current for source junction [- ]"),
IOP("cvbs", HSMHV_MOD_CVBS, IF_REAL, "Bias dependence coefficient of cisb for source junction [- ]"),
IOP("ctemps", HSMHV_MOD_CTEMPS, IF_REAL, "Temperature coefficient for source junction [- ]"),
IOP("cisbks", HSMHV_MOD_CISBKS, IF_REAL, "Reverse bias saturation current for source junction [A ]"),
IOP("divxs", HSMHV_MOD_DIVXS, IF_REAL, "Reverse coefficient coefficient for source junction [1/V ]"),
IOP("vdiffjs", HSMHV_MOD_VDIFFJS, IF_REAL, "Threshold voltage for junction diode for source junction [V ]"),
IOP("shemax", HSMHV_MOD_SHEMAX, IF_REAL, "Maximum rise temperatue for SHE [C]"),
IOP("vgsmin", HSMHV_MOD_VGSMIN, IF_REAL, "minimal/maximal expected Vgs (NMOS/PMOS) [V]"),
IOP("gdsleak", HSMHV_MOD_GDSLEAK, IF_REAL, "Channel leakage conductance [A/V]"),
IOP("rdrbb", HSMHV_MOD_RDRBB, IF_REAL, "degradation of the mobility in drift region"),
IOP("rdrbbtmp", HSMHV_MOD_RDRBBTMP, IF_REAL, "temperature coeeficient of RDRBB"),
/* binning parameters */
IOP("lmin", HSMHV_MOD_LMIN, IF_REAL, "Minimum length for the model"),
@ -598,7 +445,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("leg0", HSMHV_MOD_LEG0, IF_REAL, "Length dependence of eg0"),
IOP("lvfbover", HSMHV_MOD_LVFBOVER, IF_REAL, "Length dependence of vfbover"),
IOP("lnover", HSMHV_MOD_LNOVER, IF_REAL, "Length dependence of nover"),
IOP("lnovers", HSMHV_MOD_LNOVERS, IF_REAL, "Length dependence of nover on source side"),
IOP("lnovers", HSMHV_MOD_LNOVERS, IF_REAL, "Length dependence of nover on source size"),
IOP("lwl2", HSMHV_MOD_LWL2, IF_REAL, "Length dependence of wl2"),
IOP("lvfbc", HSMHV_MOD_LVFBC, IF_REAL, "Length dependence of vfbc"),
IOP("lnsubc", HSMHV_MOD_LNSUBC, IF_REAL, "Length dependence of nsubc"),
@ -610,7 +457,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("lsc2", HSMHV_MOD_LSC2, IF_REAL, "Length dependence of sc2"),
IOP("lsc3", HSMHV_MOD_LSC3, IF_REAL, "Length dependence of sc3"),
IOP("lpgd1", HSMHV_MOD_LPGD1, IF_REAL, "Length dependence of pgd1"),
//IOP("lpgd3", HSMHV_MOD_LPGD3, IF_REAL, "Length dependence of pgd3"),
IOP("lpgd3", HSMHV_MOD_LPGD3, IF_REAL, "Length dependence of pgd3"),
IOP("lndep", HSMHV_MOD_LNDEP, IF_REAL, "Length dependence of ndep"),
IOP("lninv", HSMHV_MOD_LNINV, IF_REAL, "Length dependence of ninv"),
IOP("lmuecb0", HSMHV_MOD_LMUECB0, IF_REAL, "Length dependence of muecb0"),
@ -662,7 +509,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("lglkb2", HSMHV_MOD_LGLKB2, IF_REAL, "Length dependence of glkb2"),
IOP("lnftrp", HSMHV_MOD_LNFTRP, IF_REAL, "Length dependence of nftrp"),
IOP("lnfalp", HSMHV_MOD_LNFALP, IF_REAL, "Length dependence of nfalp"),
//IOP("lpthrou", HSMHV_MOD_LPTHROU, IF_REAL, "Length dependence of pthrou"),
IOP("lpthrou", HSMHV_MOD_LPTHROU, IF_REAL, "Length dependence of pthrou"),
IOP("lvdiffj", HSMHV_MOD_LVDIFFJ, IF_REAL, "Length dependence of vdiffj"),
IOP("libpc1", HSMHV_MOD_LIBPC1, IF_REAL, "Length dependence of ibpc1"),
IOP("libpc2", HSMHV_MOD_LIBPC2, IF_REAL, "Length dependence of ibpc2"),
@ -684,16 +531,6 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("lrs", HSMHV_MOD_LRS, IF_REAL, "Length dependence of rs"),
IOP("lrth0", HSMHV_MOD_LRTH0, IF_REAL, "Length dependence of rth0"),
IOP("lvover", HSMHV_MOD_LVOVER, IF_REAL, "Length dependence of vover"),
IOP("ljs0d", HSMHV_MOD_LJS0D, IF_REAL, "Length dependence of js0d"),
IOP("ljs0swd", HSMHV_MOD_LJS0SWD, IF_REAL, "Length dependence of js0swd"),
IOP("lnjd", HSMHV_MOD_LNJD, IF_REAL, "Length dependence of njd"),
IOP("lcisbkd", HSMHV_MOD_LCISBKD, IF_REAL, "Length dependence of cisbkd"),
IOP("lvdiffjd", HSMHV_MOD_LVDIFFJD, IF_REAL, "Length dependence of vdiffjd"),
IOP("ljs0s", HSMHV_MOD_LJS0S, IF_REAL, "Length dependence of js0s"),
IOP("ljs0sws", HSMHV_MOD_LJS0SWS, IF_REAL, "Length dependence of js0sws"),
IOP("lnjs", HSMHV_MOD_LNJS, IF_REAL, "Length dependence of njs"),
IOP("lcisbks", HSMHV_MOD_LCISBKS, IF_REAL, "Length dependence of cisbks"),
IOP("lvdiffjs", HSMHV_MOD_LVDIFFJS, IF_REAL, "Length dependence of vdiffjs"),
/* Width dependence */
IOP("wvmax", HSMHV_MOD_WVMAX, IF_REAL, "Width dependence of vmax"),
@ -702,7 +539,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("weg0", HSMHV_MOD_WEG0, IF_REAL, "Width dependence of eg0"),
IOP("wvfbover", HSMHV_MOD_WVFBOVER, IF_REAL, "Width dependence of vfbover"),
IOP("wnover", HSMHV_MOD_WNOVER, IF_REAL, "Width dependence of nover"),
IOP("wnovers", HSMHV_MOD_WNOVERS, IF_REAL, "Width dependence of novers on source side"),
IOP("wnovers", HSMHV_MOD_WNOVERS, IF_REAL, "Width dependence of novers on source size"),
IOP("wwl2", HSMHV_MOD_WWL2, IF_REAL, "Width dependence of wl2"),
IOP("wvfbc", HSMHV_MOD_WVFBC, IF_REAL, "Width dependence of vfbc"),
IOP("wnsubc", HSMHV_MOD_WNSUBC, IF_REAL, "Width dependence of nsubc"),
@ -714,7 +551,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("wsc2", HSMHV_MOD_WSC2, IF_REAL, "Width dependence of sc2"),
IOP("wsc3", HSMHV_MOD_WSC3, IF_REAL, "Width dependence of sc3"),
IOP("wpgd1", HSMHV_MOD_WPGD1, IF_REAL, "Width dependence of pgd1"),
//IOP("wpgd3", HSMHV_MOD_WPGD3, IF_REAL, "Width dependence of pgd3"),
IOP("wpgd3", HSMHV_MOD_WPGD3, IF_REAL, "Width dependence of pgd3"),
IOP("wndep", HSMHV_MOD_WNDEP, IF_REAL, "Width dependence of ndep"),
IOP("wninv", HSMHV_MOD_WNINV, IF_REAL, "Width dependence of ninv"),
IOP("wmuecb0", HSMHV_MOD_WMUECB0, IF_REAL, "Width dependence of muecb0"),
@ -766,7 +603,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("wglkb2", HSMHV_MOD_WGLKB2, IF_REAL, "Width dependence of glkb2"),
IOP("wnftrp", HSMHV_MOD_WNFTRP, IF_REAL, "Width dependence of nftrp"),
IOP("wnfalp", HSMHV_MOD_WNFALP, IF_REAL, "Width dependence of nfalp"),
//IOP("wpthrou", HSMHV_MOD_WPTHROU, IF_REAL, "Width dependence of pthrou"),
IOP("wpthrou", HSMHV_MOD_WPTHROU, IF_REAL, "Width dependence of pthrou"),
IOP("wvdiffj", HSMHV_MOD_WVDIFFJ, IF_REAL, "Width dependence of vdiffj"),
IOP("wibpc1", HSMHV_MOD_WIBPC1, IF_REAL, "Width dependence of ibpc1"),
IOP("wibpc2", HSMHV_MOD_WIBPC2, IF_REAL, "Width dependence of ibpc2"),
@ -788,16 +625,6 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("wrs", HSMHV_MOD_WRS, IF_REAL, "Width dependence of rs"),
IOP("wrth0", HSMHV_MOD_WRTH0, IF_REAL, "Width dependence of rth0"),
IOP("wvover", HSMHV_MOD_WVOVER, IF_REAL, "Width dependence of vover"),
IOP("wjs0d", HSMHV_MOD_WJS0D, IF_REAL, "Wength dependence of js0d"),
IOP("wjs0swd", HSMHV_MOD_WJS0SWD, IF_REAL, "Wength dependence of js0swd"),
IOP("wnjd", HSMHV_MOD_WNJD, IF_REAL, "Wength dependence of njd"),
IOP("wcisbkd", HSMHV_MOD_WCISBKD, IF_REAL, "Wength dependence of cisbkd"),
IOP("wvdiffjd", HSMHV_MOD_WVDIFFJD, IF_REAL, "Wength dependence of vdiffjd"),
IOP("wjs0s", HSMHV_MOD_WJS0S, IF_REAL, "Wength dependence of js0s"),
IOP("wjs0sws", HSMHV_MOD_WJS0SWS, IF_REAL, "Wength dependence of js0sws"),
IOP("wnjs", HSMHV_MOD_WNJS, IF_REAL, "Wength dependence of njs"),
IOP("wcisbks", HSMHV_MOD_WCISBKS, IF_REAL, "Wength dependence of cisbks"),
IOP("wvdiffjs", HSMHV_MOD_WVDIFFJS, IF_REAL, "Wength dependence of vdiffjs"),
/* Cross-term dependence */
IOP("pvmax", HSMHV_MOD_PVMAX, IF_REAL, "Cross-term dependence of vmax"),
@ -806,7 +633,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("peg0", HSMHV_MOD_PEG0, IF_REAL, "Cross-term dependence of eg0"),
IOP("pvfbover", HSMHV_MOD_PVFBOVER, IF_REAL, "Cross-term dependence of vfbover"),
IOP("pnover", HSMHV_MOD_PNOVER, IF_REAL, "Cross-term dependence of nover"),
IOP("pnovers", HSMHV_MOD_PNOVERS, IF_REAL, "Cross-term dependence of nover on source side"),
IOP("pnovers", HSMHV_MOD_PNOVERS, IF_REAL, "Cross-term dependence of nover on source size"),
IOP("pwl2", HSMHV_MOD_PWL2, IF_REAL, "Cross-term dependence of wl2"),
IOP("pvfbc", HSMHV_MOD_PVFBC, IF_REAL, "Cross-term dependence of vfbc"),
IOP("pnsubc", HSMHV_MOD_PNSUBC, IF_REAL, "Cross-term dependence of nsubc"),
@ -818,7 +645,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("psc2", HSMHV_MOD_PSC2, IF_REAL, "Cross-term dependence of sc2"),
IOP("psc3", HSMHV_MOD_PSC3, IF_REAL, "Cross-term dependence of sc3"),
IOP("ppgd1", HSMHV_MOD_PPGD1, IF_REAL, "Cross-term dependence of pgd1"),
//IOP("ppgd3", HSMHV_MOD_PPGD3, IF_REAL, "Cross-term dependence of pgd3"),
IOP("ppgd3", HSMHV_MOD_PPGD3, IF_REAL, "Cross-term dependence of pgd3"),
IOP("pndep", HSMHV_MOD_PNDEP, IF_REAL, "Cross-term dependence of ndep"),
IOP("pninv", HSMHV_MOD_PNINV, IF_REAL, "Cross-term dependence of ninv"),
IOP("pmuecb0", HSMHV_MOD_PMUECB0, IF_REAL, "Cross-term dependence of muecb0"),
@ -870,7 +697,7 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("pglkb2", HSMHV_MOD_PGLKB2, IF_REAL, "Cross-term dependence of glkb2"),
IOP("pnftrp", HSMHV_MOD_PNFTRP, IF_REAL, "Cross-term dependence of nftrp"),
IOP("pnfalp", HSMHV_MOD_PNFALP, IF_REAL, "Cross-term dependence of nfalp"),
//IOP("ppthrou", HSMHV_MOD_PPTHROU, IF_REAL, "Cross-term dependence of pthrou"),
IOP("ppthrou", HSMHV_MOD_PPTHROU, IF_REAL, "Cross-term dependence of pthrou"),
IOP("pvdiffj", HSMHV_MOD_PVDIFFJ, IF_REAL, "Cross-term dependence of vdiffj"),
IOP("pibpc1", HSMHV_MOD_PIBPC1, IF_REAL, "Cross-term dependence of ibpc1"),
IOP("pibpc2", HSMHV_MOD_PIBPC2, IF_REAL, "Cross-term dependence of ibpc2"),
@ -892,16 +719,6 @@ IFparm HSMHVmPTable[] = { /* model parameters */
IOP("prs", HSMHV_MOD_PRS, IF_REAL, "Cross-term dependence of rs"),
IOP("prth0", HSMHV_MOD_PRTH0, IF_REAL, "Cross-term dependence of rth0"),
IOP("pvover", HSMHV_MOD_PVOVER, IF_REAL, "Cross-term dependence of vover"),
IOP("pjs0d", HSMHV_MOD_PJS0D, IF_REAL, "Cross-term dependence of js0d"),
IOP("pjs0swd", HSMHV_MOD_PJS0SWD, IF_REAL, "Cross-term dependence of js0swd"),
IOP("pnjd", HSMHV_MOD_PNJD, IF_REAL, "Cross-term dependence of njd"),
IOP("pcisbkd", HSMHV_MOD_PCISBKD, IF_REAL, "Cross-term dependence of cisbkd"),
IOP("pvdiffjd", HSMHV_MOD_PVDIFFJD, IF_REAL, "Cross-term dependence of vdiffjd"),
IOP("pjs0s", HSMHV_MOD_PJS0S, IF_REAL, "Cross-term dependence of js0s"),
IOP("pjs0sws", HSMHV_MOD_PJS0SWS, IF_REAL, "Cross-term dependence of js0sws"),
IOP("pnjs", HSMHV_MOD_PNJS, IF_REAL, "Cross-term dependence of njs"),
IOP("pcisbks", HSMHV_MOD_PCISBKS, IF_REAL, "Cross-term dependence of cisbks"),
IOP("pvdiffjs", HSMHV_MOD_PVDIFFJS, IF_REAL, "Cross-term dependence of vdiffjs"),
IOP("vgs_max", HSMHV_MOD_VGS_MAX, IF_REAL, "maximum voltage G-S branch"),
IOP("vgd_max", HSMHV_MOD_VGD_MAX, IF_REAL, "maximum voltage G-D branch"),

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvacld.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "ngspice/cktdefs.h"
#include "ngspice/sperror.h"

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvask.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "ngspice/ifsim.h"
#include "ngspice/cktdefs.h"
@ -247,12 +205,6 @@ int HSMHVask(
case HSMHV_ISUB:
value->rValue = here->HSMHV_isub;
return(OK);
case HSMHV_ISUBLD:
value->rValue = here->HSMHV_isubld;
return(OK);
case HSMHV_IDSIBPC:
value->rValue = here->HSMHV_idsibpc;
return(OK);
case HSMHV_IGIDL:
value->rValue = here->HSMHV_igidl;
return(OK);

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvcvtest.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "ngspice/cktdefs.h"
#include "hsmhvdef.h"

File diff suppressed because it is too large Load Diff

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvdel.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "hsmhvdef.h"
#include "ngspice/sperror.h"

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvdest.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "hsmhvdef.h"
#include "ngspice/suffix.h"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,600 +0,0 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
FILE : hsmhveval_dio.c
DATE : 2014.6.11
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* Substrate-source/drain junction diode
*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*===========================================================*
* Preamble
*=================*/
/*---------------------------------------------------*
* Header files
*-----------------*/
#include "ngspice/ngspice.h"
/*-----------------------------------*
* HiSIM macros
*-----------------*/
#include "hisimhv.h"
#include "hsmhvevalenv.h"
/*===========================================================*
* Function HSMHVdio
*=================*/
int HSMHVdio
(
double vbs_jct,
double vbd_jct,
double deltemp,
HSMHVinstance *here,
HSMHVmodel *model,
CKTcircuit *ckt
)
{
HSMHVbinningParam *pParam = &here->pParam ;
/* junction currents */
double Ibs =0.0, Gbs =0.0, Ibs_dT =0.0 ;
double Ibd =0.0, Gbd =0.0, Ibd_dT =0.0 ;
/* junction capacitances */
double Qbs =0.0, Capbs =0.0, Qbs_dT =0.0 ;
double Qbd =0.0, Capbd =0.0, Qbd_dT =0.0 ;
double czbd =0.0, czbd_dT=0.0 ;
double czbdsw =0.0, czbdsw_dT=0.0 ;
double czbdswg =0.0, czbdswg_dT=0.0 ;
double czbs =0.0, czbs_dT=0.0 ;
double czbssw =0.0, czbssw_dT=0.0 ;
double czbsswg =0.0, czbsswg_dT=0.0 ;
double arg =0.0, sarg =0.0 ;
/* temperature-dependent variables for SHE model */
double log_Tratio =0.0 ;
double TTEMP =0.0, TTEMP0 =0.0 ;
double beta =0.0, beta_dT =0.0 ;
double beta_inv =0.0, beta_inv_dT =0.0 ;
double Eg =0.0, Eg_dT =0.0 ;
double js =0.0, js_dT =0.0 ;
double jssw =0.0, jssw_dT =0.0 ;
double js2 =0.0, js2_dT =0.0 ;
double jssw2 =0.0, jssw2_dT =0.0 ;
double isbd_dT =0.0, isbs_dT =0.0 ;
double isbd2_dT =0.0, isbs2_dT =0.0 ;
double vbdt_dT =0.0, vbst_dT = 0.0 ;
double jd_expcd_dT =0.0 , jd_expcs_dT =0.0 ;
double jd_nvtm_invd_dT =0.0 , jd_nvtm_invs_dT =0.0 ;
double exptempd_dT = 0.0 , exptemps_dT = 0.0 ;
double tcjbd =0.0, tcjbs =0.0,
tcjbdsw =0.0, tcjbssw =0.0,
tcjbdswg =0.0, tcjbsswg =0.0 ;
/* options */
double Mfactor = here->HSMHV_m;
/* Internal flags --------------------*/
int flg_err = 0; /* error level */
int flg_info = model->HSMHV_info;
/* temporary vars. & derivatives */
double TX =0.0 ;
double T0 =0.0, T0_dT =0.0 ;
double T1 =0.0, T1_dVb =0.0, T1_dT =0.0 ;
double T2 =0.0, T2_dVb =0.0, T2_dT =0.0 ;
double T3 =0.0, T3_dVb =0.0, T3_dT =0.0 ;
double T4 =0.0, T4_dT =0.0 ;
double T9 =0.0, T9_dT =0.0 ;
double T10 =0.0, T10_dT =0.0 ;
double T12 =0.0, T12_dT =0.0 ;
/*================ Start of executable code.=================*/
/*-----------------------------------------------------------*
* Temperature dependent constants.
*-----------------*/
if ( here->HSMHVtempNode > 0 && pParam->HSMHV_rth0 != 0.0 ) {
#define HSMHVEVAL
#include "hsmhvtemp_eval_dio.h"
} else {
TTEMP = ckt->CKTtemp;
if ( here->HSMHV_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV_dtemp ; }
}
/*-----------------------------------------------------------*
* Cbsj, Cbdj: node-base S/D biases.
*-----------------*/
/* ibd */
T10 = model->HSMHV_cvbd * here->HSMHV_jd_nvtm_invd ;
T10_dT = model->HSMHV_cvbd * beta_dT / pParam->HSMHV_njd ;
T9 = model->HSMHV_cisbd * here->HSMHV_exptempd ;
T9_dT = model->HSMHV_cisbd * exptempd_dT ;
T0 = here->HSMHV_isbd2 * T9 ;
T0_dT = here->HSMHV_isbd2 * T9_dT + isbd2_dT * T9 ;
TX = - vbd_jct * T10 ;
T2 = exp ( TX );
T2_dVb = - T2 * T10 ;
T2_dT = T2 * TX * beta_dT * beta_inv ;
T3 = T2 ;
T3_dVb = T2_dVb ;
T3_dT = T2_dT ;
if ( vbd_jct < here->HSMHV_vbdt ) {
TX = vbd_jct * here->HSMHV_jd_nvtm_invd ;
if ( TX < - 3*EXP_THR ) {
T1 = 0.0 ;
T1_dVb = 0.0 ;
T1_dT = 0.0 ;
} else {
T1 = exp ( TX ) ;
T1_dVb = T1 * here->HSMHV_jd_nvtm_invd ;
T1_dT = T1 * TX * beta_dT * beta_inv ;
}
Ibd = here->HSMHV_isbd * (T1 - 1.0)
+ T0 * (T2 - 1.0)
+ pParam->HSMHV_cisbkd * (T3 - 1.0);
Gbd = here->HSMHV_isbd * T1_dVb
+ T0 * T2_dVb
+ pParam->HSMHV_cisbkd * T3_dVb ;
Ibd_dT = here->HSMHV_isbd * T1_dT + isbd_dT * ( T1 - 1.0 )
+ T0 * T2_dT + T0_dT * ( T2 - 1.0 )
+ pParam->HSMHV_cisbkd * T3_dT ;
} else {
T1 = here->HSMHV_jd_expcd ;
T4 = here->HSMHV_isbd * here->HSMHV_jd_nvtm_invd * T1 ;
Ibd = here->HSMHV_isbd * (T1 - 1.0)
+ T4 * (vbd_jct - here->HSMHV_vbdt)
+ T0 * (T2 - 1.0)
+ pParam->HSMHV_cisbkd * (T3 - 1.0) ;
Gbd = T4
+ T0 * T2_dVb
+ pParam->HSMHV_cisbkd * T3_dVb ;
T1_dT = jd_expcd_dT ;
T4_dT = isbd_dT * here->HSMHV_jd_nvtm_invd * T1
+ here->HSMHV_isbd * jd_nvtm_invd_dT * T1
+ here->HSMHV_isbd * here->HSMHV_jd_nvtm_invd * T1_dT ;
Ibd_dT = isbd_dT * ( T1 - 1.0 ) + here->HSMHV_isbd * T1_dT
+ T4_dT * ( vbd_jct - here->HSMHV_vbdt ) - T4 * vbdt_dT
+ T0_dT * ( T2 - 1.0 ) + T0 * T2_dT
+ pParam->HSMHV_cisbkd * T3_dT ;
}
T12 = model->HSMHV_divxd * here->HSMHV_isbd2 ;
Ibd += T12 * vbd_jct ;
Gbd += T12 ;
T12_dT = model->HSMHV_divxd * isbd2_dT ;
Ibd_dT += T12_dT * vbd_jct ;
/* ibs */
T10 = model->HSMHV_cvbs * here->HSMHV_jd_nvtm_invs ;
T10_dT = model->HSMHV_cvbs * beta_dT / pParam->HSMHV_njs ;
T9 = model->HSMHV_cisbs * here->HSMHV_exptemps ;
T9_dT = model->HSMHV_cisbs * exptemps_dT ;
T0 = here->HSMHV_isbs2 * T9 ;
T0_dT = here->HSMHV_isbs2 * T9_dT + isbs2_dT * T9 ;
TX = - vbs_jct * T10 ;
T2 = exp ( TX );
T2_dVb = - T2 * T10 ;
T2_dT = T2 * TX * beta_dT * beta_inv ;
T3 = T2 ;
T3_dVb = T2_dVb ;
T3_dT = T2_dT ;
if ( vbs_jct < here->HSMHV_vbst ) {
TX = vbs_jct * here->HSMHV_jd_nvtm_invs ;
if ( TX < - 3*EXP_THR ) {
T1 = 0.0 ;
T1_dVb = 0.0 ;
T1_dT = 0.0 ;
} else {
T1 = exp ( TX ) ;
T1_dVb = T1 * here->HSMHV_jd_nvtm_invs ;
T1_dT = T1 * TX * beta_dT * beta_inv ;
}
Ibs = here->HSMHV_isbs * (T1 - 1.0)
+ T0 * (T2 - 1.0)
+ pParam->HSMHV_cisbks * (T3 - 1.0);
Gbs = here->HSMHV_isbs * T1_dVb
+ T0 * T2_dVb
+ pParam->HSMHV_cisbks * T3_dVb ;
Ibs_dT = here->HSMHV_isbs * T1_dT + isbs_dT * ( T1 - 1.0 )
+ T0 * T2_dT + T0_dT * ( T2 - 1.0 )
+ pParam->HSMHV_cisbks * T3_dT ;
} else {
T1 = here->HSMHV_jd_expcs ;
T4 = here->HSMHV_isbs * here->HSMHV_jd_nvtm_invs * T1 ;
Ibs = here->HSMHV_isbs * (T1 - 1.0)
+ T4 * (vbs_jct - here->HSMHV_vbst)
+ T0 * (T2 - 1.0)
+ pParam->HSMHV_cisbks * (T3 - 1.0) ;
Gbs = T4
+ T0 * T2_dVb
+ pParam->HSMHV_cisbks * T3_dVb ;
T1_dT = jd_expcs_dT ;
T4_dT = isbs_dT * here->HSMHV_jd_nvtm_invs * T1
+ here->HSMHV_isbs * jd_nvtm_invs_dT * T1
+ here->HSMHV_isbs * here->HSMHV_jd_nvtm_invs * T1_dT ;
Ibs_dT = isbs_dT * ( T1 - 1.0 ) + here->HSMHV_isbs * T1_dT
+ T4_dT * ( vbs_jct - here->HSMHV_vbst) - T4 * vbst_dT
+ T0_dT * ( T2 - 1.0 ) + T0 * T2_dT
+ pParam->HSMHV_cisbks * T3_dT ;
}
T12 = model->HSMHV_divxs * here->HSMHV_isbs2 ;
Ibs += T12 * vbs_jct ;
Gbs += T12 ;
T12_dT = model->HSMHV_divxs * isbs2_dT ;
Ibs_dT += T12_dT * vbs_jct ;
/*-----------------------------------------------------------*
* Charges and Capacitances.
*-----------------*/
/* charge storage elements
* bulk-drain and bulk-source depletion capacitances
* czbd : zero bias drain junction capacitance
* czbs : zero bias source junction capacitance
* czbdsw:zero bias drain junction sidewall capacitance
* czbssw:zero bias source junction sidewall capacitance
*/
/* Source Bulk Junction */
tcjbs = model->HSMHV_tcjbs ;
tcjbssw = model->HSMHV_tcjbssw ;
tcjbsswg = model->HSMHV_tcjbsswg ;
czbs = model->HSMHV_cjs * here->HSMHV_as ;
czbs = czbs * ( 1.0 + tcjbs * ( TTEMP - model->HSMHV_ktnom )) ;
czbs_dT = ( model->HSMHV_cjs * here->HSMHV_as ) * tcjbs ;
if (here->HSMHV_ps > here->HSMHV_weff_nf) {
czbssw = model->HSMHV_cjsws * ( here->HSMHV_ps - here->HSMHV_weff_nf ) ;
czbssw = czbssw * ( 1.0 + tcjbssw * ( TTEMP - model->HSMHV_ktnom )) ;
czbssw_dT = ( model->HSMHV_cjsws * ( here->HSMHV_ps - here->HSMHV_weff_nf )) * tcjbssw ;
czbsswg = model->HSMHV_cjswgs * here->HSMHV_weff_nf ;
czbsswg = czbsswg * ( 1.0 + tcjbsswg * ( TTEMP - model->HSMHV_ktnom )) ;
czbsswg_dT = ( model->HSMHV_cjswgs * here->HSMHV_weff_nf ) * tcjbsswg ;
// if (vbs_jct == 0.0) {
if (0) {
Qbs = 0.0 ;
Qbs_dT = 0.0 ;
Capbs = czbs + czbssw + czbsswg ;
} else if (vbs_jct < 0.0) {
if (czbs > 0.0) {
arg = 1.0 - vbs_jct / model->HSMHV_pbs ;
if (model->HSMHV_mjs == 0.5)
sarg = 1.0 / sqrt(arg) ;
else
sarg = Fn_Pow( arg , -model->HSMHV_mjs ) ;
Qbs = model->HSMHV_pbs * czbs * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjs) ;
Qbs_dT = model->HSMHV_pbs * czbs_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjs) ;
Capbs = czbs * sarg ;
} else {
Qbs = 0.0 ;
Qbs_dT = 0.0 ;
Capbs = 0.0 ;
}
if (czbssw > 0.0) {
arg = 1.0 - vbs_jct / model->HSMHV_pbsws ;
if (model->HSMHV_mjsws == 0.5)
sarg = 1.0 / sqrt(arg) ;
else
sarg = Fn_Pow( arg , -model->HSMHV_mjsws ) ;
Qbs += model->HSMHV_pbsws * czbssw * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjsws) ;
Qbs_dT += model->HSMHV_pbsws * czbssw_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjsws) ;
Capbs += czbssw * sarg ;
}
if (czbsswg > 0.0) {
arg = 1.0 - vbs_jct / model->HSMHV_pbswgs ;
if (model->HSMHV_mjswgs == 0.5)
sarg = 1.0 / sqrt(arg) ;
else
sarg = Fn_Pow( arg , -model->HSMHV_mjswgs ) ;
Qbs += model->HSMHV_pbswgs * czbsswg * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswgs) ;
Qbs_dT += model->HSMHV_pbswgs * czbsswg_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswgs) ;
Capbs += czbsswg * sarg ;
}
} else {
T1 = czbs + czbssw + czbsswg ;
T1_dT = czbs_dT + czbssw_dT + czbsswg_dT ;
T2 = czbs * model->HSMHV_mjs / model->HSMHV_pbs
+ czbssw * model->HSMHV_mjsws / model->HSMHV_pbsws
+ czbsswg * model->HSMHV_mjswgs / model->HSMHV_pbswgs ;
T2_dT = czbs_dT * model->HSMHV_mjs / model->HSMHV_pbs
+ czbssw_dT * model->HSMHV_mjsws / model->HSMHV_pbsws
+ czbsswg_dT * model->HSMHV_mjswgs / model->HSMHV_pbswgs ;
Qbs = vbs_jct * (T1 + vbs_jct * 0.5 * T2) ;
Qbs_dT = vbs_jct * (T1_dT + vbs_jct * 0.5 * T2_dT) ;
Capbs = T1 + vbs_jct * T2 ;
}
} else {
czbsswg = model->HSMHV_cjswgs * here->HSMHV_ps ;
czbsswg = czbsswg * ( 1.0 + tcjbsswg * ( TTEMP - model->HSMHV_ktnom )) ;
czbsswg_dT = ( model->HSMHV_cjswgs * here->HSMHV_ps ) * tcjbsswg ;
// if (vbs_jct == 0.0) {
if (0) {
Qbs = 0.0 ;
Qbs_dT = 0.0 ;
Capbs = czbs + czbsswg ;
} else if (vbs_jct < 0.0) {
if (czbs > 0.0) {
arg = 1.0 - vbs_jct / model->HSMHV_pbs ;
if (model->HSMHV_mjs == 0.5)
sarg = 1.0 / sqrt(arg) ;
else
sarg = Fn_Pow( arg , -model->HSMHV_mjs ) ;
Qbs = model->HSMHV_pbs * czbs * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjs) ;
Qbs_dT = model->HSMHV_pbs * czbs_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjs) ;
Capbs = czbs * sarg ;
} else {
Qbs = 0.0 ;
Qbs_dT = 0.0 ;
Capbs = 0.0 ;
}
if (czbsswg > 0.0) {
arg = 1.0 - vbs_jct / model->HSMHV_pbswgs ;
if (model->HSMHV_mjswgs == 0.5)
sarg = 1.0 / sqrt(arg) ;
else
sarg = Fn_Pow( arg , -model->HSMHV_mjswgs ) ;
Qbs += model->HSMHV_pbswgs * czbsswg * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswgs) ;
Qbs_dT += model->HSMHV_pbswgs * czbsswg_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswgs) ;
Capbs += czbsswg * sarg ;
}
} else {
T1 = czbs + czbsswg ;
T1_dT = czbs_dT + czbsswg_dT ;
T2 = czbs * model->HSMHV_mjs / model->HSMHV_pbs
+ czbsswg * model->HSMHV_mjswgs / model->HSMHV_pbswgs ;
T2_dT = czbs_dT * model->HSMHV_mjs / model->HSMHV_pbs
+ czbsswg_dT * model->HSMHV_mjswgs / model->HSMHV_pbswgs ;
Qbs = vbs_jct * (T1 + vbs_jct * 0.5 * T2) ;
Qbs_dT = vbs_jct * (T1_dT + vbs_jct * 0.5 * T2_dT) ;
Capbs = T1 + vbs_jct * T2 ;
}
}
/* Drain Bulk Junction */
tcjbd = model->HSMHV_tcjbd ;
tcjbdsw = model->HSMHV_tcjbdsw ;
tcjbdswg = model->HSMHV_tcjbdswg ;
czbd = model->HSMHV_cjd * here->HSMHV_ad ;
czbd = czbd * ( 1.0 + tcjbd * ( TTEMP - model->HSMHV_ktnom )) ;
czbd_dT = ( model->HSMHV_cjd * here->HSMHV_ad ) * tcjbd ;
if (here->HSMHV_pd > here->HSMHV_weff_nf) {
czbdsw = model->HSMHV_cjswd * ( here->HSMHV_pd - here->HSMHV_weff_nf ) ;
czbdsw = czbdsw * ( 1.0 + tcjbdsw * ( TTEMP - model->HSMHV_ktnom )) ;
czbdsw_dT = ( model->HSMHV_cjswd * ( here->HSMHV_pd - here->HSMHV_weff_nf )) * tcjbdsw ;
czbdswg = model->HSMHV_cjswgd * here->HSMHV_weff_nf ;
czbdswg = czbdswg * ( 1.0 + tcjbdswg * ( TTEMP - model->HSMHV_ktnom )) ;
czbdswg_dT = ( model->HSMHV_cjswgd * here->HSMHV_weff_nf ) * tcjbdswg ;
// if (vbd_jct == 0.0) {
if (0) {
Qbd = 0.0 ;
Qbd_dT = 0.0 ;
Capbd = czbd + czbdsw + czbdswg ;
} else if (vbd_jct < 0.0) {
if (czbd > 0.0) {
arg = 1.0 - vbd_jct / model->HSMHV_pbd ;
if (model->HSMHV_mjd == 0.5)
sarg = 1.0 / sqrt(arg) ;
else
sarg = Fn_Pow( arg , -model->HSMHV_mjd ) ;
Qbd = model->HSMHV_pbd * czbd * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjd) ;
Qbd_dT = model->HSMHV_pbd * czbd_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjd) ;
Capbd = czbd * sarg ;
} else {
Qbd = 0.0 ;
Qbd_dT = 0.0 ;
Capbd = 0.0 ;
}
if (czbdsw > 0.0) {
arg = 1.0 - vbd_jct / model->HSMHV_pbswd ;
if (model->HSMHV_mjswd == 0.5)
sarg = 1.0 / sqrt(arg) ;
else
sarg = Fn_Pow( arg , -model->HSMHV_mjswd ) ;
Qbd += model->HSMHV_pbswd * czbdsw * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswd) ;
Qbd_dT += model->HSMHV_pbswd * czbdsw_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswd) ;
Capbd += czbdsw * sarg ;
}
if (czbdswg > 0.0) {
arg = 1.0 - vbd_jct / model->HSMHV_pbswgd ;
if (model->HSMHV_mjswgd == 0.5)
sarg = 1.0 / sqrt(arg) ;
else
sarg = Fn_Pow( arg , -model->HSMHV_mjswgd ) ;
Qbd += model->HSMHV_pbswgd * czbdswg * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswgd) ;
Qbd_dT += model->HSMHV_pbswgd * czbdswg_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswgd) ;
Capbd += czbdswg * sarg ;
}
} else {
T1 = czbd + czbdsw + czbdswg ;
T1_dT = czbd_dT + czbdsw_dT + czbdswg_dT ;
T2 = czbd * model->HSMHV_mjd / model->HSMHV_pbd
+ czbdsw * model->HSMHV_mjswd / model->HSMHV_pbswd
+ czbdswg * model->HSMHV_mjswgd / model->HSMHV_pbswgd ;
T2_dT = czbd_dT * model->HSMHV_mjd / model->HSMHV_pbd
+ czbdsw_dT * model->HSMHV_mjswd / model->HSMHV_pbswd
+ czbdswg_dT * model->HSMHV_mjswgd / model->HSMHV_pbswgd ;
Qbd = vbd_jct * (T1 + vbd_jct * 0.5 * T2) ;
Qbd_dT = vbd_jct * (T1_dT + vbd_jct * 0.5 * T2_dT) ;
Capbd = T1 + vbd_jct * T2 ;
}
} else {
czbdswg = model->HSMHV_cjswgd * here->HSMHV_pd ;
czbdswg = czbdswg * ( 1.0 + tcjbdswg * ( TTEMP - model->HSMHV_ktnom )) ;
czbdswg_dT = ( model->HSMHV_cjswgd * here->HSMHV_pd ) * tcjbdswg ;
// if (vbd_jct == 0.0) {
if (0) {
Qbd = 0.0 ;
Qbd_dT = 0.0 ;
Capbd = czbd + czbdswg ;
} else if (vbd_jct < 0.0) {
if (czbd > 0.0) {
arg = 1.0 - vbd_jct / model->HSMHV_pbd ;
if (model->HSMHV_mjd == 0.5)
sarg = 1.0 / sqrt(arg) ;
else
sarg = Fn_Pow( arg , -model->HSMHV_mjd ) ;
Qbd = model->HSMHV_pbd * czbd * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjd) ;
Qbd_dT = model->HSMHV_pbd * czbd_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjd) ;
Capbd = czbd * sarg ;
} else {
Qbd = 0.0 ;
Qbd_dT = 0.0 ;
Capbd = 0.0 ;
}
if (czbdswg > 0.0) {
arg = 1.0 - vbd_jct / model->HSMHV_pbswgd ;
if (model->HSMHV_mjswgd == 0.5)
sarg = 1.0 / sqrt(arg) ;
else
sarg = Fn_Pow( arg , -model->HSMHV_mjswgd ) ;
Qbd += model->HSMHV_pbswgd * czbdswg * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswgd) ;
Qbd_dT += model->HSMHV_pbswgd * czbdswg_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswgd) ;
Capbd += czbdswg * sarg ;
}
} else {
T1 = czbd + czbdswg ;
T1_dT = czbd_dT + czbdswg_dT ;
T2 = czbd * model->HSMHV_mjd / model->HSMHV_pbd
+ czbdswg * model->HSMHV_mjswgd / model->HSMHV_pbswgd ;
T2_dT = czbd_dT * model->HSMHV_mjd / model->HSMHV_pbd
+ czbdswg_dT * model->HSMHV_mjswgd / model->HSMHV_pbswgd ;
Qbd = vbd_jct * (T1 + vbd_jct * 0.5 * T2) ;
Qbd_dT = vbd_jct * (T1_dT + vbd_jct * 0.5 * T2_dT) ;
Capbd = T1 + vbd_jct * T2 ;
}
}
/*---------------------------------------------------*
* Junction diode.
*-----------------*/
here->HSMHV_ibs = Mfactor * Ibs ;
here->HSMHV_ibd = Mfactor * Ibd ;
here->HSMHV_gbs = Mfactor * Gbs ;
here->HSMHV_gbd = Mfactor * Gbd ;
*(ckt->CKTstate0 + here->HSMHVqbs) = Mfactor * Qbs ;
*(ckt->CKTstate0 + here->HSMHVqbd) = Mfactor * Qbd ;
here->HSMHV_capbs = Mfactor * Capbs ;
here->HSMHV_capbd = Mfactor * Capbd ;
here->HSMHV_gbdT = Mfactor * Ibd_dT ;
here->HSMHV_gbsT = Mfactor * Ibs_dT ;
here->HSMHV_gcbdT = Mfactor * Qbd_dT ;
here->HSMHV_gcbsT = Mfactor * Qbs_dT ;
/*-----------------------------------------------------------*
* Warn floating-point exceptions.
* - Function finite() in libm is called.
*-----------------*/
T1 = here->HSMHV_ibs + here->HSMHV_ibd + here->HSMHV_gbs + here->HSMHV_gbd;
T1 = T1 + *(ckt->CKTstate0 + here->HSMHVqbs)
+ *(ckt->CKTstate0 + here->HSMHVqbd)
+ here->HSMHV_capbs
+ here->HSMHV_capbd;
if ( ! finite (T1) ) {
flg_err = 1 ;
fprintf(stderr ,
"*** warning(HiSIM_HV(%s)): FP-exception (junction diode)\n",model->HSMHVmodName) ;
if ( flg_info >= 1 ) {
printf ("*** warning(HiSIM_HV(%s)): FP-exception\n",model->HSMHVmodName) ;
}
}
/*-----------------------------------------------------------*
* End of HSMHVeval_dio
*-----------------*/
return ( HiSIM_OK ) ;
}

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhveval_qover.h
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
/* Begin HSMHVevalQover */
/*---------------------------------------------------*
@ -103,7 +61,7 @@ June 2008 (revised October 2011)
/*-----------------------------------*
* QsuLD: total charge = Accumulation | Depletion+inversion
*-----------------*/
if ( VgpLD < Vgb_fb_LD ){
if ( VgpLD < Vgb_fb_LD ){
/*---------------------------*
* Accumulation
*-----------------*/
@ -136,23 +94,16 @@ June 2008 (revised October 2011)
Ac3_dVgb = T1 * Ac31_dVgb ;
Ac3_dT = T1 * Ac31_dT ;
if ( Ac4 < Ac3*1.0e-8 ) {
Ac1 = 0.5*Ac4/Ac31 ;
Ac1_dVxb = - 0.5*Ac4/Ac3*Ac31_dVxb ;
Ac1_dVgb = - 0.5*Ac4/Ac3*Ac31_dVxb ;
Ac1_dT = 0.5*Ac4_dT/Ac31 - 0.5*Ac4/Ac3*Ac31_dT ;
} else {
Ac2 = sqrt( Ac4 + Ac3 ) ;
T1 = 0.5 / Ac2 ;
Ac2_dVxb = T1 * Ac3_dVxb ;
Ac2_dVgb = T1 * Ac3_dVgb ;
Ac2_dT = T1 * ( Ac4_dT + Ac3_dT );
Ac2 = sqrt( Ac4 + Ac3 ) ;
T1 = 0.5 / Ac2 ;
Ac2_dVxb = T1 * Ac3_dVxb ;
Ac2_dVgb = T1 * Ac3_dVgb ;
Ac2_dT = T1 * ( Ac4_dT + Ac3_dT );
Ac1 = -Ac31 + Ac2 ;
Ac1_dVxb = Ac2_dVxb -Ac31_dVxb ;
Ac1_dVgb = Ac2_dVgb -Ac31_dVgb ;
Ac1_dT = Ac2_dT -Ac31_dT ;
}
Ac1 = -7.0 * C_SQRT_2 + Ac2 + 9.0 * TY * ( TX - 2.0 ) ;
Ac1_dVxb = Ac2_dVxb + 9.0 * TY * TX_dVxb ;
Ac1_dVgb = Ac2_dVgb + 9.0 * TY * TX_dVgb ;
Ac1_dT = Ac2_dT + 9.0 * ( TY_dT * ( TX - 2.0 ) + TY * TX_dT ) ;
Acd = pow( Ac1 , C_1o3 ) ;
T1 = C_1o3 / ( Acd * Acd ) ;
@ -320,14 +271,14 @@ June 2008 (revised October 2011)
VgpLD_shift_dVgb = VgpLD_dVgb;
VgpLD_shift_dVxb = Vxbgmtcl_dVxbgmt;
VgpLD_shift_dT = Vxbgmtcl_dT;
exp_bVbs = exp( beta * - Vxbgmtcl ) + small;
exp_bVbs = exp( beta * - Vxbgmtcl ) + small ;
exp_bVbs_dVxb = - exp_bVbs * beta * Vxbgmtcl_dVxbgmt;
exp_bVbs_dT = - exp_bVbs * (beta_dT*Vxbgmtcl + beta*Vxbgmtcl_dT);
T0 = here->HSMHV_nin / Nover_func;
T0_dT = Nin_dT / Nover_func;
cnst1over = T0 * T0;
cnst1over_dT = 2.0 * T0 * T0_dT;
gamma = cnst1over * exp_bVbs;
gamma = cnst1over * exp_bVbs ;
gamma_dVxb = cnst1over * exp_bVbs_dVxb;
gamma_dT = cnst1over_dT * exp_bVbs + cnst1over * exp_bVbs_dT;
@ -360,8 +311,8 @@ June 2008 (revised October 2011)
psi += beta*0.1 ;
psi_dT += beta_dT*0.1 ;
psi_B = psi;
arg_B = psi*psi/(gamma*T0);
/* psi_B = psi;*/
/* arg_B = psi*psi/(gamma*T0);*/
Chi_B = log(gamma*T0 + psi*psi) - log(cnst1over*T0) + beta*Vxbgmtcl;
Chi_B_dVgb = 2.0*psi*psi_dVgb/ (gamma*T0 + psi*psi);
Chi_B_dVxb = (gamma_dVxb*T0+2.0*psi*psi_dVxb)/(gamma*T0+psi*psi)
@ -370,10 +321,10 @@ June 2008 (revised October 2011)
- (cnst1over_dT*T0 + cnst1over*T0_dT)/(cnst1over*T0)
+ beta_dT*Vxbgmtcl + beta*Vxbgmtcl_dT;
Ps0_iniB = Chi_B/beta - Vxbgmtcl ;
Ps0_iniB_dVgb = Chi_B_dVgb/beta;
/* Ps0_iniB_dVgb = Chi_B_dVgb/beta;
Ps0_iniB_dVxb = Chi_B_dVxb/beta- Vxbgmtcl_dVxbgmt;
Ps0_iniB_dT = Chi_B_dT/beta - Chi_B/(beta*beta)*beta_dT - Vxbgmtcl_dT;
*/
/* construction of Ps0LD by taking Ps0_iniB as an upper limit of Ps0_iniA
*
@ -522,7 +473,7 @@ June 2008 (revised October 2011)
*-----------------*/
if ( flg_conv == 0 ) {
fprintf( stderr ,
"*** warning(HiSIM_HV(%s)): Went Over Iteration Maximum (Ps0LD)\n",model->HSMHVmodName ) ;
"*** warning(HiSIM_HV): Went Over Iteration Maximum (Ps0LD)\n" ) ;
fprintf( stderr , " -Vxbgmtcl = %e Vgbgmt = %e\n" , -Vxbgmtcl , Vgbgmt ) ;
}
@ -626,7 +577,7 @@ June 2008 (revised October 2011)
fs01_dVgs = Ps0LD_dVgb * fs01_dPs0 ;
fs01_dT = Ps0LD_dT * fs01_dPs0 + fs01_dT;
fs02_dVbs = Ps0LD_dVxb * fs02_dPs0 + fs02_dVbs ;
fs02_dVxb = Ps0LD_dVds * fs02_dPs0 ;
/* fs02_dVxb = Ps0LD_dVds * fs02_dPs0 ;*/
fs02_dVgb = Ps0LD_dVgb * fs02_dPs0 ;
fs02_dT = Ps0LD_dT * fs02_dPs0 + fs02_dT;
@ -665,9 +616,9 @@ June 2008 (revised October 2011)
} /* end of Vgbgmt region blocks */
/* convert to source ref. */
Ps0LD_dVbs = Ps0LD_dVxb * Vxbgmt_dVbs + Ps0LD_dVgb * Vgbgmt_dVbs ;
/* Ps0LD_dVbs = Ps0LD_dVxb * Vxbgmt_dVbs + Ps0LD_dVgb * Vgbgmt_dVbs ;*/
Ps0LD_dVds = Ps0LD_dVxb * Vxbgmt_dVds + Ps0LD_dVgb * Vgbgmt_dVds ;
Ps0LD_dVgs = Ps0LD_dVxb * Vxbgmt_dVgs + Ps0LD_dVgb * Vgbgmt_dVgs ;
/* Ps0LD_dVgs = Ps0LD_dVxb * Vxbgmt_dVgs + Ps0LD_dVgb * Vgbgmt_dVgs ;*/
QsuLD_dVbs = QsuLD_dVxb * Vxbgmt_dVbs + QsuLD_dVgb * Vgbgmt_dVbs ;
QsuLD_dVds = QsuLD_dVxb * Vxbgmt_dVds + QsuLD_dVgb * Vgbgmt_dVds ;

View File

@ -1,656 +0,0 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
FILE : hsmhveval_rdrift.c
DATE : 2014.6.11
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
/*===========================================================*
* Preamble.
*=================*/
/*---------------------------------------------------*
* Header files.
*-----------------*/
#include "ngspice/ngspice.h"
#ifdef __STDC__
/* #include <ieeefp.h> */
#endif
/*-----------------------------------*
* HiSIM macros
*-----------------*/
#include "hisimhv.h"
#include "hsmhvevalenv.h"
/* local variables used in macro functions */
double TMF0 , TMF1 , TMF2 , TMF3 , TMF4 , TMF5 , TMF6 ;
/*===========================================================*
* pow
*=================*/
#ifdef POW_TO_EXP_AND_LOG
#define Fn_Pow( x , y ) exp( y * log( x ) )
#else
#define Fn_Pow( x , y ) pow( x , y )
#endif
/*===========================================================*
* Macro Functions for ceiling/flooring/symmetrization.
*=================*/
/*---------------------------------------------------*
* smoothUpper: ceiling.
* y = xmax - 0.5 ( arg + sqrt( arg^2 + 4 xmax delta ) )
* arg = xmax - x - delta
*-----------------*/
#define Fn_SU( y , x , xmax , delta , dx ) { \
TMF1 = ( xmax ) - ( x ) - ( delta ) ; \
TMF2 = 4.0 * ( xmax ) * ( delta) ; \
TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \
TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \
dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \
y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \
}
#define Fn_SU2( y , x , xmax , delta , dy_dx , dy_dxmax ) { \
TMF1 = ( xmax ) - ( x ) - ( delta ) ; \
TMF2 = 4.0 * ( xmax ) * ( delta) ; \
TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \
TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \
dy_dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \
dy_dxmax = 0.5 * ( 1.0 - ( TMF1 + 2.0 * delta ) / TMF2 ) ; \
y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \
}
/*---------------------------------------------------*
* smoothLower: flooring.
* y = xmin + 0.5 ( arg + sqrt( arg^2 + 4 xmin delta ) )
* arg = x - xmin - delta
*-----------------*/
#define Fn_SL( y , x , xmin , delta , dx ) { \
TMF1 = ( x ) - ( xmin ) - ( delta ) ; \
TMF2 = 4.0 * ( xmin ) * ( delta ) ; \
TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \
TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \
dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \
y = ( xmin ) + 0.5 * ( TMF1 + TMF2 ) ; \
}
#define Fn_SL2( y , x , xmin , delta , dy_dx, dy_dxmin ) { \
TMF1 = ( x ) - ( xmin ) - ( delta ) ; \
TMF2 = 4.0 * ( xmin ) * ( delta ) ; \
TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \
TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \
dy_dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \
dy_dxmin = 0.5 * ( 1.0 - ( TMF1 - 2.0 * delta ) / TMF2 ) ; \
y = ( xmin ) + 0.5 * ( TMF1 + TMF2 ) ; \
}
/*---------------------------------------------------*
* smoothZero: flooring to zero.
* y = 0.5 ( x + sqrt( x^2 + 4 delta^2 ) )
*-----------------*/
#define Fn_SZ( y , x , delta , dx ) { \
TMF2 = sqrt ( ( x ) * ( x ) + 4.0 * ( delta ) * ( delta ) ) ; \
dx = 0.5 * ( 1.0 + ( x ) / TMF2 ) ; \
y = 0.5 * ( ( x ) + TMF2 ) ; \
if( y < 0.0 ) { y=0.0; dx=0.0; } \
}
/*---------------------------------------------------*
* SymAdd: evaluate additional term for symmetry.
*-----------------*/
#define Fn_SymAdd( y , x , add0 , dx ) \
{ \
if( ( x ) < 1e6 ) { \
TMF1 = 2.0 * ( x ) / ( add0 ) ; \
TMF2 = 1.0 + TMF1 * ( (1.0/2) + TMF1 * ( (1.0/6) \
+ TMF1 * ( (1.0/24) + TMF1 * ( (1.0/120) \
+ TMF1 * ( (1.0/720) + TMF1 * (1.0/5040) ) ) ) ) ) ; \
TMF3 = (1.0/2) + TMF1 * ( (1.0/3) \
+ TMF1 * ( (1.0/8) + TMF1 * ( (1.0/30) \
+ TMF1 * ( (1.0/144) + TMF1 * (1.0/840) ) ) ) ) ; \
y = add0 / TMF2 ; \
dx = - 2.0 * TMF3 / ( TMF2 * TMF2 ) ; \
} else { y=0.0; dx=0.9; } \
}
#define Fn_CP( y , x , xmax , pw , dx ) { \
double x2 = (x) * (x) ; \
double xmax2 = (xmax) * (xmax) ; \
double xp = 1.0 , xmp = 1.0 ; \
int m =0, mm =0; \
double arg =0.0, dnm =0.0; \
for ( m = 0 ; m < pw ; m ++ ) { xp *= x2 ; xmp *= xmax2 ; } \
arg = xp + xmp ; \
dnm = arg ; \
if ( pw == 1 || pw == 2 || pw == 4 || pw == 8 ) { \
if ( pw == 1 ) { mm = 1 ; \
} else if ( pw == 2 ) { mm = 2 ; \
} else if ( pw == 4 ) { mm = 3 ; \
} else if ( pw == 8 ) { mm = 4 ; } \
for ( m = 0 ; m < mm ; m ++ ) { dnm = sqrt( dnm ) ; } \
} else { dnm = Fn_Pow( dnm , 1.0 / ( 2.0 * pw ) ) ; } \
dnm = 1.0 / dnm ; \
y = (x) * (xmax) * dnm ; \
dx = (xmax) * xmp * dnm / arg ; \
}
#define Fn_SU_CP( y , x , xmax , delta , pw , dx ) { \
if(x > xmax - delta && delta >= 0.0) { \
TMF1 = x - xmax + delta ; \
Fn_CP( TMF0 , TMF1 , delta , pw , dx ) \
y = xmax - delta + TMF0 ; \
dx = dx ; \
} else { \
y = x ; \
dx = 1.0 ; \
} \
}
/*===========================================================*
* Function hsmhvrdrift.
*=================*/
int HSMHVrdrift
(
double Vddp,
double Vds,
double Vbs,
double Vsubs, /* substrate-source voltage */
double deltemp,
HSMHVinstance *here,
HSMHVmodel *model,
CKTcircuit *ckt
)
{
HSMHVbinningParam *pParam = &here->pParam ;
HSMHVmodelMKSParam *modelMKS = &model->modelMKS ;
const double small = 1.0e-50 ;
double Mfactor =0.0, WeffLD_nf =0.0 ;
double Ldrift =0.0, Xldld =0.0 ;
double Nover =0.0 ;
/* temporary vars. & derivatives*/
double T0 =0.0, T0_dVb =0.0, T0_dVd =0.0, T0_dVg =0.0, T0_dT =0.0 ;
double T1 =0.0, T1_dVd =0.0, T1_dT =0.0, T1_dVddp =0.0 ;
double T2 =0.0, T2_dVb =0.0, T2_dVd =0.0, T2_dT =0.0, T2_dVddp =0.0 ;
double T3 =0.0, T3_dT =0.0, T3_dVddp =0.0 ;
double T4 =0.0, T4_dT =0.0, T4_dVddp =0.0 ;
double T5 =0.0, T5_dT =0.0, T5_dVddp =0.0 ;
double T6 =0.0, T6_dT =0.0, T6_dVddp =0.0 ;
double T9 =0.0 ;
/* bias-dependent Rd, Rs */
double Edri =0.0, Edri_dVddp =0.0 ;
double Vdri =0.0, Vdri_dVddp =0.0, Vdri_dT =0.0 ;
double Vmax =0.0, Vmax_dT =0.0 ;
double Mu0 =0.0, Mu0_dT =0.0 ;
double Cx =0.0, Cx_dT =0.0 ;
double Car =0.0, Car_dT =0.0 ;
double Mu =0.0, Mu_dVddp = 0.0, Mu_dT =0.0 ;
double Xov =0.0, Xov_dVds =0.0, Xov_dVgs =0.0, Xov_dVbs =0.0, Xov_dT =0.0 ;
double Carr =0.0, Carr_dVds=0.0, Carr_dVgs=0.0, Carr_dVbs=0.0, Carr_dVddp =0.0, Carr_dT =0.0 ;
double GD =0.0, GD_dVddp =0.0, GD_dVgse =0.0, GD_dT =0.0, GD_dVds =0.0, GD_dVgs =0.0, GD_dVbs =0.0 ;
double Rd =0.0, Rd_dVddp =0.0, Rd_dVdse =0.0, Rd_dVgse =0.0, Rd_dVbse =0.0, Rd_dT =0.0, Rd_dVds =0.0, Rd_dVgs =0.0, Rd_dVbs =0.0 ;
double Vddpz=0.0, Vddpz_dVddp=0.0, Vzadd =0.0, Vzadd_dVddp=0.0 ;
/* temperature-dependent variables for SHE model */
double TTEMP =0.0, TTEMP0 =0.0 ;
/* Wdepl and Wjunc */
double Wdepl, Wdepl_dVd, Wdepl_dVg, Wdepl_dVb, Wdepl_dT;
double Wjunc0, Wjunc0_dVd, Wjunc0_dVb;
double Wrdrdjunc, Wjunc, Wjunc_dVd, Wjunc_dVb;
const double Res_min = 1.0e-4 ;
const double epsm10 = 10.0e0 * C_EPS_M ;
const double ps_conv = 1.0e-12 ;
double Rdrbb_dT =0.0 ;
double Wdep = 0.0, Wdep_dVdserev = 0.0, Wdep_dVsubsrev = 0.0 ;
double T1_dVdserev = 0.0, T1_dVsubsrev = 0.0, T6_dVdserev = 0.0, T6_dVsubsrev = 0.0 ;
double Rd_dVsubs=0.0 ;
#define C_sub_delta 0.1 /* CHECK! */
#define C_sub_delta2 1.0e-9 /* CHECK! */
NG_IGNORE(Vsubs);
/*================ Start of executable code.=================*/
/*-----------------------------------------------------------*
* Temperature dependent constants.
*-----------------*/
if ( here->HSMHVtempNode > 0 && pParam->HSMHV_rth0 != 0.0 ) {
#define HSMHVEVAL
#include "hsmhvtemp_eval_rdri.h"
} else {
if ( here->HSMHV_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV_dtemp ; }
Mu0_dT = 0.0 ;
Vmax_dT = 0.0 ;
Cx_dT = 0.0 ;
Car_dT = 0.0 ;
Rdrbb_dT = 0.0 ;
}
Mfactor = here->HSMHV_m ;
WeffLD_nf = here->HSMHV_weff_ld * here->HSMHV_nf ;
Ldrift = here->HSMHV_ldrift1 + here->HSMHV_ldrift2 ;
Xldld = model->HSMHV_xldld + small ;
Nover = pParam->HSMHV_nover ;
Mu0 = here->HSMHV_rdrmue * here->HSMHV_rdrmuel ;
Mu0_dT = Mu0_dT * here->HSMHV_rdrmuel ;
Vmax = here->HSMHV_rdrvmax * here->HSMHV_rdrvmaxw * here->HSMHV_rdrvmaxl + small ;
Vmax_dT = Vmax_dT * here->HSMHV_rdrvmaxw * here->HSMHV_rdrvmaxl ;
Cx = here->HSMHV_rdrcx * here->HSMHV_rdrcxw ;
Cx_dT = Cx_dT * here->HSMHV_rdrcxw ;
Car = here->HSMHV_rdrcar ;
//-----------------------------------------------------------*
// Modified bias introduced to realize symmetry at Vddp=0.
//-----------------//
if(Vddp < 0) {
Fn_SymAdd( Vzadd , -Vddp / 2 , model->HSMHV_vzadd0 , T2 ) ;
Vzadd_dVddp = - T2 / 2.0 ;
if( Vzadd < ps_conv ) {
Vzadd = ps_conv ;
Vzadd_dVddp = 0.0 ;
}
Vddpz = Vddp - 2 * Vzadd ;
Vddpz_dVddp = 1.0 - 2 * Vzadd_dVddp ;
} else {
Fn_SymAdd( Vzadd , Vddp / 2 , model->HSMHV_vzadd0 , T2 ) ;
Vzadd_dVddp = T2 / 2.0 ;
if( Vzadd < ps_conv ) {
Vzadd = ps_conv ;
Vzadd_dVddp = 0.0 ;
}
Vddpz = Vddp + 2 * Vzadd ;
Vddpz_dVddp = 1.0 + 2 * Vzadd_dVddp ;
}
Edri = Vddpz / Ldrift ;
Edri_dVddp = Vddpz_dVddp / Ldrift ;
Vdri = Mu0 * Edri ;
Vdri_dVddp = Mu0 * Edri_dVddp ;
Vdri_dT = Mu0_dT * Edri ;
/*-----------------------------------------------------------*
* Mu : mobility
*-----------------*/
if ( Vddp >= 0 ) {
T1 = Vdri / Vmax ;
T1_dVddp = Vdri_dVddp / Vmax ;
T1_dT = ( Vdri_dT * Vmax - Vdri * Vmax_dT ) / ( Vmax * Vmax );
} else {
T1 = - Vdri / Vmax ;
T1_dVddp = - Vdri_dVddp / Vmax ;
T1_dT = - ( Vdri_dT * Vmax - Vdri * Vmax_dT ) / ( Vmax * Vmax );
}
if( model->HSMHV_rdrbbtmp == 0.0 ) {
if( T1 == 0.0 ) {
T2 = 0.0 ; T2_dT = 0.0 ; T2_dVddp = 0.0 ;
T4 = 1.0 ; T4_dT = 0.0 ; T4_dVddp = 0.0 ;
}else {
if ( 1.0e0 - epsm10 <= here->HSMHV_rdrbb && here->HSMHV_rdrbb <= 1.0e0 + epsm10 ) {
T3 = 1.0e0 ;
T3_dT = 0.0e0 ;
T3_dVddp = 0.0e0 ;
} else if ( 2.0e0 - epsm10 <= here->HSMHV_rdrbb && here->HSMHV_rdrbb <= 2.0e0 + epsm10 ) {
T3 = T1 ;
T3_dT = T1_dT ;
T3_dVddp = T1_dVddp ;
} else {
T3 = Fn_Pow( T1 , here->HSMHV_rdrbb - 1.0e0 ) ;
T3_dT = ( here->HSMHV_rdrbb - 1.0e0 )* Fn_Pow( T1 , here->HSMHV_rdrbb - 2.0e0 ) * T1_dT ;
T3_dVddp = ( here->HSMHV_rdrbb - 1.0e0 )* Fn_Pow( T1 , here->HSMHV_rdrbb - 2.0e0 ) * T1_dVddp ;
}
T2 = T1 * T3 ;
T2_dT = T1 * T3_dT + T3 * T1_dT ;
T2_dVddp = T1 * T3_dVddp + T3 * T1_dVddp ;
T4 = 1.0e0 + T2 ;
T4_dT = T2_dT ;
T4_dVddp = T2_dVddp ;
}
if ( 1.0e0 - epsm10 <= here->HSMHV_rdrbb && here->HSMHV_rdrbb <= 1.0e0 + epsm10 ) {
T5 = 1.0 / T4 ;
T5_dT = - T5 * T5 * T4_dT ;
T5_dVddp = - T5 * T5 * T4_dVddp ;
} else if ( 2.0e0 - epsm10 <= here->HSMHV_rdrbb && here->HSMHV_rdrbb <= 2.0e0 + epsm10 ) {
T5 = 1.0 / sqrt( T4 ) ;
T5_dT = - 0.5e0 / ( T4 * sqrt(T4) ) * T4_dT ;
T5_dVddp = - 0.5e0 / ( T4 * sqrt(T4) ) * T4_dVddp;
} else {
T6 = Fn_Pow( T4 , ( - 1.0e0 / here->HSMHV_rdrbb - 1.0e0 ) ) ;
T5 = T4 * T6 ;
T6_dT = ( - 1.0e0 / here->HSMHV_rdrbb - 1.0e0 ) * Fn_Pow( T4 , ( - 1.0e0 / here->HSMHV_rdrbb - 2.0e0 ) ) * T4_dT ;
T6_dVddp = ( - 1.0e0 / here->HSMHV_rdrbb - 1.0e0 ) * Fn_Pow( T4 , ( - 1.0e0 / here->HSMHV_rdrbb - 2.0e0 ) ) * T4_dVddp ;
T5_dT = T4_dT * T6 + T4 * T6_dT ;
T5_dVddp = T4_dVddp * T6 + T4 * T6_dVddp ;
}
} else {
if( T1 == 0.0 ) {
T2 = 0.0 ; T2_dT = 0.0 ; T2_dVddp = 0.0 ;
T4 = 1.0 ; T4_dT = 0.0 ; T4_dVddp = 0.0 ;
}else {
T3 = Fn_Pow( T1 , here->HSMHV_rdrbb - 1.0e0 ) ;
T3_dT = ( here->HSMHV_rdrbb - 1.0e0 )* Fn_Pow( T1 , here->HSMHV_rdrbb - 2.0e0 ) * T1_dT + T3*log(T1)*Rdrbb_dT ;
T3_dVddp = ( here->HSMHV_rdrbb - 1.0e0 )* Fn_Pow( T1 , here->HSMHV_rdrbb - 2.0e0 ) * T1_dVddp ;
T2 = T1 * T3 ;
T2_dT = T1 * T3_dT + T3 * T1_dT ;
T2_dVddp = T1 * T3_dVddp + T3 * T1_dVddp ;
T4 = 1.0e0 + T2 ;
T4_dT = T2_dT ;
T4_dVddp = T2_dVddp ;
}
T6 = Fn_Pow( T4 , ( - 1.0e0 / here->HSMHV_rdrbb - 1.0e0 ) ) ;
T5 = T4 * T6 ;
T6_dT = ( - 1.0e0 / here->HSMHV_rdrbb - 1.0e0 ) * Fn_Pow( T4 , ( - 1.0e0 / here->HSMHV_rdrbb - 2.0e0 ) ) * T4_dT +T6*log(T4)/here->HSMHV_rdrbb/here->HSMHV_rdrbb*Rdrbb_dT ;
T6_dVddp = ( - 1.0e0 / here->HSMHV_rdrbb - 1.0e0 ) * Fn_Pow( T4 , ( - 1.0e0 / here->HSMHV_rdrbb - 2.0e0 ) ) * T4_dVddp ;
T5_dT = T4_dT * T6 + T4 * T6_dT ;
T5_dVddp = T4_dVddp * T6 + T4 * T6_dVddp ;
}
Mu = Mu0 * T5 ;
Mu_dVddp = Mu0 * T5_dVddp ;
Mu_dT = Mu0_dT * T5 + Mu0 * T5_dT ;
/*-----------------------------------------------------------*
* Carr : carrier density
*-----------------*/
T4 = 1.0e0 + T1 ;
T4_dVddp = T1_dVddp ;
T4_dT = T1_dT ;
T5 = 1.0 / T4 ;
T5_dVddp = - T5 * T5 * T4_dVddp ;
T5_dT = - T5 * T5 * T4_dT ;
Carr = Nover * ( 1.0 + Car * ( 1.0 - T5 ) * Vddpz / ( Ldrift - model->HSMHV_rdrdl2 ) ) ;
Carr_dVddp = Nover * Car * ( - T5_dVddp * Vddpz + ( 1.0 - T5 ) * Vddpz_dVddp ) / ( Ldrift - model->HSMHV_rdrdl2 ) ;
Carr_dT = Nover * ( Car_dT * ( 1.0 - T5 ) + Car * ( - T5_dT ) ) * Vddpz / ( Ldrift - model->HSMHV_rdrdl2 ) ;
Carr += - here->HSMHV_QbuLD / C_QE * model->HSMHV_rdrqover;
Carr_dVds = - here->HSMHV_QbuLD_dVds / C_QE * model->HSMHV_rdrqover;
Carr_dVgs = - here->HSMHV_QbuLD_dVgs / C_QE * model->HSMHV_rdrqover;
Carr_dVbs = - here->HSMHV_QbuLD_dVbs / C_QE * model->HSMHV_rdrqover;
Carr_dT += - here->HSMHV_QbuLD_dTi / C_QE * model->HSMHV_rdrqover;
/*-----------------------------------------------------------*
* Xov : depth of the current flow
*-----------------*/
T0 = -here->HSMHV_Ps0LD ;
T0_dVd = -here->HSMHV_Ps0LD_dVds ;
T0_dVg = -here->HSMHV_Ps0LD_dVgs ;
T0_dVb = -here->HSMHV_Ps0LD_dVbs ;
T0_dT = -here->HSMHV_Ps0LD_dTi ;
Fn_SZ( T0 , T0 , 1.0e-2 , T9 ) ;
T0 += epsm10 ;
T0_dVd *= T9 ;
T0_dVg *= T9 ;
T0_dVb *= T9 ;
T0_dT *= T9 ;
Wdepl = sqrt ( here->HSMHV_kdep * T0 ) ;
Wdepl_dVd = here->HSMHV_kdep / ( 2.0 * Wdepl ) * T0_dVd ;
Wdepl_dVg = here->HSMHV_kdep / ( 2.0 * Wdepl ) * T0_dVg ;
Wdepl_dVb = here->HSMHV_kdep / ( 2.0 * Wdepl ) * T0_dVb ;
Wdepl_dT = here->HSMHV_kdep / ( 2.0 * Wdepl ) * T0_dT ;
T2 = Vds - Vbs + model->HSMHV_vbi ;
T2_dVd = 1.0 ;
T2_dVb = -1.0 ;
Fn_SZ( T2 , T2 , 1.0e-2 , T9 ) ;
T2 += epsm10 ;
T2_dVd *= T9 ;
T2_dVb *= T9 ;
Wjunc0 = sqrt ( here->HSMHV_kjunc * T2 ) ;
Wjunc0_dVd = here->HSMHV_kjunc / ( 2.0 * Wjunc0 ) * T2_dVd ;
Wjunc0_dVb = here->HSMHV_kjunc / ( 2.0 * Wjunc0 ) * T2_dVb ;
Fn_SU( Wjunc, Wjunc0, Xldld, 10e-3*Xldld, T0 );
Wjunc_dVd = Wjunc0_dVd * T0;
Wjunc_dVb = Wjunc0_dVb * T0;
// Wrdrdjunc = model->HSMHV_rdrdjunc + small ;
Wrdrdjunc = model->HSMHV_rdrdjunc + epsm10 ;
Xov = here->HSMHV_Xmax - Cx * ( here->HSMHV_Xmax
/ Wrdrdjunc * Wdepl + here->HSMHV_Xmax / Xldld * Wjunc ) ;
Xov_dVds = - Cx * here->HSMHV_Xmax / Wrdrdjunc * Wdepl_dVd
- Cx * here->HSMHV_Xmax / Xldld * Wjunc_dVd ;
Xov_dVgs = - Cx * here->HSMHV_Xmax / Wrdrdjunc * Wdepl_dVg ;
Xov_dVbs = - Cx * here->HSMHV_Xmax / Wrdrdjunc * Wdepl_dVb
- Cx * here->HSMHV_Xmax / Xldld * Wjunc_dVb ;
Xov_dT = - Cx_dT * ( here->HSMHV_Xmax
/ Wrdrdjunc * Wdepl + here->HSMHV_Xmax / Xldld * Wjunc )
- Cx * here->HSMHV_Xmax / Wrdrdjunc * Wdepl_dT ;
Fn_SZ( Xov , Xov , (1.0 - here->HSMHV_rdrcx) * here->HSMHV_Xmax / 100 , T9 ) ;
Xov_dVds *= T9 ;
Xov_dVgs *= T9 ;
Xov_dVbs *= T9 ;
Xov_dT *= T9 ;
/*-----------------------------------------------------------*
* Rd : drift resistance
*-----------------*/
T0 = C_QE / ( Ldrift + model->HSMHV_rdrdl1 );
T1 = T0;
T1_dVd = 0.0 ;
GD = T1 * Xov * Mu * Carr ;
GD_dVddp = T1 * Xov * Mu_dVddp * Carr
+ T1 * Xov * Mu * Carr_dVddp ;
GD_dVgse = 0.0 ;
GD_dT = T1 * Xov * Mu_dT * Carr
+ T1 * Xov_dT * Mu * Carr
+ T1 * Xov * Mu * Carr_dT ;
GD_dVds = T1 * Mu * (Xov_dVds * Carr + Xov * Carr_dVds)
+ T1_dVd * Mu * Xov * Carr;
GD_dVgs = T1 * Mu * (Xov_dVgs * Carr + Xov * Carr_dVgs);
GD_dVbs = T1 * Mu * (Xov_dVbs * Carr + Xov * Carr_dVbs);
if ( GD <= 0 ) {
// GD = small ;
GD = epsm10 ;
GD_dVddp = 0.0 ;
GD_dVgse = 0.0 ;
GD_dT = 0.0 ;
GD_dVds = 0.0 ;
GD_dVgs = 0.0 ;
GD_dVbs = 0.0 ;
}
Rd = 1 / GD ;
Rd_dVddp = - GD_dVddp * Rd * Rd ;
Rd_dVgse = - GD_dVgse * Rd * Rd ;
Rd_dT = - GD_dT * Rd * Rd ;
Rd_dVds = - GD_dVds * Rd * Rd ;
Rd_dVgs = - GD_dVgs * Rd * Rd ;
Rd_dVbs = - GD_dVbs * Rd * Rd ;
/* Weff dependence of the resistances */
Rd = Rd / WeffLD_nf ;
Fn_SU_CP( Rd, Rd, 1e6, 1e3, 2, T0 ) ;
Rd_dVddp = Rd_dVddp*T0/WeffLD_nf ;
Rd_dVgse = Rd_dVgse*T0/WeffLD_nf ;
Rd_dT = Rd_dT*T0/WeffLD_nf ;
Rd_dVds = Rd_dVds*T0/WeffLD_nf ;
Rd_dVgs = Rd_dVgs*T0/WeffLD_nf ;
Rd_dVbs = Rd_dVbs*T0/WeffLD_nf ;
if ( here->HSMHVsubNode >= 0 &&
( pParam->HSMHV_nover * ( modelMKS->HSMHV_nsubsub + pParam->HSMHV_nover ) ) > 0 ) {
/* external substrate node exists && LDMOS case: */
/* Substrate Effect */
T0 = model->HSMHV_vbisub - model->HSMHV_rdvdsub * here->HSMHV_Vdserevz - model->HSMHV_rdvsub * here->HSMHV_Vsubsrev ;
Fn_SZ( T1, T0, 10.0, T2 ) ;
T1 += epsm10 ;
T1_dVdserev = - model->HSMHV_rdvdsub * here->HSMHV_Vdserevz_dVd * T2 ;
T1_dVsubsrev = - model->HSMHV_rdvsub * T2 ;
T0 = modelMKS->HSMHV_nsubsub / ( pParam->HSMHV_nover * ( modelMKS->HSMHV_nsubsub + pParam->HSMHV_nover ) ) ;
T4 = 2 * C_ESI / C_QE * T0 ;
Wdep = sqrt ( T4 * T1 ) + small ;
Wdep_dVdserev = 0.5 * T4 * T1_dVdserev / Wdep ;
Wdep_dVsubsrev = 0.5 * T4 * T1_dVsubsrev / Wdep ;
Fn_SU( Wdep, Wdep, model->HSMHV_ddrift, C_sub_delta * model->HSMHV_ddrift, T0 ) ;
Wdep_dVdserev *= T0 ;
Wdep_dVsubsrev *= T0 ;
T0 = model->HSMHV_ddrift - Wdep ;
Fn_SZ( T0, T0, C_sub_delta2, T2 ) ;
T0 += epsm10;
T6 = (here->HSMHV_ldrift1 + here->HSMHV_ldrift2 ) / T0 ;
T6_dVdserev = T2 * Wdep_dVdserev * T6 / T0 ;
T6_dVsubsrev = T2 * Wdep_dVsubsrev * T6 / T0 ;
T0 = Rd ;
Rd = T0 * T6 ;
Rd_dVddp = Rd_dVddp * T6 ;
Rd_dVgse = Rd_dVgse * T6 ;
Rd_dVdse = T0 * T6_dVdserev ;
Rd_dVbse = Rd_dVgse * T6 ;
Rd_dVds = Rd_dVds * T6 ;
Rd_dVgs = Rd_dVgs * T6 ;
Rd_dVbs = Rd_dVbs * T6 ;
Rd_dVsubs = T0 * T6_dVsubsrev ;
Rd_dT = Rd_dT * T6 ;
}
/* Sheet resistances are added. */
Rd += here->HSMHV_rd0 ;
/* Re-stamps for hsmhvnoi.c */
/* Please see hsmhvnoi.c */
if ( Rd > Res_min && model->HSMHV_cothrml )
here->HSMHVdrainConductance = Mfactor / Rd ;
else here->HSMHVdrainConductance = 0.0 ;
if ( here->HSMHV_Rs > Res_min && model->HSMHV_cothrml )
here->HSMHVsourceConductance = Mfactor / here->HSMHV_rs0 ;
else here->HSMHVsourceConductance = 0.0 ;
/* Clamping to Res_min */
here->HSMHV_Rs = here->HSMHV_rs0 / Mfactor ;
if(here->HSMHV_Rs < Res_min) { here->HSMHV_Rs = Res_min ; }
here->HSMHV_dRs_dVdse = 0.0 ;
here->HSMHV_dRs_dVgse = 0.0 ;
here->HSMHV_dRs_dVbse = 0.0 ;
here->HSMHV_dRs_dVsubs = 0.0 ;
here->HSMHV_dRs_dTi = 0.0 ;
/* Clamping to Res_min */
here->HSMHV_Rd = Rd / Mfactor ;
if(here->HSMHV_Rd < Res_min) {
here->HSMHV_Rd = Res_min ;
here->HSMHV_dRd_dVddp = 0.0 ;
here->HSMHV_dRd_dVdse = 0.0 ;
here->HSMHV_dRd_dVgse = 0.0 ;
here->HSMHV_dRd_dVbse = 0.0 ;
here->HSMHV_dRd_dVsubs = 0.0 ;
here->HSMHV_dRd_dTi = 0.0 ;
here->HSMHV_dRd_dVds = 0.0 ;
here->HSMHV_dRd_dVgs = 0.0 ;
here->HSMHV_dRd_dVbs = 0.0 ;
} else {
here->HSMHV_dRd_dVddp = Rd_dVddp / Mfactor ;
here->HSMHV_dRd_dVdse = Rd_dVdse / Mfactor ;
here->HSMHV_dRd_dVgse = Rd_dVgse / Mfactor ;
here->HSMHV_dRd_dVbse = Rd_dVbse / Mfactor ;
here->HSMHV_dRd_dVsubs= Rd_dVsubs / Mfactor ;
here->HSMHV_dRd_dTi = Rd_dT / Mfactor ;
here->HSMHV_dRd_dVds = Rd_dVds / Mfactor ;
here->HSMHV_dRd_dVgs = Rd_dVgs / Mfactor ;
here->HSMHV_dRd_dVbs = Rd_dVbs / Mfactor ;
}
return ( HiSIM_OK ) ;
}

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvevalenv.h
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#ifndef HSMHV_EVAL_ENV_H
#define HSMHV_EVAL_ENV_H
@ -130,13 +88,4 @@ June 2008 (revised October 2011)
#define Fn_Min(x,y) ( (x) <= (y) ? (x) : (y) ) /* min[x,y] */
#define Fn_Sgn(x) ( (x) >= 0 ? (1) : (-1) ) /* sign[x] */
/*===========================================================*
* pow
*=================*/
#ifdef POW_TO_EXP_AND_LOG
#define Fn_Pow( x , y ) exp( (y) * log( x ) )
#else
#define Fn_Pow( x , y ) pow( x , y )
#endif
#endif /* HSMHV_EVAL_ENV_H */

View File

@ -1,14 +1,14 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvext.h
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvgetic.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "ngspice/cktdefs.h"
#include "hsmhvdef.h"

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvitf
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#ifndef DEV_HISIMHV
#define DEV_HISIMHV

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,14 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.10
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvld_info_eval.h
DATE : 2014.6.11
DATE : 2013.04.30
recent changes: - 2009.01.09 some bugfixes
@ -17,48 +17,6 @@
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
/* print all outputs ------------VV */
if ( model->HSMHV_info >= 4 ) {
here->HSMHV_csdo = - (here->HSMHV_cddo + here->HSMHV_cgdo + here->HSMHV_cbdo) ;

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvmask.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "ngspice/ifsim.h"
#include "ngspice/cktdefs.h"
@ -166,18 +124,6 @@ int HSMHVmAsk(
case HSMHV_MOD_COLDRIFT:
value->iValue = model->HSMHV_coldrift;
return(OK);
case HSMHV_MOD_CORDRIFT:
value->iValue = model->HSMHV_cordrift;
return(OK);
case HSMHV_MOD_COERRREP:
value->iValue = model->HSMHV_coerrrep;
return(OK);
case HSMHV_MOD_CODEP:
value->iValue = model->HSMHV_codep;
return(OK);
case HSMHV_MOD_CODDLT:
value->iValue = model->HSMHV_coddlt;
return(OK);
case HSMHV_MOD_VMAX:
value->rValue = model->HSMHV_vmax;
return(OK);
@ -247,24 +193,9 @@ int HSMHVmAsk(
case HSMHV_MOD_SUBLD1:
value->rValue = model->HSMHV_subld1;
return(OK);
case HSMHV_MOD_SUBLD1L:
value->rValue = model->HSMHV_subld1l;
return(OK);
case HSMHV_MOD_SUBLD1LP:
value->rValue = model->HSMHV_subld1lp;
return(OK);
case HSMHV_MOD_SUBLD2:
value->rValue = model->HSMHV_subld2;
return(OK);
case HSMHV_MOD_XPDV:
value->rValue = model->HSMHV_xpdv;
return(OK);
case HSMHV_MOD_XPVDTH:
value->rValue = model->HSMHV_xpvdth;
return(OK);
case HSMHV_MOD_XPVDTHG:
value->rValue = model->HSMHV_xpvdthg;
return(OK);
case HSMHV_MOD_DDLTMAX: /* Vdseff */
value->rValue = model->HSMHV_ddltmax;
return(OK);
@ -403,6 +334,9 @@ int HSMHVmAsk(
case HSMHV_MOD_PGD2:
value->rValue = model->HSMHV_pgd2;
return(OK);
case HSMHV_MOD_PGD3:
value->rValue = model->HSMHV_pgd3;
return(OK);
case HSMHV_MOD_PGD4:
value->rValue = model->HSMHV_pgd4;
return(OK);
@ -814,6 +748,9 @@ int HSMHVmAsk(
case HSMHV_MOD_KAPPA:
value->rValue = model->HSMHV_kappa;
return(OK);
case HSMHV_MOD_PTHROU:
value->rValue = model->HSMHV_pthrou;
return(OK);
case HSMHV_MOD_VDIFFJ:
value->rValue = model->HSMHV_vdiffj;
return(OK);
@ -861,47 +798,12 @@ int HSMHVmAsk(
case HSMHV_MOD_IBPC1:
value->rValue = model->HSMHV_ibpc1;
return(OK);
case HSMHV_MOD_IBPC1L:
value->rValue = model->HSMHV_ibpc1l;
return(OK);
case HSMHV_MOD_IBPC1LP:
value->rValue = model->HSMHV_ibpc1lp;
return(OK);
case HSMHV_MOD_IBPC2:
value->rValue = model->HSMHV_ibpc2;
return(OK);
case HSMHV_MOD_MPHDFM:
value->rValue = model->HSMHV_mphdfm;
return(OK);
case HSMHV_MOD_PTL:
value->rValue = model->HSMHV_ptl;
return(OK);
case HSMHV_MOD_PTP:
value->rValue = model->HSMHV_ptp;
return(OK);
case HSMHV_MOD_PT2:
value->rValue = model->HSMHV_pt2;
return(OK);
case HSMHV_MOD_PTLP:
value->rValue = model->HSMHV_ptlp;
return(OK);
case HSMHV_MOD_GDL:
value->rValue = model->HSMHV_gdl;
return(OK);
case HSMHV_MOD_GDLP:
value->rValue = model->HSMHV_gdlp;
return(OK);
case HSMHV_MOD_GDLD:
value->rValue = model->HSMHV_gdld;
return(OK);
case HSMHV_MOD_PT4:
value->rValue = model->HSMHV_pt4;
return(OK);
case HSMHV_MOD_PT4P:
value->rValue = model->HSMHV_pt4p;
return(OK);
case HSMHV_MOD_RDVG11:
value->rValue = model->HSMHV_rdvg11;
return(OK);
@ -968,6 +870,12 @@ int HSMHVmAsk(
case HSMHV_MOD_RD20:
value->rValue = model->HSMHV_rd20;
return(OK);
case HSMHV_MOD_QOVSM:
value->rValue = model->HSMHV_qovsm;
return(OK);
case HSMHV_MOD_LDRIFT:
value->rValue = model->HSMHV_ldrift;
return(OK);
case HSMHV_MOD_RD21:
value->rValue = model->HSMHV_rd21;
return(OK);
@ -986,6 +894,9 @@ int HSMHVmAsk(
case HSMHV_MOD_RD25:
value->rValue = model->HSMHV_rd25;
return(OK);
case HSMHV_MOD_RD26:
value->rValue = model->HSMHV_rd26;
return(OK);
case HSMHV_MOD_RDVDL:
value->rValue = model->HSMHV_rdvdl;
return(OK);
@ -1081,262 +992,9 @@ int HSMHVmAsk(
case HSMHV_MOD_NSUBSUB:
value->rValue = model->HSMHV_nsubsub;
return(OK);
case HSMHV_MOD_RDRMUE:
value->rValue = model->HSMHV_rdrmue;
return(OK);
case HSMHV_MOD_RDRVMAX:
value->rValue = model->HSMHV_rdrvmax;
return(OK);
case HSMHV_MOD_RDRMUETMP:
value->rValue = model->HSMHV_rdrmuetmp;
return(OK);
case HSMHV_MOD_RDRVTMP:
value->rValue = model->HSMHV_rdrvtmp;
return(OK);
case HSMHV_MOD_NDEPM:
value->rValue = model->HSMHV_ndepm;
return(OK);
case HSMHV_MOD_TNDEP:
value->rValue = model->HSMHV_tndep;
return(OK);
case HSMHV_MOD_DEPMUE0:
value->rValue = model->HSMHV_depmue0;
return(OK);
case HSMHV_MOD_DEPMUE1:
value->rValue = model->HSMHV_depmue1;
return(OK);
case HSMHV_MOD_DEPMUEBACK0:
value->rValue = model->HSMHV_depmueback0;
return(OK);
case HSMHV_MOD_DEPMUEBACK1:
value->rValue = model->HSMHV_depmueback1;
return(OK);
case HSMHV_MOD_DEPLEAK:
value->rValue = model->HSMHV_depleak;
return(OK);
case HSMHV_MOD_DEPETA:
value->rValue = model->HSMHV_depeta;
return(OK);
case HSMHV_MOD_DEPVMAX:
value->rValue = model->HSMHV_depvmax;
return(OK);
case HSMHV_MOD_DEPVDSEF1:
value->rValue = model->HSMHV_depvdsef1;
return(OK);
case HSMHV_MOD_DEPVDSEF2:
value->rValue = model->HSMHV_depvdsef2;
return(OK);
case HSMHV_MOD_DEPMUEPH0:
value->rValue = model->HSMHV_depmueph0;
return(OK);
case HSMHV_MOD_DEPMUEPH1:
value->rValue = model->HSMHV_depmueph1;
return(OK);
case HSMHV_MOD_DEPBB:
value->rValue = model->HSMHV_depbb;
return(OK);
case HSMHV_MOD_DEPVTMP:
value->rValue = model->HSMHV_depvtmp;
return(OK);
case HSMHV_MOD_DEPMUETMP:
value->rValue = model->HSMHV_depmuetmp;
return(OK);
case HSMHV_MOD_ISBREAK:
value->rValue = model->HSMHV_isbreak;
return(OK);
case HSMHV_MOD_RWELL:
value->rValue = model->HSMHV_rwell;
return(OK);
/* case HSMHV_MOD_RDRVMAXT1: */
/* value->rValue = model->HSMHV_rdrvmaxt1; */
/* return(OK); */
/* case HSMHV_MOD_RDRVMAXT2: */
/* value->rValue = model->HSMHV_rdrvmaxt2; */
/* return(OK); */
case HSMHV_MOD_RDRDJUNC:
value->rValue = model->HSMHV_rdrdjunc;
return(OK);
case HSMHV_MOD_RDRCX:
value->rValue = model->HSMHV_rdrcx;
return(OK);
case HSMHV_MOD_RDRCAR:
value->rValue = model->HSMHV_rdrcar;
return(OK);
case HSMHV_MOD_RDRDL1:
value->rValue = model->HSMHV_rdrdl1;
return(OK);
case HSMHV_MOD_RDRDL2:
value->rValue = model->HSMHV_rdrdl2;
return(OK);
case HSMHV_MOD_RDRVMAXW:
value->rValue = model->HSMHV_rdrvmaxw;
return(OK);
case HSMHV_MOD_RDRVMAXWP:
value->rValue = model->HSMHV_rdrvmaxwp;
return(OK);
case HSMHV_MOD_RDRVMAXL:
value->rValue = model->HSMHV_rdrvmaxl;
return(OK);
case HSMHV_MOD_RDRVMAXLP:
value->rValue = model->HSMHV_rdrvmaxlp;
return(OK);
case HSMHV_MOD_RDRMUEL:
value->rValue = model->HSMHV_rdrmuel;
return(OK);
case HSMHV_MOD_RDRMUELP:
value->rValue = model->HSMHV_rdrmuelp;
return(OK);
case HSMHV_MOD_RDRQOVER:
value->rValue = model->HSMHV_rdrqover;
return(OK);
case HSMHV_MOD_QOVADD:
value->rValue = model->HSMHV_qovadd;
return(OK);
case HSMHV_MOD_JS0D:
value->rValue = model->HSMHV_js0d;
return(OK);
case HSMHV_MOD_JS0SWD:
value->rValue = model->HSMHV_js0swd;
return(OK);
case HSMHV_MOD_NJD:
value->rValue = model->HSMHV_njd;
return(OK);
case HSMHV_MOD_NJSWD:
value->rValue = model->HSMHV_njswd;
return(OK);
case HSMHV_MOD_XTID:
value->rValue = model->HSMHV_xtid;
return(OK);
case HSMHV_MOD_CJD:
value->rValue = model->HSMHV_cjd;
return(OK);
case HSMHV_MOD_CJSWD:
value->rValue = model->HSMHV_cjswd;
return(OK);
case HSMHV_MOD_CJSWGD:
value->rValue = model->HSMHV_cjswgd;
return(OK);
case HSMHV_MOD_MJD:
value->rValue = model->HSMHV_mjd;
return(OK);
case HSMHV_MOD_MJSWD:
value->rValue = model->HSMHV_mjswd;
return(OK);
case HSMHV_MOD_MJSWGD:
value->rValue = model->HSMHV_mjswgd;
return(OK);
case HSMHV_MOD_PBD:
value->rValue = model->HSMHV_pbd;
return(OK);
case HSMHV_MOD_PBSWD:
value->rValue = model->HSMHV_pbswd;
return(OK);
case HSMHV_MOD_PBSWDG:
value->rValue = model->HSMHV_pbswgd;
return(OK);
case HSMHV_MOD_XTI2D:
value->rValue = model->HSMHV_xti2d;
return(OK);
case HSMHV_MOD_CISBD:
value->rValue = model->HSMHV_cisbd;
return(OK);
case HSMHV_MOD_CVBD:
value->rValue = model->HSMHV_cvbd;
return(OK);
case HSMHV_MOD_CTEMPD:
value->rValue = model->HSMHV_ctempd;
return(OK);
case HSMHV_MOD_CISBKD:
value->rValue = model->HSMHV_cisbkd;
return(OK);
case HSMHV_MOD_DIVXD:
value->rValue = model->HSMHV_divxd;
return(OK);
case HSMHV_MOD_VDIFFJD:
value->rValue = model->HSMHV_vdiffjd;
return(OK);
case HSMHV_MOD_JS0S:
value->rValue = model->HSMHV_js0s;
return(OK);
case HSMHV_MOD_JS0SWS:
value->rValue = model->HSMHV_js0sws;
return(OK);
case HSMHV_MOD_NJS:
value->rValue = model->HSMHV_njs;
return(OK);
case HSMHV_MOD_NJSWS:
value->rValue = model->HSMHV_njsws;
return(OK);
case HSMHV_MOD_XTIS:
value->rValue = model->HSMHV_xtis;
return(OK);
case HSMHV_MOD_CJS:
value->rValue = model->HSMHV_cjs;
return(OK);
case HSMHV_MOD_CJSSW:
value->rValue = model->HSMHV_cjsws;
return(OK);
case HSMHV_MOD_CJSWGS:
value->rValue = model->HSMHV_cjswgs;
return(OK);
case HSMHV_MOD_MJS:
value->rValue = model->HSMHV_mjs;
return(OK);
case HSMHV_MOD_MJSWS:
value->rValue = model->HSMHV_mjsws;
return(OK);
case HSMHV_MOD_MJSWGS:
value->rValue = model->HSMHV_mjswgs;
return(OK);
case HSMHV_MOD_PBS:
value->rValue = model->HSMHV_pbs;
return(OK);
case HSMHV_MOD_PBSWS:
value->rValue = model->HSMHV_pbsws;
return(OK);
case HSMHV_MOD_PBSWSG:
value->rValue = model->HSMHV_pbswgs;
return(OK);
case HSMHV_MOD_XTI2S:
value->rValue = model->HSMHV_xti2s;
return(OK);
case HSMHV_MOD_CISBS:
value->rValue = model->HSMHV_cisbs;
return(OK);
case HSMHV_MOD_CVBS:
value->rValue = model->HSMHV_cvbs;
return(OK);
case HSMHV_MOD_CTEMPS:
value->rValue = model->HSMHV_ctemps;
return(OK);
case HSMHV_MOD_CISBKS:
value->rValue = model->HSMHV_cisbks;
return(OK);
case HSMHV_MOD_DIVXS:
value->rValue = model->HSMHV_divxs;
return(OK);
case HSMHV_MOD_VDIFFJS:
value->rValue = model->HSMHV_vdiffjs;
return(OK);
case HSMHV_MOD_SHEMAX:
value->rValue = model->HSMHV_shemax;
return(OK);
case HSMHV_MOD_VGSMIN:
value->rValue = model->HSMHV_vgsmin;
return(OK);
case HSMHV_MOD_GDSLEAK:
value->rValue = model->HSMHV_gdsleak;
return(OK);
case HSMHV_MOD_RDRBB:
value->rValue = model->HSMHV_rdrbb;
return(OK);
case HSMHV_MOD_RDRBBTMP:
value->rValue = model->HSMHV_rdrbbtmp;
return(OK);
/* binning parameters */
case HSMHV_MOD_LMIN:
@ -1413,6 +1071,9 @@ int HSMHVmAsk(
case HSMHV_MOD_LPGD1:
value->rValue = model->HSMHV_lpgd1;
return(OK);
case HSMHV_MOD_LPGD3:
value->rValue = model->HSMHV_lpgd3;
return(OK);
case HSMHV_MOD_LNDEP:
value->rValue = model->HSMHV_lndep;
return(OK);
@ -1566,6 +1227,9 @@ int HSMHVmAsk(
case HSMHV_MOD_LNFALP:
value->rValue = model->HSMHV_lnfalp;
return(OK);
case HSMHV_MOD_LPTHROU:
value->rValue = model->HSMHV_lpthrou;
return(OK);
case HSMHV_MOD_LVDIFFJ:
value->rValue = model->HSMHV_lvdiffj;
return(OK);
@ -1629,36 +1293,6 @@ int HSMHVmAsk(
case HSMHV_MOD_LVOVER:
value->rValue = model->HSMHV_lvover;
return(OK);
case HSMHV_MOD_LJS0D:
value->rValue = model->HSMHV_ljs0d;
return(OK);
case HSMHV_MOD_LJS0SWD:
value->rValue = model->HSMHV_ljs0swd;
return(OK);
case HSMHV_MOD_LNJD:
value->rValue = model->HSMHV_lnjd;
return(OK);
case HSMHV_MOD_LCISBKD:
value->rValue = model->HSMHV_lcisbkd;
return(OK);
case HSMHV_MOD_LVDIFFJD:
value->rValue = model->HSMHV_lvdiffjd;
return(OK);
case HSMHV_MOD_LJS0S:
value->rValue = model->HSMHV_ljs0s;
return(OK);
case HSMHV_MOD_LJS0SWS:
value->rValue = model->HSMHV_ljs0sws;
return(OK);
case HSMHV_MOD_LNJS:
value->rValue = model->HSMHV_lnjs;
return(OK);
case HSMHV_MOD_LCISBKS:
value->rValue = model->HSMHV_lcisbks;
return(OK);
case HSMHV_MOD_LVDIFFJS:
value->rValue = model->HSMHV_lvdiffjs;
return(OK);
/* Width dependence */
case HSMHV_MOD_WVMAX:
@ -1715,6 +1349,9 @@ int HSMHVmAsk(
case HSMHV_MOD_WPGD1:
value->rValue = model->HSMHV_wpgd1;
return(OK);
case HSMHV_MOD_WPGD3:
value->rValue = model->HSMHV_wpgd3;
return(OK);
case HSMHV_MOD_WNDEP:
value->rValue = model->HSMHV_wndep;
return(OK);
@ -1868,6 +1505,9 @@ int HSMHVmAsk(
case HSMHV_MOD_WNFALP:
value->rValue = model->HSMHV_wnfalp;
return(OK);
case HSMHV_MOD_WPTHROU:
value->rValue = model->HSMHV_wpthrou;
return(OK);
case HSMHV_MOD_WVDIFFJ:
value->rValue = model->HSMHV_wvdiffj;
return(OK);
@ -1931,36 +1571,6 @@ int HSMHVmAsk(
case HSMHV_MOD_WVOVER:
value->rValue = model->HSMHV_wvover;
return(OK);
case HSMHV_MOD_WJS0D:
value->rValue = model->HSMHV_wjs0d;
return(OK);
case HSMHV_MOD_WJS0SWD:
value->rValue = model->HSMHV_wjs0swd;
return(OK);
case HSMHV_MOD_WNJD:
value->rValue = model->HSMHV_wnjd;
return(OK);
case HSMHV_MOD_WCISBKD:
value->rValue = model->HSMHV_wcisbkd;
return(OK);
case HSMHV_MOD_WVDIFFJD:
value->rValue = model->HSMHV_wvdiffjd;
return(OK);
case HSMHV_MOD_WJS0S:
value->rValue = model->HSMHV_wjs0s;
return(OK);
case HSMHV_MOD_WJS0SWS:
value->rValue = model->HSMHV_wjs0sws;
return(OK);
case HSMHV_MOD_WNJS:
value->rValue = model->HSMHV_wnjs;
return(OK);
case HSMHV_MOD_WCISBKS:
value->rValue = model->HSMHV_wcisbks;
return(OK);
case HSMHV_MOD_WVDIFFJS:
value->rValue = model->HSMHV_wvdiffjs;
return(OK);
/* Cross-term dependence */
case HSMHV_MOD_PVMAX:
@ -2017,6 +1627,9 @@ int HSMHVmAsk(
case HSMHV_MOD_PPGD1:
value->rValue = model->HSMHV_ppgd1;
return(OK);
case HSMHV_MOD_PPGD3:
value->rValue = model->HSMHV_ppgd3;
return(OK);
case HSMHV_MOD_PNDEP:
value->rValue = model->HSMHV_pndep;
return(OK);
@ -2170,6 +1783,9 @@ int HSMHVmAsk(
case HSMHV_MOD_PNFALP:
value->rValue = model->HSMHV_pnfalp;
return(OK);
case HSMHV_MOD_PPTHROU:
value->rValue = model->HSMHV_ppthrou;
return(OK);
case HSMHV_MOD_PVDIFFJ:
value->rValue = model->HSMHV_pvdiffj;
return(OK);
@ -2233,36 +1849,6 @@ int HSMHVmAsk(
case HSMHV_MOD_PVOVER:
value->rValue = model->HSMHV_pvover;
return(OK);
case HSMHV_MOD_PJS0D:
value->rValue = model->HSMHV_pjs0d;
return(OK);
case HSMHV_MOD_PJS0SWD:
value->rValue = model->HSMHV_pjs0swd;
return(OK);
case HSMHV_MOD_PNJD:
value->rValue = model->HSMHV_pnjd;
return(OK);
case HSMHV_MOD_PCISBKD:
value->rValue = model->HSMHV_pcisbkd;
return(OK);
case HSMHV_MOD_PVDIFFJD:
value->rValue = model->HSMHV_pvdiffjd;
return(OK);
case HSMHV_MOD_PJS0S:
value->rValue = model->HSMHV_pjs0s;
return(OK);
case HSMHV_MOD_PJS0SWS:
value->rValue = model->HSMHV_pjs0sws;
return(OK);
case HSMHV_MOD_PNJS:
value->rValue = model->HSMHV_pnjs;
return(OK);
case HSMHV_MOD_PCISBKS:
value->rValue = model->HSMHV_pcisbks;
return(OK);
case HSMHV_MOD_PVDIFFJS:
value->rValue = model->HSMHV_pvdiffjs;
return(OK);
case HSMHV_MOD_VGS_MAX:
value->rValue = model->HSMHVvgsMax;

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvmdel.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "hsmhvdef.h"
#include "ngspice/sperror.h"

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvmpar.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "hsmhvdef.h"
#include "ngspice/ifsim.h"
@ -194,22 +152,6 @@ int HSMHVmParam(
mod->HSMHV_coldrift = value->iValue;
mod->HSMHV_coldrift_Given = TRUE;
break;
case HSMHV_MOD_CORDRIFT:
mod->HSMHV_cordrift = value->iValue;
mod->HSMHV_cordrift_Given = TRUE;
break;
case HSMHV_MOD_COERRREP:
mod->HSMHV_coerrrep = value->iValue;
mod->HSMHV_coerrrep_Given = TRUE;
break;
case HSMHV_MOD_CODEP:
mod->HSMHV_codep = value->iValue;
mod->HSMHV_codep_Given = TRUE;
break;
case HSMHV_MOD_CODDLT:
mod->HSMHV_coddlt = value->iValue;
mod->HSMHV_coddlt_Given = TRUE;
break;
case HSMHV_MOD_VMAX:
mod->HSMHV_vmax = value->rValue;
mod->HSMHV_vmax_Given = TRUE;
@ -302,30 +244,10 @@ int HSMHVmParam(
mod->HSMHV_subld1 = value->rValue;
mod->HSMHV_subld1_Given = TRUE;
break;
case HSMHV_MOD_SUBLD1L:
mod->HSMHV_subld1l = value->rValue;
mod->HSMHV_subld1l_Given = TRUE;
break;
case HSMHV_MOD_SUBLD1LP:
mod->HSMHV_subld1lp = value->rValue;
mod->HSMHV_subld1lp_Given = TRUE;
break;
case HSMHV_MOD_SUBLD2:
mod->HSMHV_subld2 = value->rValue;
mod->HSMHV_subld2_Given = TRUE;
break;
case HSMHV_MOD_XPDV:
mod->HSMHV_xpdv = value->rValue;
mod->HSMHV_xpdv_Given = TRUE;
break;
case HSMHV_MOD_XPVDTH:
mod->HSMHV_xpvdth = value->rValue;
mod->HSMHV_xpvdth_Given = TRUE;
break;
case HSMHV_MOD_XPVDTHG:
mod->HSMHV_xpvdthg = value->rValue;
mod->HSMHV_xpvdthg_Given = TRUE;
break;
case HSMHV_MOD_DDLTMAX: /* Vdseff */
mod->HSMHV_ddltmax = value->rValue;
mod->HSMHV_ddltmax_Given = TRUE;
@ -510,6 +432,10 @@ int HSMHVmParam(
mod->HSMHV_pgd2 = value->rValue;
mod->HSMHV_pgd2_Given = TRUE;
break;
case HSMHV_MOD_PGD3:
mod->HSMHV_pgd3 = value->rValue;
mod->HSMHV_pgd3_Given = TRUE;
break;
case HSMHV_MOD_PGD4:
mod->HSMHV_pgd4 = value->rValue;
mod->HSMHV_pgd4_Given = TRUE;
@ -1058,6 +984,10 @@ int HSMHVmParam(
mod->HSMHV_kappa = value->rValue;
mod->HSMHV_kappa_Given = TRUE;
break;
case HSMHV_MOD_PTHROU:
mod->HSMHV_pthrou = value->rValue;
mod->HSMHV_pthrou_Given = TRUE;
break;
case HSMHV_MOD_VDIFFJ:
mod->HSMHV_vdiffj = value->rValue;
mod->HSMHV_vdiffj_Given = TRUE;
@ -1114,14 +1044,6 @@ int HSMHVmParam(
mod->HSMHV_ibpc1 = value->rValue;
mod->HSMHV_ibpc1_Given = TRUE;
break;
case HSMHV_MOD_IBPC1L:
mod->HSMHV_ibpc1l = value->rValue;
mod->HSMHV_ibpc1l_Given = TRUE;
break;
case HSMHV_MOD_IBPC1LP:
mod->HSMHV_ibpc1lp = value->rValue;
mod->HSMHV_ibpc1lp_Given = TRUE;
break;
case HSMHV_MOD_IBPC2:
mod->HSMHV_ibpc2 = value->rValue;
mod->HSMHV_ibpc2_Given = TRUE;
@ -1130,44 +1052,6 @@ int HSMHVmParam(
mod->HSMHV_mphdfm = value->rValue;
mod->HSMHV_mphdfm_Given = TRUE;
break;
case HSMHV_MOD_PTL:
mod->HSMHV_ptl = value->rValue;
mod->HSMHV_ptl_Given = TRUE;
break;
case HSMHV_MOD_PTP:
mod->HSMHV_ptp = value->rValue;
mod->HSMHV_ptp_Given = TRUE;
break;
case HSMHV_MOD_PT2:
mod->HSMHV_pt2 = value->rValue;
mod->HSMHV_pt2_Given = TRUE;
break;
case HSMHV_MOD_PTLP:
mod->HSMHV_ptlp = value->rValue;
mod->HSMHV_ptlp_Given = TRUE;
break;
case HSMHV_MOD_GDL:
mod->HSMHV_gdl = value->rValue;
mod->HSMHV_gdl_Given = TRUE;
break;
case HSMHV_MOD_GDLP:
mod->HSMHV_gdlp = value->rValue;
mod->HSMHV_gdlp_Given = TRUE;
break;
case HSMHV_MOD_GDLD:
mod->HSMHV_gdld = value->rValue;
mod->HSMHV_gdld_Given = TRUE;
break;
case HSMHV_MOD_PT4:
mod->HSMHV_pt4 = value->rValue;
mod->HSMHV_pt4_Given = TRUE;
break;
case HSMHV_MOD_PT4P:
mod->HSMHV_pt4p = value->rValue;
mod->HSMHV_pt4p_Given = TRUE;
break;
case HSMHV_MOD_RDVG11:
mod->HSMHV_rdvg11 = value->rValue;
mod->HSMHV_rdvg11_Given = TRUE;
@ -1180,6 +1064,14 @@ int HSMHVmParam(
mod->HSMHV_rd20 = value->rValue;
mod->HSMHV_rd20_Given = TRUE;
break;
case HSMHV_MOD_QOVSM:
mod->HSMHV_qovsm = value->rValue;
mod->HSMHV_qovsm_Given = TRUE;
break;
case HSMHV_MOD_LDRIFT:
mod->HSMHV_ldrift = value->rValue;
mod->HSMHV_ldrift_Given = TRUE;
break;
case HSMHV_MOD_RD21:
mod->HSMHV_rd21 = value->rValue;
mod->HSMHV_rd21_Given = TRUE;
@ -1204,6 +1096,10 @@ int HSMHVmParam(
mod->HSMHV_rd25 = value->rValue;
mod->HSMHV_rd25_Given = TRUE;
break;
case HSMHV_MOD_RD26:
mod->HSMHV_rd26 = value->rValue;
mod->HSMHV_rd26_Given = TRUE;
break;
case HSMHV_MOD_RDVDL:
mod->HSMHV_rdvdl = value->rValue;
mod->HSMHV_rdvdl_Given = TRUE;
@ -1404,263 +1300,11 @@ int HSMHVmParam(
mod->HSMHV_nsubsub = value->rValue;
mod->HSMHV_nsubsub_Given = TRUE;
break;
case HSMHV_MOD_RDRMUE:
mod->HSMHV_rdrmue = value->rValue;
mod->HSMHV_rdrmue_Given = TRUE;
break;
case HSMHV_MOD_RDRVMAX:
mod->HSMHV_rdrvmax = value->rValue;
mod->HSMHV_rdrvmax_Given = TRUE;
break;
case HSMHV_MOD_RDRMUETMP:
mod->HSMHV_rdrmuetmp = value->rValue;
mod->HSMHV_rdrmuetmp_Given = TRUE;
break;
case HSMHV_MOD_RDRVTMP:
mod->HSMHV_rdrvtmp = value->rValue;
mod->HSMHV_rdrvtmp_Given = TRUE;
break;
case HSMHV_MOD_RDRDJUNC:
mod->HSMHV_rdrdjunc = value->rValue;
mod->HSMHV_rdrdjunc_Given = TRUE;
break;
case HSMHV_MOD_RDRCX:
mod->HSMHV_rdrcx = value->rValue;
mod->HSMHV_rdrcx_Given = TRUE;
break;
case HSMHV_MOD_RDRCAR:
mod->HSMHV_rdrcar = value->rValue;
mod->HSMHV_rdrcar_Given = TRUE;
break;
case HSMHV_MOD_RDRDL1:
mod->HSMHV_rdrdl1 = value->rValue;
mod->HSMHV_rdrdl1_Given = TRUE;
break;
case HSMHV_MOD_RDRDL2:
mod->HSMHV_rdrdl2 = value->rValue;
mod->HSMHV_rdrdl2_Given = TRUE;
break;
case HSMHV_MOD_RDRVMAXW:
mod->HSMHV_rdrvmaxw = value->rValue;
mod->HSMHV_rdrvmaxw_Given = TRUE;
break;
case HSMHV_MOD_RDRVMAXWP:
mod->HSMHV_rdrvmaxwp = value->rValue;
mod->HSMHV_rdrvmaxwp_Given = TRUE;
break;
case HSMHV_MOD_RDRVMAXL:
mod->HSMHV_rdrvmaxl = value->rValue;
mod->HSMHV_rdrvmaxl_Given = TRUE;
break;
case HSMHV_MOD_RDRVMAXLP:
mod->HSMHV_rdrvmaxlp = value->rValue;
mod->HSMHV_rdrvmaxlp_Given = TRUE;
break;
case HSMHV_MOD_RDRMUEL:
mod->HSMHV_rdrmuel = value->rValue;
mod->HSMHV_rdrmuel_Given = TRUE;
break;
case HSMHV_MOD_RDRMUELP:
mod->HSMHV_rdrmuelp = value->rValue;
mod->HSMHV_rdrmuelp_Given = TRUE;
break;
case HSMHV_MOD_RDRQOVER:
mod->HSMHV_rdrqover = value->rValue;
mod->HSMHV_rdrqover_Given = TRUE;
break;
case HSMHV_MOD_QOVADD:
mod->HSMHV_qovadd = value->rValue;
mod->HSMHV_qovadd_Given = TRUE;
break;
case HSMHV_MOD_JS0D:
mod->HSMHV_js0d = value->rValue;
mod->HSMHV_js0d_Given = TRUE;
break;
case HSMHV_MOD_JS0SWD:
mod->HSMHV_js0swd = value->rValue;
mod->HSMHV_js0swd_Given = TRUE;
break;
case HSMHV_MOD_NJD:
mod->HSMHV_njd = value->rValue;
mod->HSMHV_njd_Given = TRUE;
break;
case HSMHV_MOD_NJSWD:
mod->HSMHV_njswd = value->rValue;
mod->HSMHV_njswd_Given = TRUE;
break;
case HSMHV_MOD_XTID:
mod->HSMHV_xtid = value->rValue;
mod->HSMHV_xtid_Given = TRUE;
break;
case HSMHV_MOD_CJD:
mod->HSMHV_cjd = value->rValue;
mod->HSMHV_cjd_Given = TRUE;
break;
case HSMHV_MOD_CJSWD:
mod->HSMHV_cjswd = value->rValue;
mod->HSMHV_cjswd_Given = TRUE;
break;
case HSMHV_MOD_CJSWGD:
mod->HSMHV_cjswgd = value->rValue;
mod->HSMHV_cjswgd_Given = TRUE;
break;
case HSMHV_MOD_MJD:
mod->HSMHV_mjd = value->rValue;
mod->HSMHV_mjd_Given = TRUE;
break;
case HSMHV_MOD_MJSWD:
mod->HSMHV_mjswd = value->rValue;
mod->HSMHV_mjswd_Given = TRUE;
break;
case HSMHV_MOD_MJSWGD:
mod->HSMHV_mjswgd = value->rValue;
mod->HSMHV_mjswgd_Given = TRUE;
break;
case HSMHV_MOD_PBD:
mod->HSMHV_pbd = value->rValue;
mod->HSMHV_pbd_Given = TRUE;
break;
case HSMHV_MOD_PBSWD:
mod->HSMHV_pbswd = value->rValue;
mod->HSMHV_pbswd_Given = TRUE;
break;
case HSMHV_MOD_PBSWDG:
mod->HSMHV_pbswgd = value->rValue;
mod->HSMHV_pbswgd_Given = TRUE;
break;
case HSMHV_MOD_XTI2D:
mod->HSMHV_xti2d = value->rValue;
mod->HSMHV_xti2d_Given = TRUE;
break;
case HSMHV_MOD_CISBD:
mod->HSMHV_cisbd = value->rValue;
mod->HSMHV_cisbd_Given = TRUE;
break;
case HSMHV_MOD_CVBD:
mod->HSMHV_cvbd = value->rValue;
mod->HSMHV_cvbd_Given = TRUE;
break;
case HSMHV_MOD_CTEMPD:
mod->HSMHV_ctempd = value->rValue;
mod->HSMHV_ctempd_Given = TRUE;
break;
case HSMHV_MOD_CISBKD:
mod->HSMHV_cisbkd = value->rValue;
mod->HSMHV_cisbkd_Given = TRUE;
break;
case HSMHV_MOD_DIVXD:
mod->HSMHV_divxd = value->rValue;
mod->HSMHV_divxd_Given = TRUE;
break;
case HSMHV_MOD_VDIFFJD:
mod->HSMHV_vdiffjd = value->rValue;
mod->HSMHV_vdiffjd_Given = TRUE;
break;
case HSMHV_MOD_JS0S:
mod->HSMHV_js0s = value->rValue;
mod->HSMHV_js0s_Given = TRUE;
break;
case HSMHV_MOD_JS0SWS:
mod->HSMHV_js0sws = value->rValue;
mod->HSMHV_js0sws_Given = TRUE;
break;
case HSMHV_MOD_NJS:
mod->HSMHV_njs = value->rValue;
mod->HSMHV_njs_Given = TRUE;
break;
case HSMHV_MOD_NJSWS:
mod->HSMHV_njsws = value->rValue;
mod->HSMHV_njsws_Given = TRUE;
break;
case HSMHV_MOD_XTIS:
mod->HSMHV_xtis = value->rValue;
mod->HSMHV_xtis_Given = TRUE;
break;
case HSMHV_MOD_CJS:
mod->HSMHV_cjs = value->rValue;
mod->HSMHV_cjs_Given = TRUE;
break;
case HSMHV_MOD_CJSSW:
mod->HSMHV_cjsws = value->rValue;
mod->HSMHV_cjsws_Given = TRUE;
break;
case HSMHV_MOD_CJSWGS:
mod->HSMHV_cjswgs = value->rValue;
mod->HSMHV_cjswgs_Given = TRUE;
break;
case HSMHV_MOD_MJS:
mod->HSMHV_mjs = value->rValue;
mod->HSMHV_mjs_Given = TRUE;
break;
case HSMHV_MOD_MJSWS:
mod->HSMHV_mjsws = value->rValue;
mod->HSMHV_mjsws_Given = TRUE;
break;
case HSMHV_MOD_MJSWGS:
mod->HSMHV_mjswgs = value->rValue;
mod->HSMHV_mjswgs_Given = TRUE;
break;
case HSMHV_MOD_PBS:
mod->HSMHV_pbs = value->rValue;
mod->HSMHV_pbs_Given = TRUE;
break;
case HSMHV_MOD_PBSWS:
mod->HSMHV_pbsws = value->rValue;
mod->HSMHV_pbsws_Given = TRUE;
break;
case HSMHV_MOD_PBSWSG:
mod->HSMHV_pbswgs = value->rValue;
mod->HSMHV_pbswgs_Given = TRUE;
break;
case HSMHV_MOD_XTI2S:
mod->HSMHV_xti2s = value->rValue;
mod->HSMHV_xti2s_Given = TRUE;
break;
case HSMHV_MOD_CISBS:
mod->HSMHV_cisbs = value->rValue;
mod->HSMHV_cisbs_Given = TRUE;
break;
case HSMHV_MOD_CVBS:
mod->HSMHV_cvbs = value->rValue;
mod->HSMHV_cvbs_Given = TRUE;
break;
case HSMHV_MOD_CTEMPS:
mod->HSMHV_ctemps = value->rValue;
mod->HSMHV_ctemps_Given = TRUE;
break;
case HSMHV_MOD_CISBKS:
mod->HSMHV_cisbks = value->rValue;
mod->HSMHV_cisbks_Given = TRUE;
break;
case HSMHV_MOD_DIVXS:
mod->HSMHV_divxs = value->rValue;
mod->HSMHV_divxs_Given = TRUE;
break;
case HSMHV_MOD_VDIFFJS:
mod->HSMHV_vdiffjs = value->rValue;
mod->HSMHV_vdiffjs_Given = TRUE;
break;
case HSMHV_MOD_SHEMAX:
mod->HSMHV_shemax = value->rValue;
mod->HSMHV_shemax_Given = TRUE;
break;
case HSMHV_MOD_VGSMIN:
mod->HSMHV_vgsmin = value->rValue;
mod->HSMHV_vgsmin_Given = TRUE;
break;
case HSMHV_MOD_GDSLEAK:
mod->HSMHV_gdsleak = value->rValue;
mod->HSMHV_gdsleak_Given = TRUE;
break;
case HSMHV_MOD_RDRBB:
mod->HSMHV_rdrbb = value->rValue;
mod->HSMHV_rdrbb_Given = TRUE;
break;
case HSMHV_MOD_RDRBBTMP:
mod->HSMHV_rdrbbtmp = value->rValue;
mod->HSMHV_rdrbbtmp_Given = TRUE;
break;
/* binning parameters */
@ -1762,6 +1406,10 @@ int HSMHVmParam(
mod->HSMHV_lpgd1 = value->rValue;
mod->HSMHV_lpgd1_Given = TRUE;
break;
case HSMHV_MOD_LPGD3:
mod->HSMHV_lpgd3 = value->rValue;
mod->HSMHV_lpgd3_Given = TRUE;
break;
case HSMHV_MOD_LNDEP:
mod->HSMHV_lndep = value->rValue;
mod->HSMHV_lndep_Given = TRUE;
@ -1966,6 +1614,10 @@ int HSMHVmParam(
mod->HSMHV_lnfalp = value->rValue;
mod->HSMHV_lnfalp_Given = TRUE;
break;
case HSMHV_MOD_LPTHROU:
mod->HSMHV_lpthrou = value->rValue;
mod->HSMHV_lpthrou_Given = TRUE;
break;
case HSMHV_MOD_LVDIFFJ:
mod->HSMHV_lvdiffj = value->rValue;
mod->HSMHV_lvdiffj_Given = TRUE;
@ -2051,46 +1703,6 @@ int HSMHVmParam(
mod->HSMHV_lvover = value->rValue;
mod->HSMHV_lvover_Given = TRUE;
break;
case HSMHV_MOD_LJS0D:
mod->HSMHV_ljs0d = value->rValue;
mod->HSMHV_ljs0d_Given = TRUE;
break;
case HSMHV_MOD_LJS0SWD:
mod->HSMHV_ljs0swd = value->rValue;
mod->HSMHV_ljs0swd_Given = TRUE;
break;
case HSMHV_MOD_LNJD:
mod->HSMHV_lnjd = value->rValue;
mod->HSMHV_lnjd_Given = TRUE;
break;
case HSMHV_MOD_LCISBKD:
mod->HSMHV_lcisbkd = value->rValue;
mod->HSMHV_lcisbkd_Given = TRUE;
break;
case HSMHV_MOD_LVDIFFJD:
mod->HSMHV_lvdiffjd = value->rValue;
mod->HSMHV_lvdiffjd_Given = TRUE;
break;
case HSMHV_MOD_LJS0S:
mod->HSMHV_ljs0s = value->rValue;
mod->HSMHV_ljs0s_Given = TRUE;
break;
case HSMHV_MOD_LJS0SWS:
mod->HSMHV_ljs0sws = value->rValue;
mod->HSMHV_ljs0sws_Given = TRUE;
break;
case HSMHV_MOD_LNJS:
mod->HSMHV_lnjs = value->rValue;
mod->HSMHV_lnjs_Given = TRUE;
break;
case HSMHV_MOD_LCISBKS:
mod->HSMHV_lcisbks = value->rValue;
mod->HSMHV_lcisbks_Given = TRUE;
break;
case HSMHV_MOD_LVDIFFJS:
mod->HSMHV_lvdiffjs = value->rValue;
mod->HSMHV_lvdiffjs_Given = TRUE;
break;
/* Width dependence */
case HSMHV_MOD_WVMAX:
@ -2165,6 +1777,10 @@ int HSMHVmParam(
mod->HSMHV_wpgd1 = value->rValue;
mod->HSMHV_wpgd1_Given = TRUE;
break;
case HSMHV_MOD_WPGD3:
mod->HSMHV_wpgd3 = value->rValue;
mod->HSMHV_wpgd3_Given = TRUE;
break;
case HSMHV_MOD_WNDEP:
mod->HSMHV_wndep = value->rValue;
mod->HSMHV_wndep_Given = TRUE;
@ -2369,6 +1985,10 @@ int HSMHVmParam(
mod->HSMHV_wnfalp = value->rValue;
mod->HSMHV_wnfalp_Given = TRUE;
break;
case HSMHV_MOD_WPTHROU:
mod->HSMHV_wpthrou = value->rValue;
mod->HSMHV_wpthrou_Given = TRUE;
break;
case HSMHV_MOD_WVDIFFJ:
mod->HSMHV_wvdiffj = value->rValue;
mod->HSMHV_wvdiffj_Given = TRUE;
@ -2454,46 +2074,6 @@ int HSMHVmParam(
mod->HSMHV_wvover = value->rValue;
mod->HSMHV_wvover_Given = TRUE;
break;
case HSMHV_MOD_WJS0D:
mod->HSMHV_wjs0d = value->rValue;
mod->HSMHV_wjs0d_Given = TRUE;
break;
case HSMHV_MOD_WJS0SWD:
mod->HSMHV_wjs0swd = value->rValue;
mod->HSMHV_wjs0swd_Given = TRUE;
break;
case HSMHV_MOD_WNJD:
mod->HSMHV_wnjd = value->rValue;
mod->HSMHV_wnjd_Given = TRUE;
break;
case HSMHV_MOD_WCISBKD:
mod->HSMHV_wcisbkd = value->rValue;
mod->HSMHV_wcisbkd_Given = TRUE;
break;
case HSMHV_MOD_WVDIFFJD:
mod->HSMHV_wvdiffjd = value->rValue;
mod->HSMHV_wvdiffjd_Given = TRUE;
break;
case HSMHV_MOD_WJS0S:
mod->HSMHV_wjs0s = value->rValue;
mod->HSMHV_wjs0s_Given = TRUE;
break;
case HSMHV_MOD_WJS0SWS:
mod->HSMHV_wjs0sws = value->rValue;
mod->HSMHV_wjs0sws_Given = TRUE;
break;
case HSMHV_MOD_WNJS:
mod->HSMHV_wnjs = value->rValue;
mod->HSMHV_wnjs_Given = TRUE;
break;
case HSMHV_MOD_WCISBKS:
mod->HSMHV_wcisbks = value->rValue;
mod->HSMHV_wcisbks_Given = TRUE;
break;
case HSMHV_MOD_WVDIFFJS:
mod->HSMHV_wvdiffjs = value->rValue;
mod->HSMHV_wvdiffjs_Given = TRUE;
break;
/* Cross-term dependence */
case HSMHV_MOD_PVMAX:
@ -2568,6 +2148,10 @@ int HSMHVmParam(
mod->HSMHV_ppgd1 = value->rValue;
mod->HSMHV_ppgd1_Given = TRUE;
break;
case HSMHV_MOD_PPGD3:
mod->HSMHV_ppgd3 = value->rValue;
mod->HSMHV_ppgd3_Given = TRUE;
break;
case HSMHV_MOD_PNDEP:
mod->HSMHV_pndep = value->rValue;
mod->HSMHV_pndep_Given = TRUE;
@ -2772,6 +2356,10 @@ int HSMHVmParam(
mod->HSMHV_pnfalp = value->rValue;
mod->HSMHV_pnfalp_Given = TRUE;
break;
case HSMHV_MOD_PPTHROU:
mod->HSMHV_ppthrou = value->rValue;
mod->HSMHV_ppthrou_Given = TRUE;
break;
case HSMHV_MOD_PVDIFFJ:
mod->HSMHV_pvdiffj = value->rValue;
mod->HSMHV_pvdiffj_Given = TRUE;
@ -2858,119 +2446,6 @@ int HSMHVmParam(
mod->HSMHV_pvover_Given = TRUE;
break;
case HSMHV_MOD_PJS0D:
mod->HSMHV_pjs0d = value->rValue;
mod->HSMHV_pjs0d_Given = TRUE;
break;
case HSMHV_MOD_PJS0SWD:
mod->HSMHV_pjs0swd = value->rValue;
mod->HSMHV_pjs0swd_Given = TRUE;
break;
case HSMHV_MOD_PNJD:
mod->HSMHV_pnjd = value->rValue;
mod->HSMHV_pnjd_Given = TRUE;
break;
case HSMHV_MOD_PCISBKD:
mod->HSMHV_pcisbkd = value->rValue;
mod->HSMHV_pcisbkd_Given = TRUE;
break;
case HSMHV_MOD_PVDIFFJD:
mod->HSMHV_pvdiffjd = value->rValue;
mod->HSMHV_pvdiffjd_Given = TRUE;
break;
case HSMHV_MOD_PJS0S:
mod->HSMHV_pjs0s = value->rValue;
mod->HSMHV_pjs0s_Given = TRUE;
break;
case HSMHV_MOD_PJS0SWS:
mod->HSMHV_pjs0sws = value->rValue;
mod->HSMHV_pjs0sws_Given = TRUE;
break;
case HSMHV_MOD_PNJS:
mod->HSMHV_pnjs = value->rValue;
mod->HSMHV_pnjs_Given = TRUE;
break;
case HSMHV_MOD_PCISBKS:
mod->HSMHV_pcisbks = value->rValue;
mod->HSMHV_pcisbks_Given = TRUE;
break;
case HSMHV_MOD_PVDIFFJS:
mod->HSMHV_pvdiffjs = value->rValue;
mod->HSMHV_pvdiffjs_Given = TRUE;
break;
case HSMHV_MOD_NDEPM:
mod->HSMHV_ndepm = value->rValue;
mod->HSMHV_ndepm_Given = TRUE;
break;
case HSMHV_MOD_TNDEP:
mod->HSMHV_tndep = value->rValue;
mod->HSMHV_tndep_Given = TRUE;
break;
case HSMHV_MOD_DEPMUE0:
mod->HSMHV_depmue0 = value->rValue;
mod->HSMHV_depmue0_Given = TRUE;
break;
case HSMHV_MOD_DEPMUE1:
mod->HSMHV_depmue1 = value->rValue;
mod->HSMHV_depmue1_Given = TRUE;
break;
case HSMHV_MOD_DEPMUEBACK0:
mod->HSMHV_depmueback0 = value->rValue;
mod->HSMHV_depmueback0_Given = TRUE;
break;
case HSMHV_MOD_DEPMUEBACK1:
mod->HSMHV_depmueback1 = value->rValue;
mod->HSMHV_depmueback1_Given = TRUE;
break;
case HSMHV_MOD_DEPLEAK:
mod->HSMHV_depleak = value->rValue;
mod->HSMHV_depleak_Given = TRUE;
break;
case HSMHV_MOD_DEPETA:
mod->HSMHV_depeta = value->rValue;
mod->HSMHV_depeta_Given = TRUE;
break;
case HSMHV_MOD_DEPVMAX:
mod->HSMHV_depvmax = value->rValue;
mod->HSMHV_depvmax_Given = TRUE;
break;
case HSMHV_MOD_DEPVDSEF1:
mod->HSMHV_depvdsef1 = value->rValue;
mod->HSMHV_depvdsef1_Given = TRUE;
break;
case HSMHV_MOD_DEPVDSEF2:
mod->HSMHV_depvdsef2 = value->rValue;
mod->HSMHV_depvdsef2_Given = TRUE;
break;
case HSMHV_MOD_DEPMUEPH0:
mod->HSMHV_depmueph0 = value->rValue;
mod->HSMHV_depmueph0_Given = TRUE;
break;
case HSMHV_MOD_DEPMUEPH1:
mod->HSMHV_depmueph1 = value->rValue;
mod->HSMHV_depmueph1_Given = TRUE;
break;
case HSMHV_MOD_DEPBB:
mod->HSMHV_depbb = value->rValue;
mod->HSMHV_depbb_Given = TRUE;
break;
case HSMHV_MOD_DEPVTMP:
mod->HSMHV_depvtmp = value->rValue;
mod->HSMHV_depvtmp_Given = TRUE;
break;
case HSMHV_MOD_DEPMUETMP:
mod->HSMHV_depmuetmp = value->rValue;
mod->HSMHV_depmuetmp_Given = TRUE;
break;
case HSMHV_MOD_ISBREAK:
mod->HSMHV_isbreak = value->rValue;
mod->HSMHV_isbreak_Given = TRUE;
break;
case HSMHV_MOD_RWELL:
mod->HSMHV_rwell = value->rValue;
mod->HSMHV_rwell_Given = TRUE;
break;
case HSMHV_MOD_VGS_MAX:
mod->HSMHVvgsMax = value->rValue;
mod->HSMHVvgsMaxGiven = TRUE;

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvnoi.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "hsmhvdef.h"
#include "ngspice/cktdefs.h"
@ -76,9 +34,6 @@ June 2008 (revised October 2011)
* all of the MOSFET's is summed with the variable "OnDens".
*/
extern void NevalSrc();
extern double Nintegrate();
int HSMHVnoise (
int mode, int operation,
GENmodel *inModel,
@ -123,10 +78,8 @@ int HSMHVnoise (
case N_DENS:
for ( i = 0; i < HSMHVNSRCS; i++ ) {
(void) sprintf(name, "onoise.%s%s",
(char *)here->HSMHVname, HSMHVnNames[i]);
data->namelist =
(IFuid *) trealloc((char *) data->namelist,
(data->numPlots + 1) * sizeof(IFuid));
here->HSMHVname, HSMHVnNames[i]);
data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1);
if (!data->namelist)
return(E_NOMEM);
(*(SPfrontEnd->IFnewUid))
@ -137,10 +90,8 @@ int HSMHVnoise (
case INT_NOIZ:
for ( i = 0; i < HSMHVNSRCS; i++ ) {
(void) sprintf(name, "onoise_total.%s%s",
(char *)here->HSMHVname, HSMHVnNames[i]);
data->namelist =
(IFuid *) trealloc((char *) data->namelist,
(data->numPlots + 1) * sizeof(IFuid));
here->HSMHVname, HSMHVnNames[i]);
data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1);
if (!data->namelist)
return(E_NOMEM);
(*(SPfrontEnd->IFnewUid))
@ -148,10 +99,8 @@ int HSMHVnoise (
(IFuid) NULL, name, UID_OTHER, NULL);
(void) sprintf(name, "inoise_total.%s%s",
(char *)here->HSMHVname, HSMHVnNames[i]);
data->namelist =
(IFuid *) trealloc((char *) data->namelist,
(data->numPlots + 1) * sizeof(IFuid));
here->HSMHVname, HSMHVnNames[i]);
data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1);
if (!data->namelist)
return(E_NOMEM);
(*(SPfrontEnd->IFnewUid))
@ -172,7 +121,7 @@ int HSMHVnoise (
TTEMP = TTEMP + *(ckt->CKTstate0 + here->HSMHVdeltemp) ;
/* rs/rd thermal noise */
if ( model->HSMHV_corsrd == 1 || model->HSMHV_corsrd == 3 || model->HSMHV_cordrift == 1 ) {
if ( model->HSMHV_corsrd == 1 || model->HSMHV_corsrd == 3 ) {
NevalSrc(&noizDens[HSMHVRDNOIZ], (double*) NULL,
ckt, N_GAIN,
here->HSMHVdNodePrime, here->HSMHVdNode,

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvpar.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "ngspice/ifsim.h"
#include "hsmhvdef.h"

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvpzld.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "ngspice/cktdefs.h"
#include "ngspice/complex.h"
@ -66,11 +24,11 @@ June 2008 (revised October 2011)
int HSMHVpzLoad(
GENmodel *inModel,
CKTcircuit *ckt,
SPcomplex *s)
register CKTcircuit *ckt,
register SPcomplex *s)
{
HSMHVmodel *model = (HSMHVmodel*)inModel;
HSMHVinstance *here;
register HSMHVmodel *model = (HSMHVmodel*)inModel;
register HSMHVinstance *here;
int flg_nqs =0 ;
NG_IGNORE(ckt);

File diff suppressed because it is too large Load Diff

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvtemp.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "ngspice/smpdefs.h"
#include "ngspice/cktdefs.h"
@ -69,7 +27,7 @@ June 2008 (revised October 2011)
#define RANGECHECK(param, min, max, pname) \
if ( (param) < (min) || (param) > (max) ) { \
printf("warning(HiSIM_HV(%s)): The model/instance parameter %s (= %e) must be in the range [%e , %e].\n", model->HSMHVmodName,\
printf("warning(HiSIMHV): The model/instance parameter %s (= %e) must be in the range [%e , %e].\n", \
(pname), (param), (min), (max) ); \
}
@ -91,6 +49,11 @@ June 2008 (revised October 2011)
y = ( xmin ) + 0.5 * ( TMF1 + TMF2 ) ; \
}
#ifdef POW_TO_EXP_AND_LOG
#define Fn_Pow( x , y ) exp( y * log( x ) )
#else
#define Fn_Pow( x , y ) pow( x , y )
#endif
#define C_m2cm (1.0e2)
@ -98,8 +61,8 @@ int HSMHVtemp(
GENmodel *inModel,
CKTcircuit *ckt)
{
HSMHVmodel *model = (HSMHVmodel *)inModel ;
HSMHVinstance *here ;
register HSMHVmodel *model = (HSMHVmodel *)inModel ;
register HSMHVinstance *here ;
HSMHVbinningParam *pParam ;
HSMHVmodelMKSParam *modelMKS ;
HSMHVhereMKSParam *hereMKS ;
@ -110,12 +73,10 @@ int HSMHVtemp(
double T0, T1, T2, T3, T4, T5, T6, T7 ;
/* temperature-dependent variables */
double Eg =0.0, TTEMP0=0.0, TTEMP=0.0, beta=0.0, Nin=0.0 ;
double Tdiff0 = 0.0, Tdiff0_2 = 0.0, Tdiff = 0.0, Tdiff_2 = 0.0;
double /*Tdiff0 = 0.0, Tdiff0_2 = 0.0,*/ Tdiff = 0.0, Tdiff_2 = 0.0 ;
double js=0.0, jssw=0.0, js2=0.0, jssw2 =0.0 ;
int i=0 ;
double TMF1 , TMF2 ;
double GDLD =0.0 ;
double log_Tratio =0.0 ;
const double small = 1.0e-50 ;
const double dlt_rd23 = 1.0e-6 / C_m2cm ;
const double large_arg = 80 ;
@ -146,7 +107,6 @@ int HSMHVtemp(
LG = Lgate * C_m2um ;
here->HSMHV_wg = WG = Wgate * C_m2um ;
WL = WG * LG ;
GDLD = model->HSMHV_gdld * C_m2um ;
/* Band gap */
@ -197,7 +157,7 @@ int HSMHVtemp(
/* DFM */
if ( model->HSMHV_codfm == 1 && here->HSMHV_nsubcdfm_Given ) {
RANGECHECK(here->HSMHV_nsubcdfm, 1.0e16, 1.0e19, "NSUBCDFM") ;
RANGECHECK(hereMKS->HSMHV_nsubcdfm, 1.0e16, 1.0e19, "NSUBCDFM") ;
here->HSMHV_mueph1 *= model->HSMHV_mphdfm
* ( log(hereMKS->HSMHV_nsubcdfm) - log(here->HSMHV_nsubc) ) + 1.0 ;
here->HSMHV_nsubp += hereMKS->HSMHV_nsubcdfm - here->HSMHV_nsubc ;
@ -246,15 +206,11 @@ int HSMHVtemp(
Leff = Lgate - ( dL + dLLD ) ;
if ( Leff <= 0.0 ) {
IFuid namarr[2];
namarr[0] = here->HSMHVname;
namarr[1] = model->HSMHVmodName;
(*(SPfrontEnd->IFerror))
SPfrontEnd->IFerrorf
(
ERR_FATAL,
"HiSIM_HV: MOSFET(%s) MODEL(%s): effective channel length is negative or 0",
namarr
);
model->HSMHVmodName, here->HSMHVname);
return (E_BADPARM);
}
here->HSMHV_leff = Leff ;
@ -272,15 +228,11 @@ int HSMHVtemp(
here->HSMHV_weff_ld = Wgate - 2.0e0 * dWLD ;
here->HSMHV_weff_cv = Wgate - 2.0e0 * dWCV ;
if ( Weff <= 0.0 ) {
IFuid namarr[2];
namarr[0] = here->HSMHVname;
namarr[1] = model->HSMHVmodName;
(*(SPfrontEnd->IFerror))
SPfrontEnd->IFerrorf
(
ERR_FATAL,
"HiSIM_HV: MOSFET(%s) MODEL(%s): effective channel width is negative or 0",
namarr
);
model->HSMHVmodName, here->HSMHVname);
return (E_BADPARM);
}
here->HSMHV_weff_nf = Weff * here->HSMHV_nf ;
@ -331,9 +283,6 @@ int HSMHVtemp(
here->HSMHV_ptovr0 = 0.0e0 ;
}
/* depletion MOS (temperature-independent part) */
here->HSMHV_ndepm = modelMKS->HSMHV_ndepm ;
/* costi0 and costi1 for STI transistor model (temperature-independent part) */
here->HSMHV_costi00 = sqrt (2.0 * C_QE * pParam->HSMHV_nsti * C_ESI ) ;
here->HSMHV_nsti_p2 = 1.0 / ( pParam->HSMHV_nsti * pParam->HSMHV_nsti ) ;
@ -348,10 +297,14 @@ int HSMHVtemp(
/* @300K, w/o pocket */
here->HSMHV_pb2c = 2.0e0 / C_b300 * log (here->HSMHV_nsubc / C_Nin0) ;
/* constant for Poly depletion */
here->HSMHV_cnstpgd = pow ( 1e0 + 1e0 / LG , model->HSMHV_pgd4 )
* pParam->HSMHV_pgd1 ;
/* Gate resistance */
if ( here->HSMHV_corg == 1 ) {
T1 = here->HSMHV_xgw + Weff / (3.0e0 * here->HSMHV_ngcon);
@ -360,7 +313,7 @@ int HSMHVtemp(
if (here->HSMHV_grg > 1.0e-3) here->HSMHV_grg = here->HSMHV_m / here->HSMHV_grg;
else {
here->HSMHV_grg = here->HSMHV_m * 1.0e3;
printf("warning(HiSIM_HV(%s)): The gate conductance reset to 1.0e3 mho.\n",model->HSMHVmodName);
printf("warning(HiSIM_HV): The gate conductance reset to 1.0e3 mho.\n");
}
}
@ -397,15 +350,6 @@ int HSMHVtemp(
here->HSMHV_rs0 = 0.0 ;
}
here->HSMHV_Xmax = sqrt ( model->HSMHV_rdrdjunc * model->HSMHV_rdrdjunc + model->HSMHV_xldld * model->HSMHV_xldld ) ;
if(pParam->HSMHV_nover != 0.0) {
here->HSMHV_kdep = 2.0 * C_ESI / ( C_QE * pParam->HSMHV_nover ) ;
here->HSMHV_kjunc = 2.0 * C_ESI / C_QE * here->HSMHV_nsubc / ( pParam->HSMHV_nover + here->HSMHV_nsubc ) / pParam->HSMHV_nover ;
}
here->HSMHV_rdrcxw = 1.0e0 ;
here->HSMHV_rdrvmaxw = 1.0e0 + (model->HSMHV_rdrvmaxw / pow( WG, model->HSMHV_rdrvmaxwp)) ;
here->HSMHV_rdrvmaxl = 1.0e0 + (model->HSMHV_rdrvmaxl / pow( LG, model->HSMHV_rdrvmaxlp)) ;
here->HSMHV_rdrmuel = 1.0e0 + (model->HSMHV_rdrmuel / pow( LG, model->HSMHV_rdrmuelp )) ;
/* Body resistance */
if ( here->HSMHV_corbnet == 1 ) {
@ -420,16 +364,9 @@ int HSMHVtemp(
}
/* Vdseff */
if( model->HSMHV_coddlt == 0) {
T1 = model->HSMHV_ddltslp * LG + model->HSMHV_ddltict ;
if ( T1 < 0.0 ) { T1 = 0.0 ; }
here->HSMHV_ddlt = T1 * model->HSMHV_ddltmax / ( T1 + model->HSMHV_ddltmax ) + 1.0 ;
} else {
T1 = model->HSMHV_ddltslp * LG ;
if ( T1 < 0.0 ) { T1 = 0.0 ; }
here->HSMHV_ddlt = T1 * model->HSMHV_ddltmax / ( T1 + model->HSMHV_ddltmax ) + model->HSMHV_ddltict + small ;
}
T1 = model->HSMHV_ddltslp * LG + model->HSMHV_ddltict ;
if ( T1 < 0.0 ) { T1 = 0.0 ; }
here->HSMHV_ddlt = T1 * model->HSMHV_ddltmax / ( T1 + model->HSMHV_ddltmax ) + 1.0 ;
/* Isub */
T2 = pow( Weff , model->HSMHV_svgswp ) ;
@ -452,13 +389,6 @@ int HSMHVtemp(
here->HSMHV_xsub2 = pParam->HSMHV_sub2
* ( 1.0 + modelMKS->HSMHV_sub2l / here->HSMHV_lgate ) ;
here->HSMHV_subld1 = model->HSMHV_subld1
* ( 1.0 + model->HSMHV_subld1l / pow( LG , model->HSMHV_subld1lp ) ) ;
/* IBPC */
here->HSMHV_ibpc1 = pParam->HSMHV_ibpc1
* ( 1.0 + model->HSMHV_ibpc1l / pow( LG , model->HSMHV_ibpc1lp ) ) ;
/* Fringing capacitance */
here->HSMHV_cfrng = C_EOX / ( C_Pi / 2.0e0 ) * here->HSMHV_weff_nf
* log( 1.0e0 + model->HSMHV_tpoly / model->HSMHV_tox ) ;
@ -467,11 +397,6 @@ int HSMHVtemp(
here->HSMHV_cqyb0 = C_m2um * here->HSMHV_weff_nf
* model->HSMHV_xqy1 / pow( LG , model->HSMHV_xqy2 ) ;
/* Parasitic component of the channel current */
here->HSMHV_ptl0 = model->HSMHV_ptl * pow( LG , - model->HSMHV_ptlp ) ;
here->HSMHV_pt40 = model->HSMHV_pt4 * pow( LG , - model->HSMHV_pt4p ) ;
here->HSMHV_gdl0 = model->HSMHV_gdl * pow( LG + GDLD , - model->HSMHV_gdlp ) ;
/* Self heating */
pParam->HSMHV_rth = pParam->HSMHV_rth0 / ( here->HSMHV_m * here->HSMHV_weff_nf )
* ( 1.0 + model->HSMHV_rth0w / pow( WG , model->HSMHV_rth0wp ) );
@ -489,8 +414,6 @@ int HSMHVtemp(
if ( here->HSMHVtempNode < 0 || pParam->HSMHV_rth0 == 0.0 ) {
#include "hsmhvtemp_eval.h"
#include "hsmhvtemp_eval_rdri.h"
#include "hsmhvtemp_eval_dio.h"
} /* end of if ( here->HSMHVtempNode < 0 || pParam->HSMHV_rth0 == 0.0 ) */

View File

@ -1,61 +1,19 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvtemp_eval.h
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#define C_rdtemp_min 5.0e-3
#define C_rdtemp_dlt 1.0e-2
@ -66,15 +24,16 @@ June 2008 (revised October 2011)
/* Self heating */
TTEMP = TTEMP + deltemp ;
#endif
Tdiff0 = TTEMP0 - model->HSMHV_ktnom ;
Tdiff0_2 = TTEMP0 * TTEMP0 - model->HSMHV_ktnom * model->HSMHV_ktnom ;
/*Tdiff0 = TTEMP0 - model->HSMHV_ktnom ;*/
/*Tdiff0_2 = TTEMP0 * TTEMP0 - model->HSMHV_ktnom * model->HSMHV_ktnom ;*/
Tdiff = TTEMP - model->HSMHV_ktnom ;
Tdiff_2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
here->HSMHV_Tratio = TTEMP / model->HSMHV_ktnom ;
/* Band gap */
here->HSMHV_eg = Eg = here->HSMHV_egtnom - pParam->HSMHV_bgtmp1 * Tdiff
- pParam->HSMHV_bgtmp2 * Tdiff_2 ;
T1 = TTEMP - model->HSMHV_ktnom ;
T2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
here->HSMHV_eg = Eg = here->HSMHV_egtnom - pParam->HSMHV_bgtmp1 * T1
- pParam->HSMHV_bgtmp2 * T2 ;
here->HSMHV_sqrt_eg = sqrt( Eg ) ;
#ifdef HSMHVEVAL
Eg_dT = -pParam->HSMHV_bgtmp1 - 2.0e0 * TTEMP * pParam->HSMHV_bgtmp2 ;
@ -100,53 +59,26 @@ Tdiff_2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
#endif
/* Intrinsic carrier concentration */
here->HSMHV_nin = Nin = C_Nin0 * Fn_Pow (here->HSMHV_Tratio, 1.5e0)
here->HSMHV_nin = Nin = C_Nin0 * Fn_Pow (TTEMP / model->HSMHV_ktnom, 1.5e0)
* exp (- Eg / 2.0e0 * beta + here->HSMHV_egtnom / 2.0e0 * here->HSMHV_betatnom) ;
#ifdef HSMHVEVAL
Nin_dT = C_Nin0 * exp (- Eg / 2.0e0 * beta + here->HSMHV_egtnom / 2.0e0 * here->HSMHV_betatnom)
* 1.5e0 * Fn_Pow ( here->HSMHV_Tratio , 0.5e0 ) / model->HSMHV_ktnom
+ C_Nin0 * Fn_Pow (here->HSMHV_Tratio, 1.5e0)
* 1.5e0 * Fn_Pow ( TTEMP / model->HSMHV_ktnom , 0.5e0 ) / model->HSMHV_ktnom
+ C_Nin0 * Fn_Pow (TTEMP / model->HSMHV_ktnom, 1.5e0)
* exp (- Eg / 2.0e0 * beta + here->HSMHV_egtnom / 2.0e0 * here->HSMHV_betatnom)
* ( - Eg / 2.0e0 * beta_dT - beta / 2.0e0 * Eg_dT );
#endif
/* Phonon Scattering (temperature-dependent part) */
T1 = Fn_Pow (here->HSMHV_Tratio, pParam->HSMHV_muetmp) ;
T1 = Fn_Pow (TTEMP / model->HSMHV_ktnom, pParam->HSMHV_muetmp) ;
here->HSMHV_mphn0 = T1 / here->HSMHV_mueph ;
here->HSMHV_mphn1 = here->HSMHV_mphn0 * model->HSMHV_mueph0 ;
#ifdef HSMHVEVAL
T1_dT = pParam->HSMHV_muetmp * Fn_Pow(here->HSMHV_Tratio, pParam->HSMHV_muetmp - 1.0 )
T1_dT = pParam->HSMHV_muetmp * Fn_Pow(TTEMP / model->HSMHV_ktnom, pParam->HSMHV_muetmp - 1.0 )
/ model->HSMHV_ktnom ;
mphn0_dT = T1_dT / here->HSMHV_mueph ;
#endif
if( model->HSMHV_codep == 1 ) {
/* depletion MOS parameter (temperature-dependent part) */
here->HSMHV_Pb2n = 2.0/beta*log(here->HSMHV_ndepm/Nin) ;
here->HSMHV_Vbipn = 1.0/beta*log(here->HSMHV_ndepm*here->HSMHV_nsub/Nin/Nin) ;
here->HSMHV_cnst0 = sqrt ( 2.0 * C_ESI * C_QE * here->HSMHV_ndepm / beta ) ;
here->HSMHV_cnst1 = Nin*Nin/here->HSMHV_ndepm/here->HSMHV_ndepm ;
T1 = Fn_Pow (here->HSMHV_Tratio, model->HSMHV_depmuetmp) ;
here->HSMHV_depmphn0 = T1 / model->HSMHV_depmueph1 ;
here->HSMHV_depmphn1 = here->HSMHV_depmphn0 * model->HSMHV_depmueph0 ;
T0 = 1.8 + 0.4 * here->HSMHV_Tratio + 0.1 * here->HSMHV_Tratio * here->HSMHV_Tratio - model->HSMHV_depvtmp * ( 1.0 - here->HSMHV_Tratio ) ;
here->HSMHV_depvmax = modelMKS->HSMHV_depvmax / T0 ;
#ifdef HSMHVEVAL
Pb2n_dT = -here->HSMHV_Pb2n/beta*beta_dT-2.0/beta/Nin*Nin_dT ;
Vbipn_dT = -here->HSMHV_Vbipn/beta*beta_dT-2/beta/Nin*Nin_dT ;
cnst0_dT = 0.5e0 / here->HSMHV_cnst0 * 2.0 * C_ESI * C_QE * here->HSMHV_ndepm * beta_inv_dT ;
cnst1_dT = 2.0e0 * Nin * Nin_dT / here->HSMHV_ndepm / here->HSMHV_ndepm ;
T1_dT = model->HSMHV_depmuetmp * Fn_Pow(here->HSMHV_Tratio, model->HSMHV_depmuetmp - 1.0 )
/ model->HSMHV_ktnom ;
depmphn0_dT = T1_dT / model->HSMHV_depmueph1 ;
T0_dT = 1 / model->HSMHV_ktnom * ( 0.4 + 0.2 * here->HSMHV_Tratio + model->HSMHV_depvtmp ) ;
depVmax_dT = - modelMKS->HSMHV_depvmax / ( T0 * T0 ) * T0_dT ;
#endif
}
/* Pocket Overlap (temperature-dependent part) */
here->HSMHV_ptovr = here->HSMHV_ptovr0 / beta ;
#ifdef HSMHVEVAL
@ -155,14 +87,16 @@ Tdiff_2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
/* Velocity Temperature Dependence */
T1 = TTEMP / model->HSMHV_ktnom ;
T3 = TTEMP0 - model->HSMHV_ktnom ;
T4 = TTEMP0 * TTEMP0 - model->HSMHV_ktnom * model->HSMHV_ktnom ;
T0 = 1.8 + 0.4 * T1 + 0.1 * T1 * T1 - pParam->HSMHV_vtmp * (1.0 - T1) ;
if ( model->HSMHV_cotemp != 2 ) { /* without deltemp (COTEMP=0,1,3) */
here->HSMHV_vmax = here->HSMHV_vmax0 * pParam->HSMHV_vmax
/ T0
* ( 1.0 + model->HSMHV_vmaxt1 * Tdiff0 + model->HSMHV_vmaxt2 * Tdiff0_2 ) ;
* ( 1.0 + model->HSMHV_vmaxt1 * T3 + model->HSMHV_vmaxt2 * T4 ) ;
#ifdef HSMHVEVAL
Vmax_dT=-here->HSMHV_vmax0 * pParam->HSMHV_vmax
/ ( T0 * T0 ) * ( 1.0 + model->HSMHV_vmaxt1 * Tdiff0 + model->HSMHV_vmaxt2 * Tdiff0_2 )
/ ( T0 * T0 ) * ( 1.0 + model->HSMHV_vmaxt1 * T3 + model->HSMHV_vmaxt2 * T4 )
* 1/model->HSMHV_ktnom * (0.4 + 0.2 * T1 + pParam->HSMHV_vtmp) ;
#endif
} else { /* with deltemp (COTEMP=2) */
@ -179,7 +113,7 @@ Tdiff_2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
#endif
}
if ( model->HSMHV_cotemp != 2 ) { /* without deltemp (COTEMP=0,1,3) */
here->HSMHV_ninvd = here->HSMHV_ninvd0 * ( 1.0 + model->HSMHV_ninvdt1 * Tdiff0 + model->HSMHV_ninvdt2 * Tdiff0_2 ) ;
here->HSMHV_ninvd = here->HSMHV_ninvd0 * ( 1.0 + model->HSMHV_ninvdt1 * T3 + model->HSMHV_ninvdt2 * T4 ) ;
#ifdef HSMHVEVAL
ninvd_dT = 0.0 ;
#endif
@ -192,11 +126,11 @@ Tdiff_2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
}
/* Temperature Dependence of RTH0 */
pParam->HSMHV_rth = ( pParam->HSMHV_rth0 + model->HSMHV_rthtemp1 * Tdiff0 + model->HSMHV_rthtemp2 * Tdiff0_2 ) * here->HSMHV_rthtemp0 ;
pParam->HSMHV_rth = ( pParam->HSMHV_rth0 + model->HSMHV_rthtemp1 * T3 + model->HSMHV_rthtemp2 * T4 ) * here->HSMHV_rthtemp0 ;
/* Temperature Dependence of POWRAT */
T2 = pParam->HSMHV_powrat + model->HSMHV_prattemp1 * Tdiff0 + model->HSMHV_prattemp2 * Tdiff0_2 ;
T2 = pParam->HSMHV_powrat + model->HSMHV_prattemp1 * T3 + model->HSMHV_prattemp2 * T4 ;
Fn_SL( T2 , T2 , 0 , 0.05 , T0 );
Fn_SU( here->HSMHV_powratio , T2 , 1 , 0.05 , T0 );
@ -213,53 +147,52 @@ Tdiff_2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
here->HSMHV_wdpl = sqrt ( T1 / here->HSMHV_nsub ) ;
here->HSMHV_wdplp = sqrt( T1 / ( here->HSMHV_nsubp ) ) ;
if( model->HSMHV_codep == 0 ) {
/* Coefficient of the F function for bulk charge */
here->HSMHV_cnst0 = sqrt ( 2.0 * C_ESI * C_QE * here->HSMHV_nsub / beta ) ;
/* Coefficient of the F function for bulk charge */
here->HSMHV_cnst0 = sqrt ( 2.0 * C_ESI * C_QE * here->HSMHV_nsub / beta ) ;
/* cnst1: n_{p0} / p_{p0} */
T1 = Nin / here->HSMHV_nsub ;
here->HSMHV_cnst1 = T1 * T1 ;
/* cnst1: n_{p0} / p_{p0} */
T1 = Nin / here->HSMHV_nsub ;
here->HSMHV_cnst1 = T1 * T1 ;
#ifdef HSMHVEVAL
cnst0_dT = 0.5e0 / here->HSMHV_cnst0 * 2.0 * C_ESI * C_QE * here->HSMHV_nsub * beta_inv_dT ;
cnst1_dT = 2.0e0 * Nin * Nin_dT / here->HSMHV_nsub / here->HSMHV_nsub ;
cnst0_dT = 0.5e0 / here->HSMHV_cnst0 * 2.0 * C_ESI * C_QE * here->HSMHV_nsub * beta_inv_dT ;
cnst1_dT = 2.0e0 * Nin * Nin_dT / here->HSMHV_nsub / here->HSMHV_nsub ;
#endif
}
if( model->HSMHV_codep == 0 ) {
if ( pParam->HSMHV_nover != 0.0 ) {
here->HSMHV_cnst0over = here->HSMHV_cnst0 * sqrt( pParam->HSMHV_nover / here->HSMHV_nsub ) ;
if ( pParam->HSMHV_nover != 0.0 ) {
here->HSMHV_cnst0over = here->HSMHV_cnst0 * sqrt( pParam->HSMHV_nover / here->HSMHV_nsub ) ;
#ifdef HSMHVEVAL
cnst0over_dT = cnst0_dT * sqrt( pParam->HSMHV_nover / here->HSMHV_nsub ) ;
cnst0over_dT = cnst0_dT * sqrt( pParam->HSMHV_nover / here->HSMHV_nsub ) ;
#endif
}
if ( pParam->HSMHV_novers != 0.0 ) {
here->HSMHV_cnst0overs = here->HSMHV_cnst0 * sqrt( pParam->HSMHV_novers / here->HSMHV_nsub ) ;
/* ps0ldinib : Ps0_iniB for Ps0LD */
T1 = here->HSMHV_cnst0over * model->HSMHV_tox / here->HSMHV_cecox ;
T2 = pParam->HSMHV_nover / Nin ;
here->HSMHV_ps0ldinib = T2 * T2 / ( T1 * T1 );
#ifdef HSMHVEVAL
cnst0overs_dT = cnst0_dT * sqrt( pParam->HSMHV_novers / here->HSMHV_nsub ) ;
T1_dT = cnst0over_dT * model->HSMHV_tox / here->HSMHV_cecox ;
T2_dT = - Nin_dT * T2 / Nin;
ps0ldinib_dT = 2.0 * here->HSMHV_ps0ldinib * ( T2_dT * T1 - T2 * T1_dT ) / ( T1 * T2 );
#endif
}
} else {
if ( pParam->HSMHV_nover != 0.0 ) {
here->HSMHV_cnst0over = here->HSMHV_cnst0 * sqrt( pParam->HSMHV_nover / here->HSMHV_ndepm ) ;
}
if ( pParam->HSMHV_novers != 0.0 ) {
here->HSMHV_cnst0overs = here->HSMHV_cnst0 * sqrt( pParam->HSMHV_novers / here->HSMHV_nsub ) ;
#ifdef HSMHVEVAL
cnst0over_dT = cnst0_dT * sqrt( pParam->HSMHV_nover / here->HSMHV_ndepm ) ;
cnst0overs_dT = cnst0_dT * sqrt( pParam->HSMHV_novers / here->HSMHV_nsub ) ;
#endif
}
if ( pParam->HSMHV_novers != 0.0 ) {
here->HSMHV_cnst0overs = here->HSMHV_cnst0 * sqrt( pParam->HSMHV_novers / here->HSMHV_ndepm ) ;
/* ps0ldinib : Ps0_iniB for Ps0LD */
T1 = here->HSMHV_cnst0overs * model->HSMHV_tox / here->HSMHV_cecox ;
T2 = pParam->HSMHV_novers / Nin ;
here->HSMHV_ps0ldinibs = T2 * T2 / ( T1 * T1 );
#ifdef HSMHVEVAL
cnst0overs_dT = cnst0_dT * sqrt( pParam->HSMHV_novers / here->HSMHV_ndepm ) ;
T1_dT = cnst0overs_dT * model->HSMHV_tox / here->HSMHV_cecox ;
T2_dT = - Nin_dT * T2 / Nin;
ps0ldinibs_dT = 2.0 * here->HSMHV_ps0ldinibs * ( T2_dT * T1 - T2 * T1_dT ) / ( T1 * T2 );
#endif
}
}
}
/* temperature-dependent resistance model */
T3 = model->HSMHV_ktnom ;
T1 = TTEMP0 - T3 ;
T4 = TTEMP0 * TTEMP0 - T3 * T3 ;
/* drain side */
if ( pParam->HSMHV_rd > 0.0 ) {
T2 = here->HSMHV_rdtemp0
@ -267,7 +200,7 @@ Tdiff_2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
* ( here->HSMHV_ldrift2 * model->HSMHV_rdslp2 * C_m2um + model->HSMHV_rdict2 ) ;
if ( model->HSMHV_cotemp == 1 ) { /* without deltemp (COTEMP=1) */
here->HSMHV_rd = ( pParam->HSMHV_rd + modelMKS->HSMHV_rdtemp1 * Tdiff0 + modelMKS->HSMHV_rdtemp2 * Tdiff0_2 ) * T2 ;
here->HSMHV_rd = ( pParam->HSMHV_rd + T1 * modelMKS->HSMHV_rdtemp1 + modelMKS->HSMHV_rdtemp2 * T4 ) * T2 ;
Fn_SL( here->HSMHV_rd, here->HSMHV_rd, C_rdtemp_min * pParam->HSMHV_rd, C_rdtemp_dlt * pParam->HSMHV_rd, T0 );
#ifdef HSMHVEVAL
Rd0_dT = 0.0 ;
@ -290,7 +223,7 @@ Tdiff_2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
* ( here->HSMHV_ldrift2s * model->HSMHV_rdslp2 * C_m2um + model->HSMHV_rdict2 ) ;
if ( model->HSMHV_cotemp == 1 ) { /* without deltemp (COTEMP=1) */
here->HSMHV_rs = ( pParam->HSMHV_rs + modelMKS->HSMHV_rdtemp1 * Tdiff0 + modelMKS->HSMHV_rdtemp2 * Tdiff0_2 ) * T2 ;
here->HSMHV_rs = ( pParam->HSMHV_rs + T1 * modelMKS->HSMHV_rdtemp1 + modelMKS->HSMHV_rdtemp2 * T4 ) * T2 ;
Fn_SL( here->HSMHV_rs, here->HSMHV_rs, C_rdtemp_min * pParam->HSMHV_rs, C_rdtemp_dlt * pParam->HSMHV_rs, T0 );
#ifdef HSMHVEVAL
Rs0_dT = 0.0 ;
@ -317,8 +250,10 @@ Tdiff_2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
Fn_SU( T7 , T5 , T4 * ( model->HSMHV_rdov11 + 1.0) , 50.0e-6 , T6 ) ;
Fn_SL( T2 , T7 + T1 * T4 , 0, 50.0e-6 , T6 ) ;
T3 = model->HSMHV_ktnom ;
T1 = TTEMP0 - T3 ;
if ( model->HSMHV_cotemp == 0 || model->HSMHV_cotemp == 1 ) { /* without deltemp (COTEMP=0,1) */
here->HSMHV_rdvd = ( pParam->HSMHV_rdvd + modelMKS->HSMHV_rdvdtemp1 * Tdiff0 + modelMKS->HSMHV_rdvdtemp2 * Tdiff0_2 ) * T2 ;
here->HSMHV_rdvd = ( pParam->HSMHV_rdvd + T1 * modelMKS->HSMHV_rdvdtemp1 + modelMKS->HSMHV_rdvdtemp2 * ( TTEMP0 * TTEMP0 - T3 * T3 ) ) * T2 ;
Fn_SL( here->HSMHV_rdvd, here->HSMHV_rdvd, C_rdtemp_min * pParam->HSMHV_rdvd, C_rdtemp_dlt * pParam->HSMHV_rdvd, T0 );
#ifdef HSMHVEVAL
Rdvd_dT = 0.0 ;
@ -341,8 +276,10 @@ Tdiff_2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
Fn_SU( T7 , T5 , T4 * ( model->HSMHV_rdov11 + 1.0) , 50.0e-6 , T6 ) ;
Fn_SL( T2 , T7 + T1 * T4 , 0, 50.0e-6 , T6 ) ;
T3 = model->HSMHV_ktnom ;
T1 = TTEMP0 - T3 ;
if ( model->HSMHV_cotemp == 0 || model->HSMHV_cotemp == 1 ) { /* without deltemp (COTEMP=0,1) */
here->HSMHV_rsvd = ( pParam->HSMHV_rdvd + modelMKS->HSMHV_rdvdtemp1 * Tdiff0 + modelMKS->HSMHV_rdvdtemp2 * Tdiff0_2 ) * T2 ;
here->HSMHV_rsvd = ( pParam->HSMHV_rdvd + T1 * modelMKS->HSMHV_rdvdtemp1 + modelMKS->HSMHV_rdvdtemp2 * ( TTEMP0 * TTEMP0 - T3 * T3 ) ) * T2 ;
Fn_SL( here->HSMHV_rsvd, here->HSMHV_rsvd, C_rdtemp_min * pParam->HSMHV_rdvd, C_rdtemp_dlt * pParam->HSMHV_rdvd, T0 );
#ifdef HSMHVEVAL
Rsvd_dT = 0.0 ;
@ -359,8 +296,83 @@ Tdiff_2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
here->HSMHV_rsvd = 0.0 ;
}
/* for substrate-source/drain junction diode. */
js = pParam->HSMHV_js0
* exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta
+ model->HSMHV_xti * log (TTEMP / model->HSMHV_ktnom)) / pParam->HSMHV_nj) ;
jssw = pParam->HSMHV_js0sw
* exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta
+ model->HSMHV_xti * log (TTEMP / model->HSMHV_ktnom)) / model->HSMHV_njsw) ;
js2 = pParam->HSMHV_js0
* exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta
+ model->HSMHV_xti2 * log (TTEMP / model->HSMHV_ktnom)) / pParam->HSMHV_nj) ;
jssw2 = pParam->HSMHV_js0sw
* exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta
+ model->HSMHV_xti2 * log (TTEMP / model->HSMHV_ktnom)) / model->HSMHV_njsw) ;
#ifdef HSMHVEVAL
T0 = - Eg * beta_dT - Eg_dT * beta ; /* Self heating */
T1 = T0 + model->HSMHV_xti / TTEMP ; /* Self heating */
T2 = T0 + model->HSMHV_xti2 / TTEMP ; /* Self heating */
js_dT = js * T1 / pParam->HSMHV_nj; /* Self heating */
jssw_dT = jssw * T1/ model->HSMHV_njsw ; /* Self heating */
js2_dT = js2 * T2 / pParam->HSMHV_nj; /* Self heating */
jssw2_dT = jssw2 * T2 / model->HSMHV_njsw; /* Self heating */
#endif
here->HSMHV_isbd = here->HSMHV_ad * js + here->HSMHV_pd * jssw ;
here->HSMHV_isbd2 = here->HSMHV_ad * js2 + here->HSMHV_pd * jssw2 ;
here->HSMHV_isbs = here->HSMHV_as * js + here->HSMHV_ps * jssw ;
here->HSMHV_isbs2 = here->HSMHV_as * js2 + here->HSMHV_ps * jssw2 ;
#ifdef HSMHVEVAL
isbd_dT = here->HSMHV_ad * js_dT + here->HSMHV_pd * jssw_dT ; /* Self heating */
isbd2_dT = here->HSMHV_ad * js2_dT + here->HSMHV_pd * jssw2_dT ; /* Self heating */
isbs_dT = here->HSMHV_as * js_dT + here->HSMHV_ps * jssw_dT ; /* Self heating */
isbs2_dT = here->HSMHV_as * js2_dT + here->HSMHV_ps * jssw2_dT ; /* Self heating */
#endif
T1 = TTEMP / model->HSMHV_ktnom ;
T0 = T1 * T1 ;
T2 = here->HSMHV_isbd + small ;
T3 = here->HSMHV_isbs + small ;
#ifdef HSMHVEVAL
T1_dT = 1.0 / model->HSMHV_ktnom ; /* Self heating */
T0_dT = 2.0 * T1 * T1_dT ; /* Self heating */
T2_dT = isbd_dT ; /* Self heating */
T3_dT = isbs_dT ; /* Self heating */
#endif
here->HSMHV_vbdt = pParam->HSMHV_nj / beta
* log ( pParam->HSMHV_vdiffj * T0 / T2 + 1.0 ) ;
here->HSMHV_vbst = pParam->HSMHV_nj / beta
* log ( pParam->HSMHV_vdiffj * T0 / T3 + 1.0 ) ;
here->HSMHV_exptemp = exp (( T1 - 1.0 ) * model->HSMHV_ctemp ) ;
#ifdef HSMHVEVAL
vbdt_dT = - beta_dT / beta * here->HSMHV_vbdt
+ pParam->HSMHV_nj / beta * pParam->HSMHV_vdiffj / ( pParam->HSMHV_vdiffj * T0 / T2 + 1.0 )
* ( T0_dT / T2 - T0 / T2 / T2 * T2_dT ) ; /* Self heating */
vbst_dT = - beta_dT / beta * here->HSMHV_vbst
+ pParam->HSMHV_nj / beta * pParam->HSMHV_vdiffj / ( pParam->HSMHV_vdiffj * T0 / T3 + 1.0 )
* ( T0_dT / T3 - T0 / T3 / T3 * T3_dT ) ; /* Self heating */
#endif
here->HSMHV_jd_nvtm_inv = 1.0 / ( pParam->HSMHV_nj / beta ) ;
here->HSMHV_jd_expcd = exp (here->HSMHV_vbdt * here->HSMHV_jd_nvtm_inv ) ;
here->HSMHV_jd_expcs = exp (here->HSMHV_vbst * here->HSMHV_jd_nvtm_inv ) ;
#ifdef HSMHVEVAL
exptemp_dT = model->HSMHV_ctemp / model->HSMHV_ktnom * here->HSMHV_exptemp ; /* Self heating */
jd_nvtm_inv_dT = beta_dT / pParam->HSMHV_nj ; /* Self heating */
jd_expcd_dT = here->HSMHV_jd_expcd
* ( vbdt_dT * here->HSMHV_jd_nvtm_inv + here->HSMHV_vbdt * jd_nvtm_inv_dT ) ; /* Self heating */
jd_expcs_dT = here->HSMHV_jd_expcs
* ( vbst_dT * here->HSMHV_jd_nvtm_inv + here->HSMHV_vbst * jd_nvtm_inv_dT ) ; /* Self heating */
#endif
/* costi0 and costi1 for STI transistor model (temperature-dependent part) */
here->HSMHV_costi0 = here->HSMHV_costi00 * sqrt(here->HSMHV_beta_inv) ;

View File

@ -1,223 +0,0 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
FILE : hsmhvtemp_eval_dio.h
DATE : 2014.6.11
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#define small 1.0e-50
TTEMP = ckt->CKTtemp;
if ( here->HSMHV_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV_dtemp ; }
TTEMP0 = TTEMP ;
#ifdef HSMHVEVAL
/* Self heating */
TTEMP = TTEMP + deltemp ;
#endif
/* Band gap */
T1 = TTEMP - model->HSMHV_ktnom ;
T2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ;
Eg = here->HSMHV_egtnom - pParam->HSMHV_bgtmp1 * T1
- pParam->HSMHV_bgtmp2 * T2 ;
#ifdef HSMHVEVAL
Eg_dT = -pParam->HSMHV_bgtmp1 - 2.0e0 * TTEMP * pParam->HSMHV_bgtmp2 ;
#endif
/* Inverse of the thermal voltage */
here->HSMHV_beta = beta = C_QE / (C_KB * TTEMP) ;
here->HSMHV_beta_inv = 1.0 / beta ;
here->HSMHV_beta2 = beta * beta ;
here->HSMHV_betatnom = C_QE / (C_KB * model->HSMHV_ktnom) ;
#ifdef HSMHVEVAL
beta_dT=-C_QE/(C_KB*TTEMP*TTEMP);
beta_inv_dT = C_KB / C_QE ;
#endif
log_Tratio = log (here->HSMHV_Tratio) ;
/* for substrate-drain junction diode. */
js = pParam->HSMHV_js0d
* exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta
+ model->HSMHV_xtid * log_Tratio) / pParam->HSMHV_njd) ;
jssw = pParam->HSMHV_js0swd
* exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta
+ model->HSMHV_xtid * log_Tratio) / model->HSMHV_njswd) ;
js2 = pParam->HSMHV_js0d
* exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta
+ model->HSMHV_xti2d * log_Tratio) / pParam->HSMHV_njd) ;
jssw2 = pParam->HSMHV_js0swd
* exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta
+ model->HSMHV_xti2d * log_Tratio) / model->HSMHV_njswd) ;
#ifdef HSMHVEVAL
T0 = - Eg * beta_dT - Eg_dT * beta ; /* Self heating */
T1 = T0 + model->HSMHV_xtid / TTEMP ; /* Self heating */
T2 = T0 + model->HSMHV_xti2d / TTEMP ; /* Self heating */
js_dT = js * T1 / pParam->HSMHV_njd; /* Self heating */
jssw_dT = jssw * T1/ model->HSMHV_njswd ; /* Self heating */
js2_dT = js2 * T2 / pParam->HSMHV_njd; /* Self heating */
jssw2_dT = jssw2 * T2 / model->HSMHV_njswd; /* Self heating */
#endif
here->HSMHV_isbd = here->HSMHV_ad * js + here->HSMHV_pd * jssw ;
here->HSMHV_isbd2 = here->HSMHV_ad * js2 + here->HSMHV_pd * jssw2 ;
#ifdef HSMHVEVAL
isbd_dT = here->HSMHV_ad * js_dT + here->HSMHV_pd * jssw_dT ; /* Self heating */
isbd2_dT = here->HSMHV_ad * js2_dT + here->HSMHV_pd * jssw2_dT ; /* Self heating */
#endif
T0 = here->HSMHV_Tratio * here->HSMHV_Tratio ;
T2 = here->HSMHV_isbd + small ;
#ifdef HSMHVEVAL
T1_dT = 1.0 / model->HSMHV_ktnom ; /* Self heating */
T0_dT = 2.0 * here->HSMHV_Tratio * T1_dT ; /* Self heating */
T2_dT = isbd_dT ; /* Self heating */
#endif
here->HSMHV_vbdt = pParam->HSMHV_njd / beta
* log ( pParam->HSMHV_vdiffjd * T0 / T2 + 1.0 ) ;
here->HSMHV_exptempd = exp (( here->HSMHV_Tratio - 1.0 ) * model->HSMHV_ctempd ) ;
#ifdef HSMHVEVAL
vbdt_dT = - beta_dT / beta * here->HSMHV_vbdt
+ pParam->HSMHV_njd / beta * pParam->HSMHV_vdiffjd / ( pParam->HSMHV_vdiffjd * T0 / T2 + 1.0 )
* ( T0_dT / T2 - T0 / T2 / T2 * T2_dT ) ; /* Self heating */
#endif
here->HSMHV_jd_nvtm_invd = 1.0 / ( pParam->HSMHV_njd / beta ) ;
here->HSMHV_jd_expcd = exp (here->HSMHV_vbdt * here->HSMHV_jd_nvtm_invd ) ;
#ifdef HSMHVEVAL
exptempd_dT = model->HSMHV_ctempd / model->HSMHV_ktnom * here->HSMHV_exptempd ; /* Self heating */
jd_nvtm_invd_dT = beta_dT / pParam->HSMHV_njd ; /* Self heating */
jd_expcd_dT = here->HSMHV_jd_expcd
* ( vbdt_dT * here->HSMHV_jd_nvtm_invd + here->HSMHV_vbdt * jd_nvtm_invd_dT ) ; /* Self heating */
#endif
/* for substrate-source junction diode. */
js = pParam->HSMHV_js0s
* exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta
+ model->HSMHV_xtis * log_Tratio) / pParam->HSMHV_njs) ;
jssw = pParam->HSMHV_js0sws
* exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta
+ model->HSMHV_xtis * log_Tratio) / model->HSMHV_njsws) ;
js2 = pParam->HSMHV_js0s
* exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta
+ model->HSMHV_xti2s * log_Tratio) / pParam->HSMHV_njs) ;
jssw2 = pParam->HSMHV_js0sws
* exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta
+ model->HSMHV_xti2s * log_Tratio) / model->HSMHV_njsws) ;
#ifdef HSMHVEVAL
T0 = - Eg * beta_dT - Eg_dT * beta ; /* Self heating */
T1 = T0 + model->HSMHV_xtis / TTEMP ; /* Self heating */
T2 = T0 + model->HSMHV_xti2s / TTEMP ; /* Self heating */
js_dT = js * T1 / pParam->HSMHV_njs; /* Self heating */
jssw_dT = jssw * T1/ model->HSMHV_njsws ; /* Self heating */
js2_dT = js2 * T2 / pParam->HSMHV_njs; /* Self heating */
jssw2_dT = jssw2 * T2 / model->HSMHV_njsws; /* Self heating */
#endif
here->HSMHV_isbs = here->HSMHV_as * js + here->HSMHV_ps * jssw ;
here->HSMHV_isbs2 = here->HSMHV_as * js2 + here->HSMHV_ps * jssw2 ;
#ifdef HSMHVEVAL
isbs_dT = here->HSMHV_as * js_dT + here->HSMHV_ps * jssw_dT ; /* Self heating */
isbs2_dT = here->HSMHV_as * js2_dT + here->HSMHV_ps * jssw2_dT ; /* Self heating */
#endif
T0 = here->HSMHV_Tratio * here->HSMHV_Tratio ;
T3 = here->HSMHV_isbs + small ;
#ifdef HSMHVEVAL
T1_dT = 1.0 / model->HSMHV_ktnom ; /* Self heating */
T0_dT = 2.0 * here->HSMHV_Tratio * T1_dT ; /* Self heating */
T3_dT = isbs_dT ; /* Self heating */
#endif
here->HSMHV_vbst = pParam->HSMHV_njs / beta
* log ( pParam->HSMHV_vdiffjs * T0 / T3 + 1.0 ) ;
here->HSMHV_exptemps = exp (( here->HSMHV_Tratio - 1.0 ) * model->HSMHV_ctemps ) ;
#ifdef HSMHVEVAL
vbst_dT = - beta_dT / beta * here->HSMHV_vbst
+ pParam->HSMHV_njs / beta * pParam->HSMHV_vdiffjs / ( pParam->HSMHV_vdiffjs * T0 / T3 + 1.0 )
* ( T0_dT / T3 - T0 / T3 / T3 * T3_dT ) ; /* Self heating */
#endif
here->HSMHV_jd_nvtm_invs = 1.0 / ( pParam->HSMHV_njs / beta ) ;
here->HSMHV_jd_expcs = exp (here->HSMHV_vbst * here->HSMHV_jd_nvtm_invs ) ;
#ifdef HSMHVEVAL
exptemps_dT = model->HSMHV_ctemps / model->HSMHV_ktnom * here->HSMHV_exptemps ; /* Self heating */
jd_nvtm_invs_dT = beta_dT / pParam->HSMHV_njs ; /* Self heating */
jd_expcs_dT = here->HSMHV_jd_expcs
* ( vbst_dT * here->HSMHV_jd_nvtm_invs + here->HSMHV_vbst * jd_nvtm_invs_dT ) ; /* Self heating */
#endif
/* end of HSMHVtemp_eval_dio.h */

View File

@ -1,103 +0,0 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
FILE : hsmhvtemp_eval_rdri.h
DATE : 2014.6.11
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
TTEMP = ckt->CKTtemp;
if ( here->HSMHV_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV_dtemp ; }
TTEMP0 = TTEMP ;
#ifdef HSMHVEVAL
/* Self heating */
TTEMP = TTEMP + deltemp ;
#endif
/* Phonon Scattering (temperature-dependent part) */
T1 = Fn_Pow ( here->HSMHV_Tratio, model->HSMHV_rdrmuetmp ) ;
here->HSMHV_rdrmue = modelMKS->HSMHV_rdrmue / T1 ;
#ifdef HSMHVEVAL
T1_dT = model->HSMHV_rdrmuetmp * Fn_Pow( here->HSMHV_Tratio, model->HSMHV_rdrmuetmp - 1.0 )
/ model->HSMHV_ktnom ;
Mu0_dT = - modelMKS->HSMHV_rdrmue / ( T1 * T1 ) * T1_dT ;
#endif
/* Velocity Temperature Dependence */
T0 = 1.8 + 0.4 * here->HSMHV_Tratio + 0.1 * here->HSMHV_Tratio * here->HSMHV_Tratio - model->HSMHV_rdrvtmp * ( 1.0 - here->HSMHV_Tratio ) ;
#ifdef HSMHVEVAL
T0_dT = 1 / model->HSMHV_ktnom * ( 0.4 + 0.2 * here->HSMHV_Tratio + model->HSMHV_rdrvtmp ) ;
#endif
here->HSMHV_rdrvmax = modelMKS->HSMHV_rdrvmax / T0 ;
#ifdef HSMHVEVAL
Vmax_dT = - modelMKS->HSMHV_rdrvmax / ( T0 * T0 ) * T0_dT ;
#endif
here->HSMHV_rdrcx = model->HSMHV_rdrcx ;
here->HSMHV_rdrcar = model->HSMHV_rdrcar ;
#ifdef HSMHVEVAL
Cx_dT = 0.0 ;
Car_dT = 0.0 ;
#endif
//Toshiba model //
here->HSMHV_rdrbb = model->HSMHV_rdrbb+model->HSMHV_rdrbbtmp*(TTEMP-model->HSMHV_ktnom) ;
#ifdef HSMHVEVAL
Rdrbb_dT = model->HSMHV_rdrbbtmp ;
#endif
/* end of HSMHVtemp_eval_rdri.h */

View File

@ -1,62 +1,20 @@
/***********************************************************************
HiSIM (Hiroshima University STARC IGFET Model)
Copyright (C) 2014 Hiroshima University & STARC
Copyright (C) 2012 Hiroshima University & STARC
MODEL NAME : HiSIM_HV
( VERSION : 2 SUBVERSION : 2 REVISION : 0 )
Model Parameter 'VERSION' : 2.20
( VERSION : 1 SUBVERSION : 2 REVISION : 4 )
Model Parameter VERSION : 1.23
FILE : hsmhvtrunc.c
DATE : 2014.6.11
DATE : 2013.04.30
released by
Hiroshima University &
Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/
/**********************************************************************
The following source code, and all copyrights, trade secrets or other
intellectual property rights in and to the source code in its entirety,
is owned by the Hiroshima University and the STARC organization.
All users need to follow the "HISIM_HV Distribution Statement and
Copyright Notice" attached to HiSIM_HV model.
-----HISIM_HV Distribution Statement and Copyright Notice--------------
Software is distributed as is, completely without warranty or service
support. Hiroshima University or STARC and its employees are not liable
for the condition or performance of the software.
Hiroshima University and STARC own the copyright and grant users a perpetual,
irrevocable, worldwide, non-exclusive, royalty-free license with respect
to the software as set forth below.
Hiroshima University and STARC hereby disclaims all implied warranties.
Hiroshima University and STARC grant the users the right to modify, copy,
and redistribute the software and documentation, both within the user's
organization and externally, subject to the following restrictions
1. The users agree not to charge for Hiroshima University and STARC code
itself but may charge for additions, extensions, or support.
2. In any product based on the software, the users agree to acknowledge
Hiroshima University and STARC that developed the software. This
acknowledgment shall appear in the product documentation.
3. The users agree to reproduce any copyright notice which appears on
the software on any copy or modification of such made available
to others."
Toshimasa Asahara, President, Hiroshima University
Mitiko Miura-Mattausch, Professor, Hiroshima University
Katsuhiro Shimohigashi, President&CEO, STARC
June 2008 (revised October 2011)
*************************************************************************/
#include "ngspice/ngspice.h"
#include "ngspice/cktdefs.h"
#include "hsmhvdef.h"
@ -67,9 +25,10 @@ int HSMHVtrunc(
GENmodel *inModel,
register CKTcircuit *ckt,
double *timeStep)
{
HSMHVmodel *model = (HSMHVmodel*)inModel;
HSMHVinstance *here;
register HSMHVmodel *model = (HSMHVmodel*)inModel;
register HSMHVinstance *here;
#ifdef STEPDEBUG
double debugtemp=0.0 ;
#endif /* STEPDEBUG */

View File

@ -944,9 +944,6 @@
<ClInclude Include="..\src\frontend\completion.h" />
<ClInclude Include="..\src\include\ngspice\complex.h" />
<ClInclude Include="..\src\conf.h" />
<ClInclude Include="..\src\spicelib\devices\hisimhv1\hsmhveval_dep.h" />
<ClInclude Include="..\src\spicelib\devices\hisimhv1\hsmhvtemp_eval_dio.h" />
<ClInclude Include="..\src\spicelib\devices\hisimhv1\hsmhvtemp_eval_rdri.h" />
<ClInclude Include="include\ngspice\config.h" />
<ClInclude Include="..\src\include\ngspice\const.h" />
<ClInclude Include="..\src\include\ngspice\contdefs.h" />
@ -1759,8 +1756,6 @@
<ClCompile Include="..\src\spicelib\analysis\ckttyplk.c" />
<ClCompile Include="..\src\frontend\plotting\clip.c" />
<ClCompile Include="..\src\spicelib\analysis\cluster.c" />
<ClCompile Include="..\src\spicelib\devices\hisimhv1\hsmhveval_dio.c" />
<ClCompile Include="..\src\spicelib\devices\hisimhv1\hsmhveval_rdrift.c" />
<ClCompile Include="..\src\xspice\cm\cm.c" />
<ClCompile Include="..\src\maths\cmaths\cmath1.c" />
<ClCompile Include="..\src\maths\cmaths\cmath2.c" />