correctec model author line in HICUML2 buil-in model

This commit is contained in:
Markus Mueller 2024-06-24 15:29:05 +02:00
parent 9fe87c68e8
commit 53d94d81b5
22 changed files with 4754 additions and 4754 deletions

View File

@ -1,304 +1,304 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
**********/
/*
* This file defines the HICUM data structures that are
* available to the next level(s) up the calling hierarchy
*/
#include "ngspice/ngspice.h"
#include "ngspice/devdefs.h"
#include "hicum2defs.h"
#include "ngspice/suffix.h"
IFparm HICUMpTable[] = { /* parameters */
IOPU("area", HICUM_AREA, IF_REAL, "Area factor"),
IOPU("off", HICUM_OFF, IF_FLAG, "Device initially off"),
IP("ic", HICUM_IC, IF_REALVEC, "Initial condition vector"),
// these are left here for future. Sometimes it is advantageous for debugging if one can set the initial node voltages of all nodes.
// OP("icvb", HICUM_IC_VB, IF_REAL, "Initial B potential"),
// OP("icvc", HICUM_IC_VC, IF_REAL, "Initial C potential"),
// OP("icve", HICUM_IC_VE, IF_REAL, "Initial E potential"),
// OP("icvbi", HICUM_IC_VBi, IF_REAL, "Initial Bi potential"),
// OP("icvbp", HICUM_IC_VBp, IF_REAL, "Initial Bp potential"),
// OP("icvci", HICUM_IC_VCi, IF_REAL, "Initial Ci potential"),
// OP("icvt", HICUM_IC_Vt, IF_REAL, "Initial T potential"),
// OP("icvei", HICUM_IC_VEi, IF_REAL, "Initial Ei potential"),
IOPU("m", HICUM_M, IF_REAL, "Multiplier"),
IOPU("temp", HICUM_TEMP, IF_REAL, "Instance temperature"),
IP("dt", HICUM_DTEMP, IF_REAL, "Instance delta temperature"),
IOPU("tk", HICUM_QUEST_TK, IF_REAL, "Actual device temperature"),
IOPU("dtsh", HICUM_QUEST_DTSH, IF_REAL, "Temperature increase due to self-heating"),
IOPU("it", HICUM_QUEST_IT, IF_REAL, "transfer current"),
OPU("collnode", HICUM_QUEST_COLLNODE, IF_INTEGER, "Number of collector node"),
OPU("basenode", HICUM_QUEST_BASENODE, IF_INTEGER, "Number of base node"),
OPU("emitnode", HICUM_QUEST_EMITNODE, IF_INTEGER, "Number of emitter node"),
OPU("subsnode", HICUM_QUEST_SUBSNODE, IF_INTEGER, "Number of substrate node"),
OPU("tempnode", HICUM_QUEST_TEMPNODE, IF_INTEGER, "Number of temperature node"),
OPU("collCInode", HICUM_QUEST_COLLCINODE, IF_INTEGER, "Internal collector node"),
OPU("baseBPnode", HICUM_QUEST_BASEBPNODE, IF_INTEGER, "External base node"),
OPU("baseBInode", HICUM_QUEST_BASEBINODE, IF_INTEGER, "Internal base node"),
OPU("emitEInode", HICUM_QUEST_EMITEINODE, IF_INTEGER, "Internal emitter node"),
OPU("subsSInode", HICUM_QUEST_SUBSSINODE, IF_INTEGER, "Internal substrate node"),
OPU("xfnode", HICUM_QUEST_XFNODE, IF_INTEGER, "Internal phase node xf"),
OPU("xf1node", HICUM_QUEST_XF1NODE, IF_INTEGER, "Internal phase node xf1"),
OPU("xf2node", HICUM_QUEST_XF2NODE, IF_INTEGER, "Internal phase node xf2"),
/* voltages */
OP("vbe", HICUM_QUEST_VBE, IF_REAL, "External BE voltage"),
OP("vbbp", HICUM_QUEST_VBBP, IF_REAL, "BBP voltage"),
OP("vbc", HICUM_QUEST_VBC, IF_REAL, "External BC voltage"),
OP("vce", HICUM_QUEST_VCE, IF_REAL, "External CE voltage"),
OP("vsc", HICUM_QUEST_VSC, IF_REAL, "External SC voltage"),
OP("vbiei", HICUM_QUEST_VBIEI, IF_REAL, "Internal BE voltage"),
OP("vbpbi", HICUM_QUEST_VBPBI, IF_REAL, "Peripheral Base to internal Base voltage"),
OP("vbici", HICUM_QUEST_VBICI, IF_REAL, "Internal BC voltage"),
OP("vciei", HICUM_QUEST_VCIEI, IF_REAL, "Internal CE voltage"),
/* currents */
OP("ic", HICUM_QUEST_CC, IF_REAL, "Collector current"),
OP("iavl", HICUM_QUEST_CAVL, IF_REAL, "Avalanche current"),
OP("ib", HICUM_QUEST_CB, IF_REAL, "Base current"),
OP("ibei", HICUM_QUEST_CBEI, IF_REAL, "Intenral Base Emitter current"),
OP("ibci", HICUM_QUEST_CBCI, IF_REAL, "Internal Base Collector current"),
OP("ie", HICUM_QUEST_CE, IF_REAL, "Emitter current"),
OP("is", HICUM_QUEST_CS, IF_REAL, "Substrate current"),
/* resistances */
OP("rcx_t", HICUM_QUEST_RCX_T, IF_REAL, "External (saturated) collector series resistance"),
OP("re_t", HICUM_QUEST_RE_T, IF_REAL, "Emitter series resistance"),
OP("rbi", HICUM_QUEST_RBI, IF_REAL, "Internal base resistance as calculated in the model"),
OP("rb", HICUM_QUEST_RB, IF_REAL, "Total base resistance as calculated in the model"),
/* transconductances and capacitances */
OP("betadc", HICUM_QUEST_BETADC, IF_REAL, "Common emitter forward current gain"),
OP("gmi", HICUM_QUEST_GMI, IF_REAL, "Internal transconductance"),
OP("gms", HICUM_QUEST_GMS, IF_REAL, "Transconductance of the parasitic substrate PNP"),
OP("rpii", HICUM_QUEST_RPII, IF_REAL, "Internal base-emitter (input) resistance"),
OP("rpix", HICUM_QUEST_RPIX, IF_REAL, "External base-emitter (input) resistance"),
OP("rmui", HICUM_QUEST_RMUI, IF_REAL, "Internal feedback resistance"),
OP("rmux", HICUM_QUEST_RMUX, IF_REAL, "External feedback resistance"),
OP("roi", HICUM_QUEST_ROI, IF_REAL, "Output resistance"),
OP("cpii", HICUM_QUEST_CPII, IF_REAL, "Total internal BE capacitance"),
OP("cpix", HICUM_QUEST_CPIX, IF_REAL, "Total external BE capacitance"),
OP("cmui", HICUM_QUEST_CMUI, IF_REAL, "Total internal BC capacitance"),
OP("cmux", HICUM_QUEST_CMUX, IF_REAL, "Total external BC capacitance"),
OP("ccs", HICUM_QUEST_CCS, IF_REAL, "CS junction capacitance"),
OP("betaac", HICUM_QUEST_BETAAC, IF_REAL, "Small signal current gain"),
OP("crbi", HICUM_QUEST_CRBI, IF_REAL, "Shunt capacitance across RBI as calculated in the model"),
/* transit time */
OP("tf", HICUM_QUEST_TF, IF_REAL, "Forward transit time"),
OP("ft", HICUM_QUEST_FT, IF_REAL, "Transit frequency"),
OP("ick", HICUM_QUEST_ICK, IF_REAL, "Transit frequency"),
/* power */
OP("p", HICUM_QUEST_POWER, IF_REAL, "Power dissipation")
};
IFparm HICUMmPTable[] = { /* model parameters */
//Circuit simulator specific parameters
IOP("type", HICUM_MOD_TYPE, IF_STRING, "For transistor type NPN(+1) or PNP (-1)"),
IOPU("npn", HICUM_MOD_NPN, IF_FLAG, "NPN type device"),
IOPU("pnp", HICUM_MOD_PNP, IF_FLAG, "PNP type device"),
IOP("tnom", HICUM_MOD_TNOM, IF_REAL, "Temperature at which parameters are specified"),
IOPR("tref", HICUM_MOD_TNOM, IF_REAL, "Temperature at which parameters are specified"),
IOP("version", HICUM_MOD_VERSION, IF_STRING, " parameter for model version"),
//Transfer current
IOP("c10", HICUM_MOD_C10 , IF_REAL, "GICCR constant"),
IOP("qp0", HICUM_MOD_QP0 , IF_REAL, "Zero-bias hole charge"),
IOP("ich", HICUM_MOD_ICH , IF_REAL, "High-current correction for 2D and 3D effects"), //`0' signifies infinity
IOP("hf0", HICUM_MOD_HF0 , IF_REAL, "Weight factor for the low current minority charge"),
IOP("hfe", HICUM_MOD_HFE , IF_REAL, "Emitter minority charge weighting factor in HBTs"),
IOP("hfc", HICUM_MOD_HFC , IF_REAL, "Collector minority charge weighting factor in HBTs"),
IOP("hjei", HICUM_MOD_HJEI , IF_REAL, "B-E depletion charge weighting factor in HBTs"),
IOP("ahjei", HICUM_MOD_AHJEI, IF_REAL, "Parameter describing the slope of hjEi(VBE)"),
IOP("rhjei", HICUM_MOD_RHJEI, IF_REAL, "Smoothing parameter for hjEi(VBE) at high voltage"),
IOP("hjci", HICUM_MOD_HJCI , IF_REAL, "B-C depletion charge weighting factor in HBTs"),
//Base-Emitter diode currents
IOP("ibeis", HICUM_MOD_IBEIS, IF_REAL, "Internal B-E saturation current"),
IOP("mbei", HICUM_MOD_MBEI , IF_REAL, "Internal B-E current ideality factor"),
IOP("ireis", HICUM_MOD_IREIS, IF_REAL, "Internal B-E recombination saturation current"),
IOP("mrei", HICUM_MOD_MREI , IF_REAL, "Internal B-E recombination current ideality factor"),
IOP("ibeps", HICUM_MOD_IBEPS, IF_REAL, "Peripheral B-E saturation current"),
IOP("mbep", HICUM_MOD_MBEP , IF_REAL, "Peripheral B-E current ideality factor"),
IOP("ireps", HICUM_MOD_IREPS, IF_REAL, "Peripheral B-E recombination saturation current"),
IOP("mrep", HICUM_MOD_MREP , IF_REAL, "Peripheral B-E recombination current ideality factor"),
IOP("mcf", HICUM_MOD_MCF , IF_REAL, "Non-ideality factor for III-V HBTs"),
//Transit time for excess recombination current at b-c barrier
IOP("tbhrec", HICUM_MOD_TBHREC, IF_REAL, "Base current recombination time constant at B-C barrier for high forward injection"),
//Base-Collector diode currents
IOP("ibcis", HICUM_MOD_IBCIS, IF_REAL, "Internal B-C saturation current"),
IOP("mbci", HICUM_MOD_MBCI , IF_REAL, "Internal B-C current ideality factor"),
IOP("ibcxs", HICUM_MOD_IBCXS, IF_REAL, "External B-C saturation current"),
IOP("mbcx", HICUM_MOD_MBCX , IF_REAL, "External B-C current ideality factor"),
//Base-Emitter tunneling current
IOP("ibets", HICUM_MOD_IBETS, IF_REAL, "B-E tunneling saturation current"),
IOP("abet", HICUM_MOD_ABET, IF_REAL, "Exponent factor for tunneling current"),
IOP("tunode",HICUM_MOD_TUNODE, IF_INTEGER, "Specifies the base node connection for the tunneling current"), // =1 signifies perimeter node
//Base-Collector avalanche current
IOP("favl", HICUM_MOD_FAVL , IF_REAL, "Avalanche current factor"),
IOP("qavl", HICUM_MOD_QAVL , IF_REAL, "Exponent factor for avalanche current"),
IOP("kavl", HICUM_MOD_KAVL , IF_REAL, "Flag/factor for turning strong avalanche on"),
IOP("alfav", HICUM_MOD_ALFAV, IF_REAL, "Relative TC for FAVL"),
IOP("alqav", HICUM_MOD_ALQAV, IF_REAL, "Relative TC for QAVL"),
IOP("alkav", HICUM_MOD_ALKAV, IF_REAL, "Relative TC for KAVL"),
//Series resistances
IOP("rbi0", HICUM_MOD_RBI0 , IF_REAL, "Zero bias internal base resistance"),
IOP("rbx", HICUM_MOD_RBX , IF_REAL, "External base series resistance"),
IOP("fgeo", HICUM_MOD_FGEO , IF_REAL, "Factor for geometry dependence of emitter current crowding"),
IOP("fdqr0", HICUM_MOD_FDQR0, IF_REAL, "Correction factor for modulation by B-E and B-C space charge layer"),
IOP("fcrbi", HICUM_MOD_FCRBI, IF_REAL, "Ratio of HF shunt to total internal capacitance (lateral NQS effect)"),
IOP("fqi", HICUM_MOD_FQI , IF_REAL, "Ration of internal to total minority charge"),
IOP("re", HICUM_MOD_RE , IF_REAL, "Emitter series resistance"),
IOP("rcx", HICUM_MOD_RCX , IF_REAL, "External collector series resistance"),
//Substrate transistor
IOP("itss", HICUM_MOD_ITSS, IF_REAL, "Substrate transistor transfer saturation current"),
IOP("msf", HICUM_MOD_MSF , IF_REAL, "Forward ideality factor of substrate transfer current"),
IOP("iscs", HICUM_MOD_ISCS, IF_REAL, "C-S diode saturation current"),
IOP("msc", HICUM_MOD_MSC , IF_REAL, "Ideality factor of C-S diode current"),
IOP("tsf", HICUM_MOD_TSF , IF_REAL, "Transit time for forward operation of substrate transistor"),
//Intra-device substrate coupling
IOP("rsu", HICUM_MOD_RSU, IF_REAL, "Substrate series resistance"),
IOP("csu", HICUM_MOD_CSU, IF_REAL, "Substrate shunt capacitance"),
//Depletion Capacitances
IOP("cjei0", HICUM_MOD_CJEI0 , IF_REAL, "Internal B-E zero-bias depletion capacitance"),
IOP("vdei", HICUM_MOD_VDEI , IF_REAL, "Internal B-E built-in potential"),
IOP("zei", HICUM_MOD_ZEI , IF_REAL, "Internal B-E grading coefficient"),
IOP("ajei", HICUM_MOD_AJEI , IF_REAL, "Ratio of maximum to zero-bias value of internal B-E capacitance"),
IOPR("aljei", HICUM_MOD_AJEI , IF_REAL, "Ratio of maximum to zero-bias value of internal B-E capacitance"),
IOP("cjep0", HICUM_MOD_CJEP0 , IF_REAL, "Peripheral B-E zero-bias depletion capacitance"),
IOP("vdep", HICUM_MOD_VDEP , IF_REAL, "Peripheral B-E built-in potential"),
IOP("zep", HICUM_MOD_ZEP , IF_REAL, "Peripheral B-E grading coefficient"),
IOP("ajep", HICUM_MOD_AJEP , IF_REAL, "Ratio of maximum to zero-bias value of peripheral B-E capacitance"),
IOPR("aljep", HICUM_MOD_AJEP , IF_REAL, "Ratio of maximum to zero-bias value of peripheral B-E capacitance"),
IOP("cjci0", HICUM_MOD_CJCI0 , IF_REAL, "Internal B-C zero-bias depletion capacitance"),
IOP("vdci", HICUM_MOD_VDCI , IF_REAL, "Internal B-C built-in potential"),
IOP("zci", HICUM_MOD_ZCI , IF_REAL, "Internal B-C grading coefficient"),
IOP("vptci", HICUM_MOD_VPTCI , IF_REAL, "Internal B-C punch-through voltage"),
IOP("cjcx0", HICUM_MOD_CJCX0 , IF_REAL, "External B-C zero-bias depletion capacitance"),
IOP("vdcx", HICUM_MOD_VDCX , IF_REAL, "External B-C built-in potential"),
IOP("zcx", HICUM_MOD_ZCX , IF_REAL, "External B-C grading coefficient"),
IOP("vptcx", HICUM_MOD_VPTCX , IF_REAL, "External B-C punch-through voltage"),
IOP("fbcpar", HICUM_MOD_FBCPAR, IF_REAL, "Partitioning factor of parasitic B-C cap"),
IOPR("fbc", HICUM_MOD_FBCPAR, IF_REAL, "Partitioning factor of parasitic B-C cap"),
IOP("fbepar", HICUM_MOD_FBEPAR, IF_REAL, "Partitioning factor of parasitic B-E cap"),
IOPR("fbe", HICUM_MOD_FBEPAR, IF_REAL, "Partitioning factor of parasitic B-E cap"),
IOP("cjs0", HICUM_MOD_CJS0 , IF_REAL, "C-S zero-bias depletion capacitance"),
IOP("vds", HICUM_MOD_VDS , IF_REAL, "C-S built-in potential"),
IOP("zs", HICUM_MOD_ZS , IF_REAL, "C-S grading coefficient"),
IOP("vpts", HICUM_MOD_VPTS , IF_REAL, "C-S punch-through voltage"),
IOP("cscp0", HICUM_MOD_CSCP0 , IF_REAL, "Perimeter S-C zero-bias depletion capacitance"),
IOP("vdsp", HICUM_MOD_VDSP , IF_REAL, "Perimeter S-C built-in potential"),
IOP("zsp", HICUM_MOD_ZSP , IF_REAL, "Perimeter S-C grading coefficient"),
IOP("vptsp", HICUM_MOD_VPTSP , IF_REAL, "Perimeter S-C punch-through voltage"),
//Diffusion Capacitances
IOP("t0", HICUM_MOD_T0 , IF_REAL, "Low current forward transit time at VBC=0V"),
IOP("dt0h", HICUM_MOD_DT0H , IF_REAL, "Time constant for base and B-C space charge layer width modulation"),
IOP("tbvl", HICUM_MOD_TBVL , IF_REAL, "Time constant for modeling carrier jam at low VCE"),
IOP("tef0", HICUM_MOD_TEF0 , IF_REAL, "Neutral emitter storage time"),
IOP("gtfe", HICUM_MOD_GTFE , IF_REAL, "Exponent factor for current dependence of neutral emitter storage time"),
IOP("thcs", HICUM_MOD_THCS , IF_REAL, "Saturation time constant at high current densities"),
IOP("ahc", HICUM_MOD_AHC , IF_REAL, "Smoothing factor for current dependence of base and collector transit time"),
IOPR("alhc", HICUM_MOD_AHC , IF_REAL, "Smoothing factor for current dependence of base and collector transit time"),
IOP("fthc", HICUM_MOD_FTHC , IF_REAL, "Partitioning factor for base and collector portion"),
IOP("rci0", HICUM_MOD_RCI0 , IF_REAL, "Internal collector resistance at low electric field"),
IOP("vlim", HICUM_MOD_VLIM , IF_REAL, "Voltage separating ohmic and saturation velocity regime"),
IOP("vces", HICUM_MOD_VCES , IF_REAL, "Internal C-E saturation voltage"),
IOP("vpt", HICUM_MOD_VPT , IF_REAL, "Collector punch-through voltage"), // `0' signifies infinity
IOP("aick", HICUM_MOD_AICK , IF_REAL, "Smoothing term for ICK"),
IOP("delck", HICUM_MOD_DELCK, IF_REAL, "Fitting factor for critical current"),
IOP("tr", HICUM_MOD_TR , IF_REAL, "Storage time for inverse operation"),
IOP("vcbar", HICUM_MOD_VCBAR, IF_REAL, "Barrier voltage"),
IOP("icbar", HICUM_MOD_ICBAR, IF_REAL, "Normalization parameter"),
IOP("acbar", HICUM_MOD_ACBAR, IF_REAL, "Smoothing parameter for barrier voltage"),
//Isolation Capacitances
IOP("cbepar", HICUM_MOD_CBEPAR, IF_REAL, "Total parasitic B-E capacitance"),
IOPR("ceox", HICUM_MOD_CBEPAR, IF_REAL, "Total parasitic B-E capacitance"),
IOP("cbcpar", HICUM_MOD_CBCPAR, IF_REAL, "Total parasitic B-C capacitance"),
IOPR("ccox", HICUM_MOD_CBCPAR, IF_REAL, "Total parasitic B-C capacitance"),
//Non-quasi-static Effect
IOP("alqf", HICUM_MOD_ALQF, IF_REAL, "Factor for additional delay time of minority charge"),
IOP("alit", HICUM_MOD_ALIT, IF_REAL, "Factor for additional delay time of transfer current"),
IOP("flnqs", HICUM_MOD_FLNQS, IF_INTEGER, "Flag for turning on and off of vertical NQS effect"),
//Noise
IOP("kf", HICUM_MOD_KF , IF_REAL, "Flicker noise coefficient"),
IOP("af", HICUM_MOD_AF , IF_REAL, "Flicker noise exponent factor"),
IOP("cfbe", HICUM_MOD_CFBE , IF_INTEGER, "Flag for determining where to tag the flicker noise source"),
IOP("flcono", HICUM_MOD_FLCONO, IF_INTEGER, "Flag for turning on and off of correlated noise implementation"),
IOP("kfre", HICUM_MOD_KFRE , IF_REAL, "Emitter resistance flicker noise coefficient"),
IOP("afre", HICUM_MOD_AFRE , IF_REAL, "Emitter resistance flicker noise exponent factor"),
//Lateral Geometry Scaling (at high current densities)
IOP("latb", HICUM_MOD_LATB, IF_REAL, "Scaling factor for collector minority charge in direction of emitter width"),
IOP("latl", HICUM_MOD_LATL, IF_REAL, "Scaling factor for collector minority charge in direction of emitter length"),
//Temperature dependence
IOP("vgb", HICUM_MOD_VGB , IF_REAL, "Bandgap voltage extrapolated to 0 K"),
IOP("alt0", HICUM_MOD_ALT0 , IF_REAL, "First order relative TC of parameter T0"),
IOP("kt0", HICUM_MOD_KT0 , IF_REAL, "Second order relative TC of parameter T0"),
IOP("zetaci", HICUM_MOD_ZETACI , IF_REAL, "Temperature exponent for RCI0"),
IOP("alvs", HICUM_MOD_ALVS , IF_REAL, "Relative TC of saturation drift velocity"),
IOP("alces", HICUM_MOD_ALCES , IF_REAL, "Relative TC of VCES"),
IOP("zetarbi", HICUM_MOD_ZETARBI , IF_REAL, "Temperature exponent of internal base resistance"),
IOP("zetarbx", HICUM_MOD_ZETARBX , IF_REAL, "Temperature exponent of external base resistance"),
IOP("zetarcx", HICUM_MOD_ZETARCX , IF_REAL, "Temperature exponent of external collector resistance"),
IOP("zetare", HICUM_MOD_ZETARE , IF_REAL, "Temperature exponent of emitter resistance"),
IOP("zetacx", HICUM_MOD_ZETACX , IF_REAL, "Temperature exponent of mobility in substrate transistor transit time"),
IOP("vge", HICUM_MOD_VGE , IF_REAL, "Effective emitter bandgap voltage"),
IOP("vgc", HICUM_MOD_VGC , IF_REAL, "Effective collector bandgap voltage"),
IOP("vgs", HICUM_MOD_VGS , IF_REAL, "Effective substrate bandgap voltage"),
IOP("f1vg", HICUM_MOD_F1VG , IF_REAL, "Coefficient K1 in T-dependent band-gap equation"),
IOP("f2vg", HICUM_MOD_F2VG , IF_REAL, "Coefficient K2 in T-dependent band-gap equation"),
IOP("zetact", HICUM_MOD_ZETACT , IF_REAL, "Exponent coefficient in transfer current temperature dependence"),
IOP("zetabet", HICUM_MOD_ZETABET , IF_REAL, "Exponent coefficient in B-E junction current temperature dependence"),
IOP("alb", HICUM_MOD_ALB , IF_REAL, "Relative TC of forward current gain for V2.1 model"),
IOP("dvgbe", HICUM_MOD_DVGBE , IF_REAL, "Bandgap difference between B and B-E junction used for hjEi0 and hf0"),
IOP("zetahjei", HICUM_MOD_ZETAHJEI, IF_REAL, "Temperature coefficient for ahjEi"),
IOP("zetavgbe", HICUM_MOD_ZETAVGBE, IF_REAL, "Temperature coefficient for hjEi0"),
//Self-Heating
IOP("flsh", HICUM_MOD_FLSH , IF_INTEGER, "Flag for turning on and off self-heating effect"),
IOP("rth", HICUM_MOD_RTH , IF_REAL, "Thermal resistance"),
IOP("zetarth", HICUM_MOD_ZETARTH, IF_REAL, "Temperature coefficient for Rth"),
IOP("alrth", HICUM_MOD_ALRTH , IF_REAL, "First order relative TC of parameter Rth"),
IOP("cth", HICUM_MOD_CTH , IF_REAL, "Thermal capacitance"),
//Compatibility with V2.1
IOP("flcomp", HICUM_MOD_FLCOMP, IF_REAL, "Flag for compatibility with v2.1 model (0=v2.1)"),
IOP("vbe_max", HICUM_MOD_VBE_MAX, IF_REAL, "maximum voltage B-E junction"),
IOP("vbc_max", HICUM_MOD_VBC_MAX, IF_REAL, "maximum voltage B-C junction"),
IOP("vce_max", HICUM_MOD_VCE_MAX, IF_REAL, "maximum voltage C-E branch")
};
char *HICUMnames[] = {
"collector",
"base",
"emitter",
"substrate",
"temp"
};
int HICUMnSize = NUMELEMS(HICUMnames);
int HICUMpTSize = NUMELEMS(HICUMpTable);
int HICUMmPTSize = NUMELEMS(HICUMmPTable);
int HICUMiSize = sizeof(HICUMinstance);
int HICUMmSize = sizeof(HICUMmodel);
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
/*
* This file defines the HICUM data structures that are
* available to the next level(s) up the calling hierarchy
*/
#include "ngspice/ngspice.h"
#include "ngspice/devdefs.h"
#include "hicum2defs.h"
#include "ngspice/suffix.h"
IFparm HICUMpTable[] = { /* parameters */
IOPU("area", HICUM_AREA, IF_REAL, "Area factor"),
IOPU("off", HICUM_OFF, IF_FLAG, "Device initially off"),
IP("ic", HICUM_IC, IF_REALVEC, "Initial condition vector"),
// these are left here for future. Sometimes it is advantageous for debugging if one can set the initial node voltages of all nodes.
// OP("icvb", HICUM_IC_VB, IF_REAL, "Initial B potential"),
// OP("icvc", HICUM_IC_VC, IF_REAL, "Initial C potential"),
// OP("icve", HICUM_IC_VE, IF_REAL, "Initial E potential"),
// OP("icvbi", HICUM_IC_VBi, IF_REAL, "Initial Bi potential"),
// OP("icvbp", HICUM_IC_VBp, IF_REAL, "Initial Bp potential"),
// OP("icvci", HICUM_IC_VCi, IF_REAL, "Initial Ci potential"),
// OP("icvt", HICUM_IC_Vt, IF_REAL, "Initial T potential"),
// OP("icvei", HICUM_IC_VEi, IF_REAL, "Initial Ei potential"),
IOPU("m", HICUM_M, IF_REAL, "Multiplier"),
IOPU("temp", HICUM_TEMP, IF_REAL, "Instance temperature"),
IP("dt", HICUM_DTEMP, IF_REAL, "Instance delta temperature"),
IOPU("tk", HICUM_QUEST_TK, IF_REAL, "Actual device temperature"),
IOPU("dtsh", HICUM_QUEST_DTSH, IF_REAL, "Temperature increase due to self-heating"),
IOPU("it", HICUM_QUEST_IT, IF_REAL, "transfer current"),
OPU("collnode", HICUM_QUEST_COLLNODE, IF_INTEGER, "Number of collector node"),
OPU("basenode", HICUM_QUEST_BASENODE, IF_INTEGER, "Number of base node"),
OPU("emitnode", HICUM_QUEST_EMITNODE, IF_INTEGER, "Number of emitter node"),
OPU("subsnode", HICUM_QUEST_SUBSNODE, IF_INTEGER, "Number of substrate node"),
OPU("tempnode", HICUM_QUEST_TEMPNODE, IF_INTEGER, "Number of temperature node"),
OPU("collCInode", HICUM_QUEST_COLLCINODE, IF_INTEGER, "Internal collector node"),
OPU("baseBPnode", HICUM_QUEST_BASEBPNODE, IF_INTEGER, "External base node"),
OPU("baseBInode", HICUM_QUEST_BASEBINODE, IF_INTEGER, "Internal base node"),
OPU("emitEInode", HICUM_QUEST_EMITEINODE, IF_INTEGER, "Internal emitter node"),
OPU("subsSInode", HICUM_QUEST_SUBSSINODE, IF_INTEGER, "Internal substrate node"),
OPU("xfnode", HICUM_QUEST_XFNODE, IF_INTEGER, "Internal phase node xf"),
OPU("xf1node", HICUM_QUEST_XF1NODE, IF_INTEGER, "Internal phase node xf1"),
OPU("xf2node", HICUM_QUEST_XF2NODE, IF_INTEGER, "Internal phase node xf2"),
/* voltages */
OP("vbe", HICUM_QUEST_VBE, IF_REAL, "External BE voltage"),
OP("vbbp", HICUM_QUEST_VBBP, IF_REAL, "BBP voltage"),
OP("vbc", HICUM_QUEST_VBC, IF_REAL, "External BC voltage"),
OP("vce", HICUM_QUEST_VCE, IF_REAL, "External CE voltage"),
OP("vsc", HICUM_QUEST_VSC, IF_REAL, "External SC voltage"),
OP("vbiei", HICUM_QUEST_VBIEI, IF_REAL, "Internal BE voltage"),
OP("vbpbi", HICUM_QUEST_VBPBI, IF_REAL, "Peripheral Base to internal Base voltage"),
OP("vbici", HICUM_QUEST_VBICI, IF_REAL, "Internal BC voltage"),
OP("vciei", HICUM_QUEST_VCIEI, IF_REAL, "Internal CE voltage"),
/* currents */
OP("ic", HICUM_QUEST_CC, IF_REAL, "Collector current"),
OP("iavl", HICUM_QUEST_CAVL, IF_REAL, "Avalanche current"),
OP("ib", HICUM_QUEST_CB, IF_REAL, "Base current"),
OP("ibei", HICUM_QUEST_CBEI, IF_REAL, "Intenral Base Emitter current"),
OP("ibci", HICUM_QUEST_CBCI, IF_REAL, "Internal Base Collector current"),
OP("ie", HICUM_QUEST_CE, IF_REAL, "Emitter current"),
OP("is", HICUM_QUEST_CS, IF_REAL, "Substrate current"),
/* resistances */
OP("rcx_t", HICUM_QUEST_RCX_T, IF_REAL, "External (saturated) collector series resistance"),
OP("re_t", HICUM_QUEST_RE_T, IF_REAL, "Emitter series resistance"),
OP("rbi", HICUM_QUEST_RBI, IF_REAL, "Internal base resistance as calculated in the model"),
OP("rb", HICUM_QUEST_RB, IF_REAL, "Total base resistance as calculated in the model"),
/* transconductances and capacitances */
OP("betadc", HICUM_QUEST_BETADC, IF_REAL, "Common emitter forward current gain"),
OP("gmi", HICUM_QUEST_GMI, IF_REAL, "Internal transconductance"),
OP("gms", HICUM_QUEST_GMS, IF_REAL, "Transconductance of the parasitic substrate PNP"),
OP("rpii", HICUM_QUEST_RPII, IF_REAL, "Internal base-emitter (input) resistance"),
OP("rpix", HICUM_QUEST_RPIX, IF_REAL, "External base-emitter (input) resistance"),
OP("rmui", HICUM_QUEST_RMUI, IF_REAL, "Internal feedback resistance"),
OP("rmux", HICUM_QUEST_RMUX, IF_REAL, "External feedback resistance"),
OP("roi", HICUM_QUEST_ROI, IF_REAL, "Output resistance"),
OP("cpii", HICUM_QUEST_CPII, IF_REAL, "Total internal BE capacitance"),
OP("cpix", HICUM_QUEST_CPIX, IF_REAL, "Total external BE capacitance"),
OP("cmui", HICUM_QUEST_CMUI, IF_REAL, "Total internal BC capacitance"),
OP("cmux", HICUM_QUEST_CMUX, IF_REAL, "Total external BC capacitance"),
OP("ccs", HICUM_QUEST_CCS, IF_REAL, "CS junction capacitance"),
OP("betaac", HICUM_QUEST_BETAAC, IF_REAL, "Small signal current gain"),
OP("crbi", HICUM_QUEST_CRBI, IF_REAL, "Shunt capacitance across RBI as calculated in the model"),
/* transit time */
OP("tf", HICUM_QUEST_TF, IF_REAL, "Forward transit time"),
OP("ft", HICUM_QUEST_FT, IF_REAL, "Transit frequency"),
OP("ick", HICUM_QUEST_ICK, IF_REAL, "Transit frequency"),
/* power */
OP("p", HICUM_QUEST_POWER, IF_REAL, "Power dissipation")
};
IFparm HICUMmPTable[] = { /* model parameters */
//Circuit simulator specific parameters
IOP("type", HICUM_MOD_TYPE, IF_STRING, "For transistor type NPN(+1) or PNP (-1)"),
IOPU("npn", HICUM_MOD_NPN, IF_FLAG, "NPN type device"),
IOPU("pnp", HICUM_MOD_PNP, IF_FLAG, "PNP type device"),
IOP("tnom", HICUM_MOD_TNOM, IF_REAL, "Temperature at which parameters are specified"),
IOPR("tref", HICUM_MOD_TNOM, IF_REAL, "Temperature at which parameters are specified"),
IOP("version", HICUM_MOD_VERSION, IF_STRING, " parameter for model version"),
//Transfer current
IOP("c10", HICUM_MOD_C10 , IF_REAL, "GICCR constant"),
IOP("qp0", HICUM_MOD_QP0 , IF_REAL, "Zero-bias hole charge"),
IOP("ich", HICUM_MOD_ICH , IF_REAL, "High-current correction for 2D and 3D effects"), //`0' signifies infinity
IOP("hf0", HICUM_MOD_HF0 , IF_REAL, "Weight factor for the low current minority charge"),
IOP("hfe", HICUM_MOD_HFE , IF_REAL, "Emitter minority charge weighting factor in HBTs"),
IOP("hfc", HICUM_MOD_HFC , IF_REAL, "Collector minority charge weighting factor in HBTs"),
IOP("hjei", HICUM_MOD_HJEI , IF_REAL, "B-E depletion charge weighting factor in HBTs"),
IOP("ahjei", HICUM_MOD_AHJEI, IF_REAL, "Parameter describing the slope of hjEi(VBE)"),
IOP("rhjei", HICUM_MOD_RHJEI, IF_REAL, "Smoothing parameter for hjEi(VBE) at high voltage"),
IOP("hjci", HICUM_MOD_HJCI , IF_REAL, "B-C depletion charge weighting factor in HBTs"),
//Base-Emitter diode currents
IOP("ibeis", HICUM_MOD_IBEIS, IF_REAL, "Internal B-E saturation current"),
IOP("mbei", HICUM_MOD_MBEI , IF_REAL, "Internal B-E current ideality factor"),
IOP("ireis", HICUM_MOD_IREIS, IF_REAL, "Internal B-E recombination saturation current"),
IOP("mrei", HICUM_MOD_MREI , IF_REAL, "Internal B-E recombination current ideality factor"),
IOP("ibeps", HICUM_MOD_IBEPS, IF_REAL, "Peripheral B-E saturation current"),
IOP("mbep", HICUM_MOD_MBEP , IF_REAL, "Peripheral B-E current ideality factor"),
IOP("ireps", HICUM_MOD_IREPS, IF_REAL, "Peripheral B-E recombination saturation current"),
IOP("mrep", HICUM_MOD_MREP , IF_REAL, "Peripheral B-E recombination current ideality factor"),
IOP("mcf", HICUM_MOD_MCF , IF_REAL, "Non-ideality factor for III-V HBTs"),
//Transit time for excess recombination current at b-c barrier
IOP("tbhrec", HICUM_MOD_TBHREC, IF_REAL, "Base current recombination time constant at B-C barrier for high forward injection"),
//Base-Collector diode currents
IOP("ibcis", HICUM_MOD_IBCIS, IF_REAL, "Internal B-C saturation current"),
IOP("mbci", HICUM_MOD_MBCI , IF_REAL, "Internal B-C current ideality factor"),
IOP("ibcxs", HICUM_MOD_IBCXS, IF_REAL, "External B-C saturation current"),
IOP("mbcx", HICUM_MOD_MBCX , IF_REAL, "External B-C current ideality factor"),
//Base-Emitter tunneling current
IOP("ibets", HICUM_MOD_IBETS, IF_REAL, "B-E tunneling saturation current"),
IOP("abet", HICUM_MOD_ABET, IF_REAL, "Exponent factor for tunneling current"),
IOP("tunode",HICUM_MOD_TUNODE, IF_INTEGER, "Specifies the base node connection for the tunneling current"), // =1 signifies perimeter node
//Base-Collector avalanche current
IOP("favl", HICUM_MOD_FAVL , IF_REAL, "Avalanche current factor"),
IOP("qavl", HICUM_MOD_QAVL , IF_REAL, "Exponent factor for avalanche current"),
IOP("kavl", HICUM_MOD_KAVL , IF_REAL, "Flag/factor for turning strong avalanche on"),
IOP("alfav", HICUM_MOD_ALFAV, IF_REAL, "Relative TC for FAVL"),
IOP("alqav", HICUM_MOD_ALQAV, IF_REAL, "Relative TC for QAVL"),
IOP("alkav", HICUM_MOD_ALKAV, IF_REAL, "Relative TC for KAVL"),
//Series resistances
IOP("rbi0", HICUM_MOD_RBI0 , IF_REAL, "Zero bias internal base resistance"),
IOP("rbx", HICUM_MOD_RBX , IF_REAL, "External base series resistance"),
IOP("fgeo", HICUM_MOD_FGEO , IF_REAL, "Factor for geometry dependence of emitter current crowding"),
IOP("fdqr0", HICUM_MOD_FDQR0, IF_REAL, "Correction factor for modulation by B-E and B-C space charge layer"),
IOP("fcrbi", HICUM_MOD_FCRBI, IF_REAL, "Ratio of HF shunt to total internal capacitance (lateral NQS effect)"),
IOP("fqi", HICUM_MOD_FQI , IF_REAL, "Ration of internal to total minority charge"),
IOP("re", HICUM_MOD_RE , IF_REAL, "Emitter series resistance"),
IOP("rcx", HICUM_MOD_RCX , IF_REAL, "External collector series resistance"),
//Substrate transistor
IOP("itss", HICUM_MOD_ITSS, IF_REAL, "Substrate transistor transfer saturation current"),
IOP("msf", HICUM_MOD_MSF , IF_REAL, "Forward ideality factor of substrate transfer current"),
IOP("iscs", HICUM_MOD_ISCS, IF_REAL, "C-S diode saturation current"),
IOP("msc", HICUM_MOD_MSC , IF_REAL, "Ideality factor of C-S diode current"),
IOP("tsf", HICUM_MOD_TSF , IF_REAL, "Transit time for forward operation of substrate transistor"),
//Intra-device substrate coupling
IOP("rsu", HICUM_MOD_RSU, IF_REAL, "Substrate series resistance"),
IOP("csu", HICUM_MOD_CSU, IF_REAL, "Substrate shunt capacitance"),
//Depletion Capacitances
IOP("cjei0", HICUM_MOD_CJEI0 , IF_REAL, "Internal B-E zero-bias depletion capacitance"),
IOP("vdei", HICUM_MOD_VDEI , IF_REAL, "Internal B-E built-in potential"),
IOP("zei", HICUM_MOD_ZEI , IF_REAL, "Internal B-E grading coefficient"),
IOP("ajei", HICUM_MOD_AJEI , IF_REAL, "Ratio of maximum to zero-bias value of internal B-E capacitance"),
IOPR("aljei", HICUM_MOD_AJEI , IF_REAL, "Ratio of maximum to zero-bias value of internal B-E capacitance"),
IOP("cjep0", HICUM_MOD_CJEP0 , IF_REAL, "Peripheral B-E zero-bias depletion capacitance"),
IOP("vdep", HICUM_MOD_VDEP , IF_REAL, "Peripheral B-E built-in potential"),
IOP("zep", HICUM_MOD_ZEP , IF_REAL, "Peripheral B-E grading coefficient"),
IOP("ajep", HICUM_MOD_AJEP , IF_REAL, "Ratio of maximum to zero-bias value of peripheral B-E capacitance"),
IOPR("aljep", HICUM_MOD_AJEP , IF_REAL, "Ratio of maximum to zero-bias value of peripheral B-E capacitance"),
IOP("cjci0", HICUM_MOD_CJCI0 , IF_REAL, "Internal B-C zero-bias depletion capacitance"),
IOP("vdci", HICUM_MOD_VDCI , IF_REAL, "Internal B-C built-in potential"),
IOP("zci", HICUM_MOD_ZCI , IF_REAL, "Internal B-C grading coefficient"),
IOP("vptci", HICUM_MOD_VPTCI , IF_REAL, "Internal B-C punch-through voltage"),
IOP("cjcx0", HICUM_MOD_CJCX0 , IF_REAL, "External B-C zero-bias depletion capacitance"),
IOP("vdcx", HICUM_MOD_VDCX , IF_REAL, "External B-C built-in potential"),
IOP("zcx", HICUM_MOD_ZCX , IF_REAL, "External B-C grading coefficient"),
IOP("vptcx", HICUM_MOD_VPTCX , IF_REAL, "External B-C punch-through voltage"),
IOP("fbcpar", HICUM_MOD_FBCPAR, IF_REAL, "Partitioning factor of parasitic B-C cap"),
IOPR("fbc", HICUM_MOD_FBCPAR, IF_REAL, "Partitioning factor of parasitic B-C cap"),
IOP("fbepar", HICUM_MOD_FBEPAR, IF_REAL, "Partitioning factor of parasitic B-E cap"),
IOPR("fbe", HICUM_MOD_FBEPAR, IF_REAL, "Partitioning factor of parasitic B-E cap"),
IOP("cjs0", HICUM_MOD_CJS0 , IF_REAL, "C-S zero-bias depletion capacitance"),
IOP("vds", HICUM_MOD_VDS , IF_REAL, "C-S built-in potential"),
IOP("zs", HICUM_MOD_ZS , IF_REAL, "C-S grading coefficient"),
IOP("vpts", HICUM_MOD_VPTS , IF_REAL, "C-S punch-through voltage"),
IOP("cscp0", HICUM_MOD_CSCP0 , IF_REAL, "Perimeter S-C zero-bias depletion capacitance"),
IOP("vdsp", HICUM_MOD_VDSP , IF_REAL, "Perimeter S-C built-in potential"),
IOP("zsp", HICUM_MOD_ZSP , IF_REAL, "Perimeter S-C grading coefficient"),
IOP("vptsp", HICUM_MOD_VPTSP , IF_REAL, "Perimeter S-C punch-through voltage"),
//Diffusion Capacitances
IOP("t0", HICUM_MOD_T0 , IF_REAL, "Low current forward transit time at VBC=0V"),
IOP("dt0h", HICUM_MOD_DT0H , IF_REAL, "Time constant for base and B-C space charge layer width modulation"),
IOP("tbvl", HICUM_MOD_TBVL , IF_REAL, "Time constant for modeling carrier jam at low VCE"),
IOP("tef0", HICUM_MOD_TEF0 , IF_REAL, "Neutral emitter storage time"),
IOP("gtfe", HICUM_MOD_GTFE , IF_REAL, "Exponent factor for current dependence of neutral emitter storage time"),
IOP("thcs", HICUM_MOD_THCS , IF_REAL, "Saturation time constant at high current densities"),
IOP("ahc", HICUM_MOD_AHC , IF_REAL, "Smoothing factor for current dependence of base and collector transit time"),
IOPR("alhc", HICUM_MOD_AHC , IF_REAL, "Smoothing factor for current dependence of base and collector transit time"),
IOP("fthc", HICUM_MOD_FTHC , IF_REAL, "Partitioning factor for base and collector portion"),
IOP("rci0", HICUM_MOD_RCI0 , IF_REAL, "Internal collector resistance at low electric field"),
IOP("vlim", HICUM_MOD_VLIM , IF_REAL, "Voltage separating ohmic and saturation velocity regime"),
IOP("vces", HICUM_MOD_VCES , IF_REAL, "Internal C-E saturation voltage"),
IOP("vpt", HICUM_MOD_VPT , IF_REAL, "Collector punch-through voltage"), // `0' signifies infinity
IOP("aick", HICUM_MOD_AICK , IF_REAL, "Smoothing term for ICK"),
IOP("delck", HICUM_MOD_DELCK, IF_REAL, "Fitting factor for critical current"),
IOP("tr", HICUM_MOD_TR , IF_REAL, "Storage time for inverse operation"),
IOP("vcbar", HICUM_MOD_VCBAR, IF_REAL, "Barrier voltage"),
IOP("icbar", HICUM_MOD_ICBAR, IF_REAL, "Normalization parameter"),
IOP("acbar", HICUM_MOD_ACBAR, IF_REAL, "Smoothing parameter for barrier voltage"),
//Isolation Capacitances
IOP("cbepar", HICUM_MOD_CBEPAR, IF_REAL, "Total parasitic B-E capacitance"),
IOPR("ceox", HICUM_MOD_CBEPAR, IF_REAL, "Total parasitic B-E capacitance"),
IOP("cbcpar", HICUM_MOD_CBCPAR, IF_REAL, "Total parasitic B-C capacitance"),
IOPR("ccox", HICUM_MOD_CBCPAR, IF_REAL, "Total parasitic B-C capacitance"),
//Non-quasi-static Effect
IOP("alqf", HICUM_MOD_ALQF, IF_REAL, "Factor for additional delay time of minority charge"),
IOP("alit", HICUM_MOD_ALIT, IF_REAL, "Factor for additional delay time of transfer current"),
IOP("flnqs", HICUM_MOD_FLNQS, IF_INTEGER, "Flag for turning on and off of vertical NQS effect"),
//Noise
IOP("kf", HICUM_MOD_KF , IF_REAL, "Flicker noise coefficient"),
IOP("af", HICUM_MOD_AF , IF_REAL, "Flicker noise exponent factor"),
IOP("cfbe", HICUM_MOD_CFBE , IF_INTEGER, "Flag for determining where to tag the flicker noise source"),
IOP("flcono", HICUM_MOD_FLCONO, IF_INTEGER, "Flag for turning on and off of correlated noise implementation"),
IOP("kfre", HICUM_MOD_KFRE , IF_REAL, "Emitter resistance flicker noise coefficient"),
IOP("afre", HICUM_MOD_AFRE , IF_REAL, "Emitter resistance flicker noise exponent factor"),
//Lateral Geometry Scaling (at high current densities)
IOP("latb", HICUM_MOD_LATB, IF_REAL, "Scaling factor for collector minority charge in direction of emitter width"),
IOP("latl", HICUM_MOD_LATL, IF_REAL, "Scaling factor for collector minority charge in direction of emitter length"),
//Temperature dependence
IOP("vgb", HICUM_MOD_VGB , IF_REAL, "Bandgap voltage extrapolated to 0 K"),
IOP("alt0", HICUM_MOD_ALT0 , IF_REAL, "First order relative TC of parameter T0"),
IOP("kt0", HICUM_MOD_KT0 , IF_REAL, "Second order relative TC of parameter T0"),
IOP("zetaci", HICUM_MOD_ZETACI , IF_REAL, "Temperature exponent for RCI0"),
IOP("alvs", HICUM_MOD_ALVS , IF_REAL, "Relative TC of saturation drift velocity"),
IOP("alces", HICUM_MOD_ALCES , IF_REAL, "Relative TC of VCES"),
IOP("zetarbi", HICUM_MOD_ZETARBI , IF_REAL, "Temperature exponent of internal base resistance"),
IOP("zetarbx", HICUM_MOD_ZETARBX , IF_REAL, "Temperature exponent of external base resistance"),
IOP("zetarcx", HICUM_MOD_ZETARCX , IF_REAL, "Temperature exponent of external collector resistance"),
IOP("zetare", HICUM_MOD_ZETARE , IF_REAL, "Temperature exponent of emitter resistance"),
IOP("zetacx", HICUM_MOD_ZETACX , IF_REAL, "Temperature exponent of mobility in substrate transistor transit time"),
IOP("vge", HICUM_MOD_VGE , IF_REAL, "Effective emitter bandgap voltage"),
IOP("vgc", HICUM_MOD_VGC , IF_REAL, "Effective collector bandgap voltage"),
IOP("vgs", HICUM_MOD_VGS , IF_REAL, "Effective substrate bandgap voltage"),
IOP("f1vg", HICUM_MOD_F1VG , IF_REAL, "Coefficient K1 in T-dependent band-gap equation"),
IOP("f2vg", HICUM_MOD_F2VG , IF_REAL, "Coefficient K2 in T-dependent band-gap equation"),
IOP("zetact", HICUM_MOD_ZETACT , IF_REAL, "Exponent coefficient in transfer current temperature dependence"),
IOP("zetabet", HICUM_MOD_ZETABET , IF_REAL, "Exponent coefficient in B-E junction current temperature dependence"),
IOP("alb", HICUM_MOD_ALB , IF_REAL, "Relative TC of forward current gain for V2.1 model"),
IOP("dvgbe", HICUM_MOD_DVGBE , IF_REAL, "Bandgap difference between B and B-E junction used for hjEi0 and hf0"),
IOP("zetahjei", HICUM_MOD_ZETAHJEI, IF_REAL, "Temperature coefficient for ahjEi"),
IOP("zetavgbe", HICUM_MOD_ZETAVGBE, IF_REAL, "Temperature coefficient for hjEi0"),
//Self-Heating
IOP("flsh", HICUM_MOD_FLSH , IF_INTEGER, "Flag for turning on and off self-heating effect"),
IOP("rth", HICUM_MOD_RTH , IF_REAL, "Thermal resistance"),
IOP("zetarth", HICUM_MOD_ZETARTH, IF_REAL, "Temperature coefficient for Rth"),
IOP("alrth", HICUM_MOD_ALRTH , IF_REAL, "First order relative TC of parameter Rth"),
IOP("cth", HICUM_MOD_CTH , IF_REAL, "Thermal capacitance"),
//Compatibility with V2.1
IOP("flcomp", HICUM_MOD_FLCOMP, IF_REAL, "Flag for compatibility with v2.1 model (0=v2.1)"),
IOP("vbe_max", HICUM_MOD_VBE_MAX, IF_REAL, "maximum voltage B-E junction"),
IOP("vbc_max", HICUM_MOD_VBC_MAX, IF_REAL, "maximum voltage B-C junction"),
IOP("vce_max", HICUM_MOD_VCE_MAX, IF_REAL, "maximum voltage C-E branch")
};
char *HICUMnames[] = {
"collector",
"base",
"emitter",
"substrate",
"temp"
};
int HICUMnSize = NUMELEMS(HICUMnames);
int HICUMpTSize = NUMELEMS(HICUMpTable);
int HICUMmPTSize = NUMELEMS(HICUMmPTable);
int HICUMiSize = sizeof(HICUMinstance);
int HICUMmSize = sizeof(HICUMmodel);

File diff suppressed because it is too large Load Diff

View File

@ -1,253 +1,253 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
**********/
/*
* This routine gives access to the internal device
* parameters for HICUMs
*/
#include "ngspice/ngspice.h"
#include "ngspice/const.h"
#include "ngspice/cktdefs.h"
#include "hicum2defs.h"
#include "ngspice/ifsim.h"
#include "ngspice/sperror.h"
#include "ngspice/suffix.h"
/*ARGSUSED*/
int
HICUMask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue *select)
{
HICUMinstance *here = (HICUMinstance*)instPtr;
NG_IGNORE(select);
double g_be;
IFvalue IC, IB, RPIi, RPIx, GMi;
IFvalue CPIi, CPIx, CMUi, CMUx;
IFvalue rcx_t, re_t, rb, BETAAC;
switch(which) {
case HICUM_AREA:
value->rValue = here->HICUMarea;
return(OK);
case HICUM_OFF:
value->iValue = here->HICUMoff;
return(OK);
case HICUM_TEMP:
value->rValue = here->HICUMtemp - CONSTCtoK;
return(OK);
case HICUM_M:
value->rValue = here->HICUMm;
return(OK);
case HICUM_QUEST_COLLNODE:
value->iValue = here->HICUMcollNode;
return(OK);
case HICUM_QUEST_BASENODE:
value->iValue = here->HICUMbaseNode;
return(OK);
case HICUM_QUEST_EMITNODE:
value->iValue = here->HICUMemitNode;
return(OK);
case HICUM_QUEST_SUBSNODE:
value->iValue = here->HICUMsubsNode;
return(OK);
case HICUM_QUEST_COLLCINODE:
value->iValue = here->HICUMcollCINode;
return(OK);
case HICUM_QUEST_BASEBPNODE:
value->iValue = here->HICUMbaseBPNode;
return(OK);
case HICUM_QUEST_BASEBINODE:
value->iValue = here->HICUMbaseBINode;
return(OK);
case HICUM_QUEST_EMITEINODE:
value->iValue = here->HICUMemitEINode;
return(OK);
case HICUM_QUEST_SUBSSINODE:
value->iValue = here->HICUMsubsSINode;
return(OK);
/* voltages */
case HICUM_QUEST_VBE:
value->rValue = *(ckt->CKTstate0 + here->HICUMbaseNode)-*(ckt->CKTstate0 + here->HICUMemitNode);
return(OK);
case HICUM_QUEST_VBBP:
value->rValue = *(ckt->CKTstate0 + here->HICUMbaseNode)-*(ckt->CKTstate0 + here->HICUMbaseBPNode);
return(OK);
case HICUM_QUEST_VBC:
value->rValue = *(ckt->CKTstate0 + here->HICUMbaseNode)-*(ckt->CKTstate0 + here->HICUMcollNode);
return(OK);
case HICUM_QUEST_VCE:
value->rValue = *(ckt->CKTstate0 + here->HICUMcollNode)-*(ckt->CKTstate0 + here->HICUMemitNode);
return(OK);
case HICUM_QUEST_VSC:
value->rValue = *(ckt->CKTstate0 + here->HICUMcollNode)-*(ckt->CKTstate0 + here->HICUMsubsNode);
return(OK);
case HICUM_QUEST_VBIEI:
value->rValue = *(ckt->CKTstate0 + here->HICUMvbiei);
return(OK);
case HICUM_QUEST_VBPBI:
value->rValue = *(ckt->CKTstate0 + here->HICUMvbpbi);
return(OK);
case HICUM_QUEST_VBICI:
value->rValue = *(ckt->CKTstate0 + here->HICUMvbici);
return(OK);
case HICUM_QUEST_VCIEI:
value->rValue = *(ckt->CKTstate0 + here->HICUMvbiei) - *(ckt->CKTstate0 + here->HICUMvbici);
return(OK);
/* currents */
case HICUM_QUEST_CC:
value->rValue = *(ckt->CKTstate0 + here->HICUMiciei) -
*(ckt->CKTstate0 + here->HICUMibici) -
*(ckt->CKTstate0 + here->HICUMibpci) -
*(ckt->CKTstate0 + here->HICUMisici);
value->rValue *= HICUMmodPtr(here)->HICUMtype;
return(OK);
case HICUM_QUEST_CB:
value->rValue = *(ckt->CKTstate0 + here->HICUMibiei) +
*(ckt->CKTstate0 + here->HICUMibici) +
*(ckt->CKTstate0 + here->HICUMibpci) +
*(ckt->CKTstate0 + here->HICUMibpsi);
value->rValue *= HICUMmodPtr(here)->HICUMtype;
return(OK);
case HICUM_QUEST_CE:
value->rValue = - *(ckt->CKTstate0 + here->HICUMibiei) -
*(ckt->CKTstate0 + here->HICUMibpei) -
*(ckt->CKTstate0 + here->HICUMiciei);
value->rValue *= HICUMmodPtr(here)->HICUMtype;
return(OK);
case HICUM_QUEST_CS:
value->rValue = *(ckt->CKTstate0 + here->HICUMisici) -
*(ckt->CKTstate0 + here->HICUMibpsi);
value->rValue *= HICUMmodPtr(here)->HICUMtype;
return(OK);
case HICUM_QUEST_CAVL:
value->rValue = here->HICUMiavl;
return(OK);
case HICUM_QUEST_CBEI:
value->rValue = *(ckt->CKTstate0 + here->HICUMibiei);
return(OK);
case HICUM_QUEST_CBCI:
value->rValue = *(ckt->CKTstate0 + here->HICUMibici);
return(OK);
/* resistances */
case HICUM_QUEST_RCX_T:
value->rValue = here->HICUMrcx_t.rpart;
return(OK);
case HICUM_QUEST_RE_T:
value->rValue = here->HICUMre_t.rpart;
return(OK);
case HICUM_QUEST_IT:
value->rValue = *(ckt->CKTstate0 + here->HICUMiciei);
return(OK);
case HICUM_QUEST_RBI:
value->rValue = here->HICUMrbi;
return(OK);
case HICUM_QUEST_RB:
value->rValue = here->HICUMrbi + here->HICUMrbx_t.rpart;
return(OK);
/* transconductances and capacitances */
case HICUM_QUEST_BETADC:
HICUMask(ckt, instPtr, HICUM_QUEST_CC, &IC, select);
HICUMask(ckt, instPtr, HICUM_QUEST_CB, &IB, select);
if (IB.rValue != 0.0) {
value->rValue = IC.rValue/IB.rValue;
} else {
value->rValue = 0.0;
}
return(OK);
case HICUM_QUEST_GMI:
value->rValue = *(ckt->CKTstate0 + here->HICUMiciei_Vbiei);
return(OK);
case HICUM_QUEST_GMS:
value->rValue = *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci);
return(OK);
case HICUM_QUEST_RPII:
value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMibiei_Vbiei) );
return(OK);
case HICUM_QUEST_RPIX:
value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMibpei_Vbpei) );
return(OK);
case HICUM_QUEST_RMUI:
value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMibici_Vbici) + ckt->CKTgmin);
return(OK);
case HICUM_QUEST_RMUX:
value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMibpci_Vbpci) + ckt->CKTgmin);
return(OK);
case HICUM_QUEST_ROI:
value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMiciei_Vbiei) + ckt->CKTgmin);
return(OK);
case HICUM_QUEST_CPII:
value->rValue = here->HICUMcapjei + here->HICUMcapdeix;
return(OK);
case HICUM_QUEST_CPIX:
value->rValue = here->HICUMcapjep + here->HICUMcbepar_scaled;
return(OK);
case HICUM_QUEST_CMUI:
value->rValue = here->HICUMcapjci + here->HICUMcapdci;
return(OK);
case HICUM_QUEST_CMUX:
value->rValue = here->HICUMcapjcx_t_i + here->HICUMcapjcx_t_ii + here->HICUMcbcpar_scaled + here->HICUMcapdsu;
return(OK);
case HICUM_QUEST_CCS:
value->rValue = here->HICUMcapjs + here->HICUMcapscp;
return(OK);
case HICUM_QUEST_CRBI:
value->rValue = here->HICUMcaprbi;
return(OK);
case HICUM_QUEST_BETAAC:
HICUMask(ckt, instPtr, HICUM_QUEST_RPII, &RPIi, select);
HICUMask(ckt, instPtr, HICUM_QUEST_RPIX, &RPIx, select);
HICUMask(ckt, instPtr, HICUM_QUEST_GMI, &GMi, select);
g_be = 1/(RPIi.rValue + RPIx.rValue);
if (g_be > 0.0) {
value->rValue = GMi.rValue/g_be;
} else {
value->rValue = 0.0;
}
return(OK);
/* transit time */
case HICUM_QUEST_TF:
value->rValue = here->HICUMtf;
return(OK);
case HICUM_QUEST_FT:
// FT = GMi/(2*`M_PI*(CPIi+CPIx+CMUi+CMUx+(rcx_t+re_t+(re_t+rb)/BETAAC)*GMi*(CMUi+CMUx)));
HICUMask(ckt, instPtr, HICUM_QUEST_GMI, &GMi, select);
HICUMask(ckt, instPtr, HICUM_QUEST_CPII, &CPIi, select);
HICUMask(ckt, instPtr, HICUM_QUEST_CPIX, &CPIx, select);
HICUMask(ckt, instPtr, HICUM_QUEST_CMUI, &CMUi, select);
HICUMask(ckt, instPtr, HICUM_QUEST_CMUX, &CMUx, select);
HICUMask(ckt, instPtr, HICUM_QUEST_RCX_T, &rcx_t, select);
HICUMask(ckt, instPtr, HICUM_QUEST_RE_T, &re_t, select);
HICUMask(ckt, instPtr, HICUM_QUEST_RB, &rb, select);
HICUMask(ckt, instPtr, HICUM_QUEST_BETAAC, &BETAAC, select);
value->rValue = GMi.rValue/(
2 * M_PI * (
CPIi.rValue + CPIx.rValue +
CMUi.rValue + CMUx.rValue +
(rcx_t.rValue + re_t.rValue + (re_t.rValue + rb.rValue)/BETAAC.rValue)
) * GMi.rValue * (
CMUi.rValue + CMUx.rValue
)
);
return(OK);
case HICUM_QUEST_ICK:
value->rValue = here->HICUMick;
return(OK);
case HICUM_QUEST_POWER:
value->rValue = here->HICUMpterm;
return(OK);
case HICUM_QUEST_TK:
value->rValue = here->HICUMtemp;
return(OK);
case HICUM_QUEST_DTSH:
value->rValue = here->HICUMdtemp_sh;
return(OK);
default:
return(E_BADPARM);
}
/* NOTREACHED */
}
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
/*
* This routine gives access to the internal device
* parameters for HICUMs
*/
#include "ngspice/ngspice.h"
#include "ngspice/const.h"
#include "ngspice/cktdefs.h"
#include "hicum2defs.h"
#include "ngspice/ifsim.h"
#include "ngspice/sperror.h"
#include "ngspice/suffix.h"
/*ARGSUSED*/
int
HICUMask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue *select)
{
HICUMinstance *here = (HICUMinstance*)instPtr;
NG_IGNORE(select);
double g_be;
IFvalue IC, IB, RPIi, RPIx, GMi;
IFvalue CPIi, CPIx, CMUi, CMUx;
IFvalue rcx_t, re_t, rb, BETAAC;
switch(which) {
case HICUM_AREA:
value->rValue = here->HICUMarea;
return(OK);
case HICUM_OFF:
value->iValue = here->HICUMoff;
return(OK);
case HICUM_TEMP:
value->rValue = here->HICUMtemp - CONSTCtoK;
return(OK);
case HICUM_M:
value->rValue = here->HICUMm;
return(OK);
case HICUM_QUEST_COLLNODE:
value->iValue = here->HICUMcollNode;
return(OK);
case HICUM_QUEST_BASENODE:
value->iValue = here->HICUMbaseNode;
return(OK);
case HICUM_QUEST_EMITNODE:
value->iValue = here->HICUMemitNode;
return(OK);
case HICUM_QUEST_SUBSNODE:
value->iValue = here->HICUMsubsNode;
return(OK);
case HICUM_QUEST_COLLCINODE:
value->iValue = here->HICUMcollCINode;
return(OK);
case HICUM_QUEST_BASEBPNODE:
value->iValue = here->HICUMbaseBPNode;
return(OK);
case HICUM_QUEST_BASEBINODE:
value->iValue = here->HICUMbaseBINode;
return(OK);
case HICUM_QUEST_EMITEINODE:
value->iValue = here->HICUMemitEINode;
return(OK);
case HICUM_QUEST_SUBSSINODE:
value->iValue = here->HICUMsubsSINode;
return(OK);
/* voltages */
case HICUM_QUEST_VBE:
value->rValue = *(ckt->CKTstate0 + here->HICUMbaseNode)-*(ckt->CKTstate0 + here->HICUMemitNode);
return(OK);
case HICUM_QUEST_VBBP:
value->rValue = *(ckt->CKTstate0 + here->HICUMbaseNode)-*(ckt->CKTstate0 + here->HICUMbaseBPNode);
return(OK);
case HICUM_QUEST_VBC:
value->rValue = *(ckt->CKTstate0 + here->HICUMbaseNode)-*(ckt->CKTstate0 + here->HICUMcollNode);
return(OK);
case HICUM_QUEST_VCE:
value->rValue = *(ckt->CKTstate0 + here->HICUMcollNode)-*(ckt->CKTstate0 + here->HICUMemitNode);
return(OK);
case HICUM_QUEST_VSC:
value->rValue = *(ckt->CKTstate0 + here->HICUMcollNode)-*(ckt->CKTstate0 + here->HICUMsubsNode);
return(OK);
case HICUM_QUEST_VBIEI:
value->rValue = *(ckt->CKTstate0 + here->HICUMvbiei);
return(OK);
case HICUM_QUEST_VBPBI:
value->rValue = *(ckt->CKTstate0 + here->HICUMvbpbi);
return(OK);
case HICUM_QUEST_VBICI:
value->rValue = *(ckt->CKTstate0 + here->HICUMvbici);
return(OK);
case HICUM_QUEST_VCIEI:
value->rValue = *(ckt->CKTstate0 + here->HICUMvbiei) - *(ckt->CKTstate0 + here->HICUMvbici);
return(OK);
/* currents */
case HICUM_QUEST_CC:
value->rValue = *(ckt->CKTstate0 + here->HICUMiciei) -
*(ckt->CKTstate0 + here->HICUMibici) -
*(ckt->CKTstate0 + here->HICUMibpci) -
*(ckt->CKTstate0 + here->HICUMisici);
value->rValue *= HICUMmodPtr(here)->HICUMtype;
return(OK);
case HICUM_QUEST_CB:
value->rValue = *(ckt->CKTstate0 + here->HICUMibiei) +
*(ckt->CKTstate0 + here->HICUMibici) +
*(ckt->CKTstate0 + here->HICUMibpci) +
*(ckt->CKTstate0 + here->HICUMibpsi);
value->rValue *= HICUMmodPtr(here)->HICUMtype;
return(OK);
case HICUM_QUEST_CE:
value->rValue = - *(ckt->CKTstate0 + here->HICUMibiei) -
*(ckt->CKTstate0 + here->HICUMibpei) -
*(ckt->CKTstate0 + here->HICUMiciei);
value->rValue *= HICUMmodPtr(here)->HICUMtype;
return(OK);
case HICUM_QUEST_CS:
value->rValue = *(ckt->CKTstate0 + here->HICUMisici) -
*(ckt->CKTstate0 + here->HICUMibpsi);
value->rValue *= HICUMmodPtr(here)->HICUMtype;
return(OK);
case HICUM_QUEST_CAVL:
value->rValue = here->HICUMiavl;
return(OK);
case HICUM_QUEST_CBEI:
value->rValue = *(ckt->CKTstate0 + here->HICUMibiei);
return(OK);
case HICUM_QUEST_CBCI:
value->rValue = *(ckt->CKTstate0 + here->HICUMibici);
return(OK);
/* resistances */
case HICUM_QUEST_RCX_T:
value->rValue = here->HICUMrcx_t.rpart;
return(OK);
case HICUM_QUEST_RE_T:
value->rValue = here->HICUMre_t.rpart;
return(OK);
case HICUM_QUEST_IT:
value->rValue = *(ckt->CKTstate0 + here->HICUMiciei);
return(OK);
case HICUM_QUEST_RBI:
value->rValue = here->HICUMrbi;
return(OK);
case HICUM_QUEST_RB:
value->rValue = here->HICUMrbi + here->HICUMrbx_t.rpart;
return(OK);
/* transconductances and capacitances */
case HICUM_QUEST_BETADC:
HICUMask(ckt, instPtr, HICUM_QUEST_CC, &IC, select);
HICUMask(ckt, instPtr, HICUM_QUEST_CB, &IB, select);
if (IB.rValue != 0.0) {
value->rValue = IC.rValue/IB.rValue;
} else {
value->rValue = 0.0;
}
return(OK);
case HICUM_QUEST_GMI:
value->rValue = *(ckt->CKTstate0 + here->HICUMiciei_Vbiei);
return(OK);
case HICUM_QUEST_GMS:
value->rValue = *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci);
return(OK);
case HICUM_QUEST_RPII:
value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMibiei_Vbiei) );
return(OK);
case HICUM_QUEST_RPIX:
value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMibpei_Vbpei) );
return(OK);
case HICUM_QUEST_RMUI:
value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMibici_Vbici) + ckt->CKTgmin);
return(OK);
case HICUM_QUEST_RMUX:
value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMibpci_Vbpci) + ckt->CKTgmin);
return(OK);
case HICUM_QUEST_ROI:
value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMiciei_Vbiei) + ckt->CKTgmin);
return(OK);
case HICUM_QUEST_CPII:
value->rValue = here->HICUMcapjei + here->HICUMcapdeix;
return(OK);
case HICUM_QUEST_CPIX:
value->rValue = here->HICUMcapjep + here->HICUMcbepar_scaled;
return(OK);
case HICUM_QUEST_CMUI:
value->rValue = here->HICUMcapjci + here->HICUMcapdci;
return(OK);
case HICUM_QUEST_CMUX:
value->rValue = here->HICUMcapjcx_t_i + here->HICUMcapjcx_t_ii + here->HICUMcbcpar_scaled + here->HICUMcapdsu;
return(OK);
case HICUM_QUEST_CCS:
value->rValue = here->HICUMcapjs + here->HICUMcapscp;
return(OK);
case HICUM_QUEST_CRBI:
value->rValue = here->HICUMcaprbi;
return(OK);
case HICUM_QUEST_BETAAC:
HICUMask(ckt, instPtr, HICUM_QUEST_RPII, &RPIi, select);
HICUMask(ckt, instPtr, HICUM_QUEST_RPIX, &RPIx, select);
HICUMask(ckt, instPtr, HICUM_QUEST_GMI, &GMi, select);
g_be = 1/(RPIi.rValue + RPIx.rValue);
if (g_be > 0.0) {
value->rValue = GMi.rValue/g_be;
} else {
value->rValue = 0.0;
}
return(OK);
/* transit time */
case HICUM_QUEST_TF:
value->rValue = here->HICUMtf;
return(OK);
case HICUM_QUEST_FT:
// FT = GMi/(2*`M_PI*(CPIi+CPIx+CMUi+CMUx+(rcx_t+re_t+(re_t+rb)/BETAAC)*GMi*(CMUi+CMUx)));
HICUMask(ckt, instPtr, HICUM_QUEST_GMI, &GMi, select);
HICUMask(ckt, instPtr, HICUM_QUEST_CPII, &CPIi, select);
HICUMask(ckt, instPtr, HICUM_QUEST_CPIX, &CPIx, select);
HICUMask(ckt, instPtr, HICUM_QUEST_CMUI, &CMUi, select);
HICUMask(ckt, instPtr, HICUM_QUEST_CMUX, &CMUx, select);
HICUMask(ckt, instPtr, HICUM_QUEST_RCX_T, &rcx_t, select);
HICUMask(ckt, instPtr, HICUM_QUEST_RE_T, &re_t, select);
HICUMask(ckt, instPtr, HICUM_QUEST_RB, &rb, select);
HICUMask(ckt, instPtr, HICUM_QUEST_BETAAC, &BETAAC, select);
value->rValue = GMi.rValue/(
2 * M_PI * (
CPIi.rValue + CPIx.rValue +
CMUi.rValue + CMUx.rValue +
(rcx_t.rValue + re_t.rValue + (re_t.rValue + rb.rValue)/BETAAC.rValue)
) * GMi.rValue * (
CMUi.rValue + CMUx.rValue
)
);
return(OK);
case HICUM_QUEST_ICK:
value->rValue = here->HICUMick;
return(OK);
case HICUM_QUEST_POWER:
value->rValue = here->HICUMpterm;
return(OK);
case HICUM_QUEST_TK:
value->rValue = here->HICUMtemp;
return(OK);
case HICUM_QUEST_DTSH:
value->rValue = here->HICUMdtemp_sh;
return(OK);
default:
return(E_BADPARM);
}
/* NOTREACHED */
}

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
/*

File diff suppressed because it is too large Load Diff

View File

@ -1,33 +1,33 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
**********/
#ifndef __HICUMEXT_H
#define __HICUMEXT_H
extern int HICUMacLoad(GENmodel *,CKTcircuit*);
extern int HICUMask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*);
extern int HICUMconvTest(GENmodel*,CKTcircuit*);
extern int HICUMmDelete(GENmodel*);
extern int HICUMgetic(GENmodel*,CKTcircuit*);
//extern int HICUMload(GENmodel*,CKTcircuit*);//moved to hicumL2.hpp
extern int HICUMmAsk(CKTcircuit*,GENmodel*,int,IFvalue*);
extern int HICUMmParam(int,IFvalue*,GENmodel*);
extern int HICUMparam(int,IFvalue*,GENinstance*,IFvalue*);
extern int HICUMpzLoad(GENmodel*, CKTcircuit*, SPcomplex*);
extern int HICUMsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*);
extern int HICUMunsetup(GENmodel*,CKTcircuit*);
// extern int HICUMtemp(GENmodel*,CKTcircuit*); // moved to hicum2temp.hpp
extern int HICUMtrunc(GENmodel*,CKTcircuit*,double*);
extern int HICUMnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*);
extern int HICUMsoaCheck(CKTcircuit *, GENmodel *);
#ifdef KLU
extern int HICUMbindCSC (GENmodel*, CKTcircuit*) ;
extern int HICUMbindCSCComplex (GENmodel*, CKTcircuit*) ;
extern int HICUMbindCSCComplexToReal (GENmodel*, CKTcircuit*) ;
#endif
#endif
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
#ifndef __HICUMEXT_H
#define __HICUMEXT_H
extern int HICUMacLoad(GENmodel *,CKTcircuit*);
extern int HICUMask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*);
extern int HICUMconvTest(GENmodel*,CKTcircuit*);
extern int HICUMmDelete(GENmodel*);
extern int HICUMgetic(GENmodel*,CKTcircuit*);
//extern int HICUMload(GENmodel*,CKTcircuit*);//moved to hicumL2.hpp
extern int HICUMmAsk(CKTcircuit*,GENmodel*,int,IFvalue*);
extern int HICUMmParam(int,IFvalue*,GENmodel*);
extern int HICUMparam(int,IFvalue*,GENinstance*,IFvalue*);
extern int HICUMpzLoad(GENmodel*, CKTcircuit*, SPcomplex*);
extern int HICUMsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*);
extern int HICUMunsetup(GENmodel*,CKTcircuit*);
// extern int HICUMtemp(GENmodel*,CKTcircuit*); // moved to hicum2temp.hpp
extern int HICUMtrunc(GENmodel*,CKTcircuit*,double*);
extern int HICUMnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*);
extern int HICUMsoaCheck(CKTcircuit *, GENmodel *);
#ifdef KLU
extern int HICUMbindCSC (GENmodel*, CKTcircuit*) ;
extern int HICUMbindCSCComplex (GENmodel*, CKTcircuit*) ;
extern int HICUMbindCSCComplexToReal (GENmodel*, CKTcircuit*) ;
#endif
#endif

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
/*

View File

@ -1,91 +1,91 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
**********/
#include "ngspice/config.h"
#include "ngspice/devdefs.h"
#include "hicum2itf.h"
#include "hicum2ext.h"
#include "hicum2init.h"
#include "hicumL2.hpp"
#include "hicumL2temp.hpp"
SPICEdev HICUMinfo = {
.DEVpublic = {
.name = "hicum2",
.description = "High Current Model for BJT",
.terms = &HICUMnSize,
.numNames = &HICUMnSize,
.termNames = HICUMnames,
.numInstanceParms = &HICUMpTSize,
.instanceParms = HICUMpTable,
.numModelParms = &HICUMmPTSize,
.modelParms = HICUMmPTable,
.flags = DEV_DEFAULT,
#ifdef XSPICE
.cm_func = NULL,
.num_conn = 0,
.conn = NULL,
.num_param = 0,
.param = NULL,
.num_inst_var = 0,
.inst_var = NULL,
#endif
},
.DEVparam = HICUMparam,
.DEVmodParam = HICUMmParam,
.DEVload = HICUMload,
.DEVsetup = HICUMsetup,
.DEVunsetup = HICUMunsetup,
.DEVpzSetup = HICUMsetup,
.DEVtemperature = HICUMtemp,
.DEVtrunc = HICUMtrunc,
.DEVfindBranch = NULL,
.DEVacLoad = HICUMacLoad,
.DEVaccept = NULL,
.DEVdestroy = NULL,
.DEVmodDelete = HICUMmDelete,
.DEVdelete = NULL,
.DEVsetic = HICUMgetic,
.DEVask = HICUMask,
.DEVmodAsk = HICUMmAsk,
.DEVpzLoad = HICUMpzLoad,
.DEVconvTest = HICUMconvTest,
.DEVsenSetup = NULL,
.DEVsenLoad = NULL,
.DEVsenUpdate = NULL,
.DEVsenAcLoad = NULL,
.DEVsenPrint = NULL,
.DEVsenTrunc = NULL,
.DEVdisto = NULL,
.DEVnoise = HICUMnoise,
.DEVsoaCheck = HICUMsoaCheck,
.DEVinstSize = &HICUMiSize,
.DEVmodSize = &HICUMmSize,
#ifdef CIDER
.DEVdump = NULL,
.DEVacct = NULL,
#endif
#ifdef KLU
.DEVbindCSC = HICUMbindCSC,
.DEVbindCSCComplex = HICUMbindCSCComplex,
.DEVbindCSCComplexToReal = HICUMbindCSCComplexToReal,
#endif
};
SPICEdev *
get_hicum_info(void)
{
return &HICUMinfo;
}
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
#include "ngspice/config.h"
#include "ngspice/devdefs.h"
#include "hicum2itf.h"
#include "hicum2ext.h"
#include "hicum2init.h"
#include "hicumL2.hpp"
#include "hicumL2temp.hpp"
SPICEdev HICUMinfo = {
.DEVpublic = {
.name = "hicum2",
.description = "High Current Model for BJT",
.terms = &HICUMnSize,
.numNames = &HICUMnSize,
.termNames = HICUMnames,
.numInstanceParms = &HICUMpTSize,
.instanceParms = HICUMpTable,
.numModelParms = &HICUMmPTSize,
.modelParms = HICUMmPTable,
.flags = DEV_DEFAULT,
#ifdef XSPICE
.cm_func = NULL,
.num_conn = 0,
.conn = NULL,
.num_param = 0,
.param = NULL,
.num_inst_var = 0,
.inst_var = NULL,
#endif
},
.DEVparam = HICUMparam,
.DEVmodParam = HICUMmParam,
.DEVload = HICUMload,
.DEVsetup = HICUMsetup,
.DEVunsetup = HICUMunsetup,
.DEVpzSetup = HICUMsetup,
.DEVtemperature = HICUMtemp,
.DEVtrunc = HICUMtrunc,
.DEVfindBranch = NULL,
.DEVacLoad = HICUMacLoad,
.DEVaccept = NULL,
.DEVdestroy = NULL,
.DEVmodDelete = HICUMmDelete,
.DEVdelete = NULL,
.DEVsetic = HICUMgetic,
.DEVask = HICUMask,
.DEVmodAsk = HICUMmAsk,
.DEVpzLoad = HICUMpzLoad,
.DEVconvTest = HICUMconvTest,
.DEVsenSetup = NULL,
.DEVsenLoad = NULL,
.DEVsenUpdate = NULL,
.DEVsenAcLoad = NULL,
.DEVsenPrint = NULL,
.DEVsenTrunc = NULL,
.DEVdisto = NULL,
.DEVnoise = HICUMnoise,
.DEVsoaCheck = HICUMsoaCheck,
.DEVinstSize = &HICUMiSize,
.DEVmodSize = &HICUMmSize,
#ifdef CIDER
.DEVdump = NULL,
.DEVacct = NULL,
#endif
#ifdef KLU
.DEVbindCSC = HICUMbindCSC,
.DEVbindCSCComplex = HICUMbindCSCComplex,
.DEVbindCSCComplexToReal = HICUMbindCSCComplexToReal,
#endif
};
SPICEdev *
get_hicum_info(void)
{
return &HICUMinfo;
}

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
#ifndef DEV_HICUM
#define DEV_HICUM

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
#include "ngspice/ngspice.h"

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
/*

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
#include "ngspice/ngspice.h"

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
/*

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
#include "ngspice/ngspice.h"

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
/*

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
/*

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
#ifndef hicumL2_H
#define hicumL2_H

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
Model Author : (Copyright 1993-2024) Michael Schroter
**********/
#ifndef hicumL2_temp
#define hicumL2_temp