introduce first excess phase network and update to 2.4.0
This commit is contained in:
parent
85c34cfb0f
commit
c318ef15ee
|
|
@ -34,9 +34,9 @@ IFparm HICUMpTable[] = { /* parameters */
|
|||
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"),
|
||||
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"),
|
||||
OP("vbe", HICUM_QUEST_VBE, IF_REAL, "B-E voltage"),
|
||||
OP("vbc", HICUM_QUEST_VBC, IF_REAL, "B-C voltage"),
|
||||
OP("ic", HICUM_QUEST_CC, IF_REAL, "Collector current"),
|
||||
|
|
@ -110,8 +110,10 @@ IFparm HICUMmPTable[] = { /* model parameters */
|
|||
//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"),
|
||||
|
|
|
|||
|
|
@ -57,9 +57,9 @@ typedef struct sHICUMinstance {
|
|||
int HICUMemitEINode; /* number of internal emitter node of hicum */
|
||||
int HICUMbaseBPNode; /* number of internal base node of hicum */
|
||||
int HICUMsubsSINode; /* number of internal substrate node */
|
||||
int HICUMxfNode; /* number of internal excess phase node */
|
||||
int HICUMxf1Node; /* number of internal excess phase node */
|
||||
int HICUMxf2Node; /* number of internal excess phase node */
|
||||
int HICUMxfNode; /* number of internal excess phase node qdei */
|
||||
int HICUMxf1Node; /* number of internal excess phase node itf */
|
||||
int HICUMxf2Node; /* number of internal excess phase node itf */
|
||||
|
||||
double HICUMarea; /* area factor for the hicum */
|
||||
double HICUMicVBE; /* initial condition voltage B-E */
|
||||
|
|
@ -92,6 +92,7 @@ typedef struct sHICUMinstance {
|
|||
double HICUMthcs_t;
|
||||
double HICUMfavl_t;
|
||||
double HICUMqavl_t;
|
||||
double HICUMkavl_t;
|
||||
double HICUMrbi0_t;
|
||||
double HICUMibets_t;
|
||||
double HICUMabet_t;
|
||||
|
|
@ -211,6 +212,7 @@ typedef struct sHICUMinstance {
|
|||
double *HICUMsubsCollPtr;
|
||||
double *HICUMcollSubsPtr;
|
||||
|
||||
/* excess phase */
|
||||
double *HICUMxfXfPtr;
|
||||
double *HICUMxf1Xf1Ptr;
|
||||
double *HICUMxf2Xf2Ptr;
|
||||
|
|
@ -255,6 +257,8 @@ typedef struct sHICUMinstance {
|
|||
double HICUMcapsu;
|
||||
double HICUMcapcth;
|
||||
|
||||
double HICUMcapxf;
|
||||
|
||||
double HICUMtVcrit;
|
||||
double HICUMbetadc;
|
||||
|
||||
|
|
@ -367,10 +371,16 @@ typedef struct sHICUMinstance {
|
|||
#define HICUMvrth HICUMstate+67
|
||||
#define HICUMicth_Vrth HICUMstate+68
|
||||
|
||||
//#define HICUMvbxf HICUMstate+73
|
||||
//#define HICUMvbxf1 HICUMstate+74
|
||||
//#define HICUMvbxf2 HICUMstate+75
|
||||
#define HICUMnumStates 69
|
||||
#define HICUMvxf HICUMstate+69
|
||||
#define HICUMqxf HICUMstate+70
|
||||
#define HICUMcqxf HICUMstate+71
|
||||
#define HICUMgqxf HICUMstate+72
|
||||
#define HICUMixf_Vbiei HICUMstate+73
|
||||
#define HICUMixf_Vbici HICUMstate+74
|
||||
|
||||
#define HICUMvxf1 HICUMstate+75
|
||||
#define HICUMvxf2 HICUMstate+76
|
||||
#define HICUMnumStates 77
|
||||
|
||||
/* per model data */
|
||||
typedef struct sHICUMmodel { /* model structure for a hicum */
|
||||
|
|
@ -426,8 +436,10 @@ typedef struct sHICUMmodel { /* model structure for a hicum */
|
|||
//Base-Collector avalanche current
|
||||
double HICUMfavl;
|
||||
double HICUMqavl;
|
||||
double HICUMkavl;
|
||||
double HICUMalfav;
|
||||
double HICUMalqav;
|
||||
double HICUMalkav;
|
||||
|
||||
//Series resistances
|
||||
double HICUMrbi0;
|
||||
|
|
@ -602,8 +614,10 @@ typedef struct sHICUMmodel { /* model structure for a hicum */
|
|||
//Base-Collector avalanche current
|
||||
unsigned HICUMfavlGiven : 1;
|
||||
unsigned HICUMqavlGiven : 1;
|
||||
unsigned HICUMkavlGiven : 1;
|
||||
unsigned HICUMalfavGiven : 1;
|
||||
unsigned HICUMalqavGiven : 1;
|
||||
unsigned HICUMalkavGiven : 1;
|
||||
|
||||
//Series resistances
|
||||
unsigned HICUMrbi0Given : 1;
|
||||
|
|
@ -798,8 +812,10 @@ enum {
|
|||
//Base-Collector avalanche current
|
||||
HICUM_MOD_FAVL,
|
||||
HICUM_MOD_QAVL,
|
||||
HICUM_MOD_KAVL,
|
||||
HICUM_MOD_ALFAV,
|
||||
HICUM_MOD_ALQAV,
|
||||
HICUM_MOD_ALKAV,
|
||||
|
||||
//Series resistances
|
||||
HICUM_MOD_RBI0,
|
||||
|
|
@ -944,9 +960,9 @@ enum {
|
|||
HICUM_QUEST_BASEBINODE,
|
||||
HICUM_QUEST_EMITEINODE,
|
||||
HICUM_QUEST_SUBSSINODE,
|
||||
// HICUM_QUEST_XFNODE,
|
||||
// HICUM_QUEST_XF1NODE,
|
||||
// HICUM_QUEST_XF2NODE,
|
||||
HICUM_QUEST_XFNODE,
|
||||
HICUM_QUEST_XF1NODE,
|
||||
HICUM_QUEST_XF2NODE,
|
||||
HICUM_QUEST_VBE,
|
||||
HICUM_QUEST_VBC,
|
||||
HICUM_QUEST_CC,
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ Spice3 Implementation: 2019 Dietmar Warning
|
|||
#define DFa_fj 1.921812
|
||||
#define RTOLC 1.0e-5
|
||||
#define l_itmax 100
|
||||
#define LN_EXP_LIMIT 11.0
|
||||
#define MIN_R 0.001
|
||||
|
||||
void QJMODF(double, double, double, double, double, double, double *, double *, double *);
|
||||
|
|
@ -506,15 +505,16 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
int l_it;
|
||||
|
||||
//NQS
|
||||
// double Ixf1,Ixf2,Qxf1,Qxf2;
|
||||
double Ixf1,Ixf2,Qxf1,Qxf2;
|
||||
double Itxf, Qdeix;
|
||||
// double Vxf, Ixf, Qxf;
|
||||
double Vxf, Ixf, Qxf;
|
||||
|
||||
double hjei_vbe;
|
||||
|
||||
double Vbiei, Vbici, Vciei, Vbpei, Vbpbi, Vbpci, Vsici, Vbci, Vsc;
|
||||
|
||||
double qjcx0_t_i, qjcx0_t_ii;
|
||||
// Model flags
|
||||
int use_aval;
|
||||
|
||||
//end of variables
|
||||
|
||||
|
|
@ -537,7 +537,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
int ichk1, ichk2, ichk3, ichk4, ichk5;
|
||||
int error;
|
||||
double Vbe, Vcic, Vbbp, Veie, Vsis, Vbpe;
|
||||
// double Vbxf, Vbxf1, Vbxf2;
|
||||
|
||||
double Ibiei, Ibiei_Vbiei;
|
||||
double Ibici, Ibici_Vbici;
|
||||
|
|
@ -553,7 +552,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double Ibpsi, Ibpsi_Vbpci, Ibpsi_Vsici;
|
||||
double Icic_Vcic;
|
||||
double Ibci, Ibci_Vbci;
|
||||
// double Icxf, Icxf1, Icxf2, Ibxf, Ibxf1, Ibxf2;
|
||||
double hjei_vbe_Vbiei, ibet_Vbpei=0.0, ibet_Vbiei=0.0, ibh_rec_Vbiei;
|
||||
double irei_Vbiei, irep_Vbpei, iavl_Vbici, rbi_Vbiei, rbi_Vbici;
|
||||
double Q_0_Vbiei, Q_0_Vbici, b_q_Vbiei, b_q_Vbici;
|
||||
|
|
@ -588,6 +586,12 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double cqbcpar1, gqbcpar1;
|
||||
double cqbcpar2, gqbcpar2;
|
||||
double cqsu, gqsu;
|
||||
double qjcx0_t_i, qjcx0_t_ii;
|
||||
|
||||
//NQS
|
||||
double Vbxf, Vbxf1, Vbxf2;
|
||||
double Qxf_Vxf;
|
||||
double Iqxf, Iqxf_Vxf, Iqxf1, Iqxf2;
|
||||
|
||||
double Ith, Vrth, Icth, Icth_Vrth, delvrth;
|
||||
|
||||
|
|
@ -616,44 +620,55 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double Ith_Vbbp;
|
||||
|
||||
/* loop through all the models */
|
||||
for( ; model != NULL; model = HICUMnextModel(model)) {
|
||||
for (; model != NULL; model = HICUMnextModel(model)) {
|
||||
|
||||
// Model_initialization
|
||||
// Model_initialization
|
||||
|
||||
//Depletion capacitance splitting at b-c junction
|
||||
//Capacitances at peripheral and external base node
|
||||
C_1 = (1.0-model->HICUMfbcpar)*(model->HICUMcjcx0+model->HICUMcbcpar);
|
||||
// Depletion capacitance splitting at b-c junction
|
||||
// Capacitances at peripheral and external base node
|
||||
C_1 = (1.0 - model->HICUMfbcpar) *
|
||||
(model->HICUMcjcx0 + model->HICUMcbcpar);
|
||||
if (C_1 >= model->HICUMcbcpar) {
|
||||
cbcpar1 = model->HICUMcbcpar;
|
||||
cbcpar2 = 0.0;
|
||||
cjcx01 = C_1-model->HICUMcbcpar;
|
||||
cjcx02 = model->HICUMcjcx0-cjcx01;
|
||||
} else {
|
||||
cjcx01 = C_1 - model->HICUMcbcpar;
|
||||
cjcx02 = model->HICUMcjcx0 - cjcx01;
|
||||
}
|
||||
else {
|
||||
cbcpar1 = C_1;
|
||||
cbcpar2 = model->HICUMcbcpar-cbcpar1;
|
||||
cjcx01 = 0.0;
|
||||
cjcx02 = model->HICUMcjcx0;
|
||||
cbcpar2 = model->HICUMcbcpar - cbcpar1;
|
||||
cjcx01 = 0.0;
|
||||
cjcx02 = model->HICUMcjcx0;
|
||||
}
|
||||
|
||||
//Parasitic b-e capacitance partitioning: No temperature dependence
|
||||
cbepar2 = model->HICUMfbepar*model->HICUMcbepar;
|
||||
cbepar1 = model->HICUMcbepar-cbepar2;
|
||||
// Parasitic b-e capacitance partitioning: No temperature dependence
|
||||
cbepar2 = model->HICUMfbepar * model->HICUMcbepar;
|
||||
cbepar1 = model->HICUMcbepar - cbepar2;
|
||||
|
||||
//Avoid divide-by-zero and define infinity other way
|
||||
//High current correction for 2D and 3D effects
|
||||
// Avoid divide-by-zero and define infinity other way
|
||||
// High current correction for 2D and 3D effects
|
||||
if (model->HICUMich != 0.0) {
|
||||
Oich = 1.0/model->HICUMich;
|
||||
} else {
|
||||
Oich = 0.0;
|
||||
Oich = 1.0 / model->HICUMich;
|
||||
}
|
||||
else {
|
||||
Oich = 0.0;
|
||||
}
|
||||
|
||||
//Base current recombination time constant at b-c barrier
|
||||
// Base current recombination time constant at b-c barrier
|
||||
if (model->HICUMtbhrec != 0.0) {
|
||||
Otbhrec = 1.0/model->HICUMtbhrec;
|
||||
} else {
|
||||
Otbhrec = 1.0 / model->HICUMtbhrec;
|
||||
}
|
||||
else {
|
||||
Otbhrec = 0.0;
|
||||
}
|
||||
|
||||
// Turn avalanche calculation on depending of parameters
|
||||
if ((model->HICUMfavl > 0.0) && (model->HICUMcjci0 > 0.0)) {
|
||||
use_aval = 1;
|
||||
} else {
|
||||
use_aval = 0;
|
||||
}
|
||||
|
||||
// end of Model_initialization
|
||||
|
||||
/* loop through all the instances of the model */
|
||||
|
|
@ -706,9 +721,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vsis = model->HICUMtype*(
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsSINode)-
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsNode));
|
||||
// Vbxf = *(ckt->CKTstate0 + here->HICUMvbxf);
|
||||
// Vbxf1 = *(ckt->CKTstate0 + here->HICUMvbxf1);
|
||||
// Vbxf2 = *(ckt->CKTstate0 + here->HICUMvbxf2);
|
||||
Vbxf = *(ckt->CKTstate0 + here->HICUMvxf);
|
||||
Vbxf1 = *(ckt->CKTstate0 + here->HICUMvxf1);
|
||||
Vbxf2 = *(ckt->CKTstate0 + here->HICUMvxf2);
|
||||
if (model->HICUMflsh)
|
||||
Vrth = *(ckt->CKTstate0 + here->HICUMvrth);
|
||||
} else if(ckt->CKTmode & MODEINITTRAN) {
|
||||
|
|
@ -744,9 +759,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vsis = model->HICUMtype*(
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsSINode)-
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsNode));
|
||||
// Vbxf = *(ckt->CKTstate1 + here->HICUMvbxf);
|
||||
// Vbxf1 = *(ckt->CKTstate1 + here->HICUMvbxf1);
|
||||
// Vbxf2 = *(ckt->CKTstate1 + here->HICUMvbxf2);
|
||||
Vbxf = *(ckt->CKTstate1 + here->HICUMvxf);
|
||||
Vbxf1 = *(ckt->CKTstate1 + here->HICUMvxf1);
|
||||
Vbxf2 = *(ckt->CKTstate1 + here->HICUMvxf2);
|
||||
if (model->HICUMflsh)
|
||||
Vrth = *(ckt->CKTstate1 + here->HICUMvrth);
|
||||
} else if((ckt->CKTmode & MODEINITJCT) &&
|
||||
|
|
@ -759,7 +774,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vbpbi=Vbbp=Vbpe=0.0;
|
||||
Vcic=Veie=Vsis=0.0;
|
||||
Vrth=0.0,Icth=0.0,Icth_Vrth=0.0;
|
||||
// Vbxf=Vbxf1=Vbxf2=0.0;
|
||||
Vbxf=Vbxf1=Vbxf2=0.0;
|
||||
} else if((ckt->CKTmode & MODEINITJCT) && (here->HICUMoff==0)) {
|
||||
Vbe=Vbiei=model->HICUMtype*here->HICUMtVcrit;
|
||||
Vciei=0.0;
|
||||
|
|
@ -769,7 +784,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vbpbi=Vbbp=Vbpe=0.0;
|
||||
Vcic=Veie=Vsis=0.0;
|
||||
Vrth=0.0,Icth=0.0,Icth_Vrth=0.0;
|
||||
// Vbxf=Vbxf1=Vbxf2=0.0;
|
||||
Vbxf=Vbxf1=Vbxf2=0.0;
|
||||
} else if((ckt->CKTmode & MODEINITJCT) ||
|
||||
( (ckt->CKTmode & MODEINITFIX) && (here->HICUMoff!=0))) {
|
||||
Vbe=0.0;
|
||||
|
|
@ -781,7 +796,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vbpbi=Vbbp=Vbpe=0.0;
|
||||
Vcic=Veie=Vsis=0.0;
|
||||
Vrth=0.0,Icth=0.0,Icth_Vrth=0.0;
|
||||
// Vbxf=Vbxf1=Vbxf2=0.0;
|
||||
Vbxf=Vbxf1=Vbxf2=0.0;
|
||||
} else {
|
||||
#ifndef PREDICTOR
|
||||
if(ckt->CKTmode & MODEINITPRED) {
|
||||
|
|
@ -799,16 +814,12 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
xfact * *(ckt->CKTstate2 + here->HICUMvsici);
|
||||
Vbpbi = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvbpbi)-
|
||||
xfact * *(ckt->CKTstate2 + here->HICUMvbpbi);
|
||||
// Vbxf = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvbxf)-
|
||||
// xfact * *(ckt->CKTstate2 + here->HICUMvbxf);
|
||||
// Vbxf1 = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvbxf1)-
|
||||
// xfact * *(ckt->CKTstate2 + here->HICUMvbxf1);
|
||||
// Vbxf2 = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvbxf2)-
|
||||
// xfact * *(ckt->CKTstate2 + here->HICUMvbxf2);
|
||||
if (model->HICUMflsh) {
|
||||
Vrth = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HICUMvrth))
|
||||
- ( xfact * (*(ckt->CKTstate2 + here->HICUMvrth)));
|
||||
}
|
||||
Vbxf = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf)-
|
||||
xfact * *(ckt->CKTstate2 + here->HICUMvxf);
|
||||
Vbxf1 = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf1)-
|
||||
xfact * *(ckt->CKTstate2 + here->HICUMvxf1);
|
||||
Vbxf2 = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf2)-
|
||||
xfact * *(ckt->CKTstate2 + here->HICUMvxf2);
|
||||
*(ckt->CKTstate0 + here->HICUMvbiei) =
|
||||
*(ckt->CKTstate1 + here->HICUMvbiei);
|
||||
*(ckt->CKTstate0 + here->HICUMvbpei) =
|
||||
|
|
@ -821,16 +832,12 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*(ckt->CKTstate1 + here->HICUMvbpbi);
|
||||
*(ckt->CKTstate0 + here->HICUMvsici) =
|
||||
*(ckt->CKTstate1 + here->HICUMvsici);
|
||||
// *(ckt->CKTstate0 + here->HICUMvbxf) =
|
||||
// *(ckt->CKTstate1 + here->HICUMvbxf);
|
||||
// *(ckt->CKTstate0 + here->HICUMvbxf1) =
|
||||
// *(ckt->CKTstate1 + here->HICUMvbxf1);
|
||||
// *(ckt->CKTstate0 + here->HICUMvbxf2) =
|
||||
// *(ckt->CKTstate1 + here->HICUMvbxf2);
|
||||
if (model->HICUMflsh) {
|
||||
*(ckt->CKTstate0 + here->HICUMvrth) =
|
||||
*(ckt->CKTstate1 + here->HICUMvrth);
|
||||
}
|
||||
*(ckt->CKTstate0 + here->HICUMvxf) =
|
||||
*(ckt->CKTstate1 + here->HICUMvxf);
|
||||
*(ckt->CKTstate0 + here->HICUMvxf1) =
|
||||
*(ckt->CKTstate1 + here->HICUMvxf1);
|
||||
*(ckt->CKTstate0 + here->HICUMvxf2) =
|
||||
*(ckt->CKTstate1 + here->HICUMvxf2);
|
||||
*(ckt->CKTstate0 + here->HICUMibiei) =
|
||||
*(ckt->CKTstate1 + here->HICUMibiei);
|
||||
*(ckt->CKTstate0 + here->HICUMibiei_Vbiei) =
|
||||
|
|
@ -877,9 +884,22 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*(ckt->CKTstate1 + here->HICUMieie);
|
||||
*(ckt->CKTstate0 + here->HICUMisis_Vsis) =
|
||||
*(ckt->CKTstate1 + here->HICUMisis_Vsis);
|
||||
if (model->HICUMflsh)
|
||||
//NQS
|
||||
*(ckt->CKTstate0 + here->HICUMgqxf) =
|
||||
*(ckt->CKTstate1 + here->HICUMgqxf);
|
||||
*(ckt->CKTstate0 + here->HICUMixf_Vbiei) =
|
||||
*(ckt->CKTstate1 + here->HICUMixf_Vbiei);
|
||||
*(ckt->CKTstate0 + here->HICUMixf_Vbici) =
|
||||
*(ckt->CKTstate1 + here->HICUMixf_Vbici);
|
||||
|
||||
if (model->HICUMflsh) {
|
||||
Vrth = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HICUMvrth))
|
||||
- ( xfact * (*(ckt->CKTstate2 + here->HICUMvrth)));
|
||||
*(ckt->CKTstate0 + here->HICUMvrth) =
|
||||
*(ckt->CKTstate1 + here->HICUMvrth);
|
||||
*(ckt->CKTstate0 + here->HICUMqcth) =
|
||||
*(ckt->CKTstate1 + here->HICUMqcth);
|
||||
}
|
||||
} else {
|
||||
#endif /* PREDICTOR */
|
||||
/*
|
||||
|
|
@ -903,9 +923,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vsici = model->HICUMtype*(
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsSINode)-
|
||||
*(ckt->CKTrhsOld+here->HICUMcollCINode));
|
||||
// Vbxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||
// Vbxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||
// Vbxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||
Vbxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||
Vbxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||
Vbxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||
Vciei = Vbiei - Vbici;
|
||||
if (model->HICUMflsh)
|
||||
Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode);
|
||||
|
|
@ -944,9 +964,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vsis = model->HICUMtype*(
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsSINode)-
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsNode));
|
||||
// Vbxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||
// Vbxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||
// Vbxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||
Vbxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||
Vbxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||
Vbxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||
if (model->HICUMflsh)
|
||||
Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode);
|
||||
ibieihat = *(ckt->CKTstate0 + here->HICUMibiei) +
|
||||
|
|
@ -1348,23 +1368,40 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
HICDIO(here->HICUMvt,model->HICUMibcis,here->HICUMibcis_t,model->HICUMmbci,Vbici,&ibci,&Ibici_Vbici);
|
||||
|
||||
//Avalanche current
|
||||
if((Vbici < 0.0) && (here->HICUMfavl_t > 0.0) && (here->HICUMcjci0_t > 0.0)) { // HICAVL
|
||||
if (use_aval == 1) { // HICAVL
|
||||
double v_bord,v_q,U0,av,avl,avl_Vbici,v_q_Vbici,av_Vbici;
|
||||
v_bord = here->HICUMvdci_t-Vbici;
|
||||
v_q = here->HICUMqavl_t/Cjci;
|
||||
v_q_Vbici = -here->HICUMqavl_t*Cjci_Vbici/(Cjci*Cjci);
|
||||
U0 = here->HICUMqavl_t/here->HICUMcjci0_t;
|
||||
if(v_bord > U0) {
|
||||
av = here->HICUMfavl_t*exp(-v_q/U0);
|
||||
av_Vbici = -av*v_q_Vbici/U0;
|
||||
avl = av*(U0+(1.0+v_q/U0)*(v_bord-U0));
|
||||
avl_Vbici = av*((-v_q/U0-1)+(v_bord-U0)*v_q_Vbici/U0)+((v_q/U0+1)*(v_bord-U0)+U0)*av_Vbici;
|
||||
} else {
|
||||
avl = here->HICUMfavl_t*v_bord*exp(-v_q/v_bord);
|
||||
avl_Vbici = avl*(-v_q/(v_bord*v_bord)-v_q_Vbici/v_bord)-avl/v_bord;
|
||||
if (v_bord > 0) {
|
||||
v_q = here->HICUMqavl_t/Cjci;
|
||||
v_q_Vbici = -here->HICUMqavl_t*Cjci_Vbici/(Cjci*Cjci);
|
||||
U0 = here->HICUMqavl_t/here->HICUMcjci0_t;
|
||||
if(v_bord > U0) {
|
||||
av = here->HICUMfavl_t*exp(-v_q/U0);
|
||||
av_Vbici = -av*v_q_Vbici/U0;
|
||||
avl = av*(U0+(1.0+v_q/U0)*(v_bord-U0));
|
||||
avl_Vbici = av*((-v_q/U0-1)+(v_bord-U0)*v_q_Vbici/U0)+((v_q/U0+1)*(v_bord-U0)+U0)*av_Vbici;
|
||||
} else {
|
||||
avl = here->HICUMfavl_t*v_bord*exp(-v_q/v_bord);
|
||||
avl_Vbici = avl*(-v_q/(v_bord*v_bord)-v_q_Vbici/v_bord)-avl/v_bord;
|
||||
}
|
||||
/* This model turns strong avalanche on. The parameter kavl can turn this
|
||||
* model extension off (kavl = 0). Although this is numerically stable, a
|
||||
* conditional statement is applied in order to reduce the numerical over-
|
||||
* head for simulations without the new model.
|
||||
*/
|
||||
if (model->HICUMkavl > 0) { // HICAVLHIGH
|
||||
double denom,sq_smooth,hl;
|
||||
denom = 1-here->HICUMkavl_t*avl;
|
||||
// Avoid denom < 0 using a smoothing function
|
||||
sq_smooth = sqrt(denom*denom+0.01);
|
||||
hl = 0.5*(denom+sq_smooth);
|
||||
iavl = itf*avl/hl;
|
||||
iavl_Vbici = itf*avl_Vbici/hl;
|
||||
} else {
|
||||
iavl = itf*avl;
|
||||
iavl_Vbici = itf*avl_Vbici;
|
||||
}
|
||||
}
|
||||
iavl = itf*avl;
|
||||
iavl_Vbici = itf*avl_Vbici;
|
||||
} else {
|
||||
iavl = 0.0;
|
||||
iavl_Vbici = 0.0;
|
||||
|
|
@ -1537,31 +1574,33 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
|
||||
// Excess Phase calculation
|
||||
|
||||
// if ((model->HICUMflnqs != 0 || model->HICUMflcomp == 0.0 || model->HICUMflcomp == 2.1) && Tf != 0 && (model->HICUMalit > 0 || model->HICUMalqf > 0)) {
|
||||
// double Vxf1, Vxf2, fact;
|
||||
// Vxf1 = Vbxf1;
|
||||
// Vxf2 = Vbxf2;
|
||||
//
|
||||
// Ixf1 = (Vxf2-itf)/Tf*model->HICUMt0;
|
||||
// Ixf2 = (Vxf2-Vxf1)/Tf*model->HICUMt0;
|
||||
// Qxf1 = model->HICUMalit*Vxf1*model->HICUMt0;
|
||||
// Qxf2 = model->HICUMalit*Vxf2/3*model->HICUMt0;
|
||||
// Itxf = Vxf2;
|
||||
//
|
||||
// Vxf = Vbxf; //for RC nw
|
||||
// fact = model->HICUMt0/Tf; //for RC nw
|
||||
// Ixf = (Vxf - Qdei)*fact; //for RC nw
|
||||
// Qxf = model->HICUMalqf*Vxf*model->HICUMt0; //for RC nw
|
||||
// Qdeix = Vxf; //for RC nw
|
||||
// } else {
|
||||
// Ixf1 = Vbxf1;
|
||||
// Ixf2 = Vbxf2;
|
||||
// Qxf1 = 0;
|
||||
// Qxf2 = 0;
|
||||
//
|
||||
// Ixf = Vbxf;
|
||||
// Qxf = 0;
|
||||
// }
|
||||
if ((model->HICUMflnqs != 0 || model->HICUMflcomp == 0.0 || model->HICUMflcomp == 2.1) && Tf != 0 && (model->HICUMalit > 0 || model->HICUMalqf > 0)) {
|
||||
double Vxf1, Vxf2, fact;
|
||||
Vxf1 = Vbxf1;
|
||||
Vxf2 = Vbxf2;
|
||||
|
||||
Ixf1 = (Vxf2-itf)/Tf*model->HICUMt0;
|
||||
Ixf2 = (Vxf2-Vxf1)/Tf*model->HICUMt0;
|
||||
Qxf1 = model->HICUMalit*Vxf1*model->HICUMt0;
|
||||
Qxf2 = model->HICUMalit*Vxf2/3*model->HICUMt0;
|
||||
Itxf = Vxf2;
|
||||
|
||||
Vxf = Vbxf; //for RC nw
|
||||
fact = model->HICUMt0/Tf; //for RC nw
|
||||
Ixf = (Vxf - Qdei)*fact; //for RC nw
|
||||
Qxf = model->HICUMalqf*Vxf*model->HICUMt0; //for RC nw
|
||||
Qxf_Vxf = model->HICUMalqf*model->HICUMt0; //for RC nw
|
||||
Qdeix = Vxf; //for RC nw
|
||||
} else {
|
||||
Ixf1 = Vbxf1;
|
||||
Ixf2 = Vbxf2;
|
||||
Qxf1 = 0;
|
||||
Qxf2 = 0;
|
||||
|
||||
Ixf = Vbxf;
|
||||
Qxf = 0;
|
||||
Qxf_Vxf = 0;
|
||||
}
|
||||
|
||||
// end of Model_evaluation
|
||||
|
||||
|
|
@ -1676,14 +1715,13 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
}
|
||||
// ********************************************
|
||||
|
||||
// // NQS effect
|
||||
// NQS effect
|
||||
// Ibxf1 = Ixf1;
|
||||
//// Icxf1 += ddt(Qxf1);
|
||||
// Icxf1 += ddt(Qxf1);
|
||||
// Ibxf2 = Ixf2;
|
||||
//// Icxf2 += ddt(Qxf2);
|
||||
//
|
||||
// Ibxf = Ixf; //for RC nw
|
||||
//// Icxf += ddt(Qxf); //for RC nw
|
||||
// Icxf2 += ddt(Qxf2);
|
||||
|
||||
// Icxf += ddt(Qxf); //for RC nw
|
||||
|
||||
// end of Load_sources
|
||||
|
||||
|
|
@ -1775,6 +1813,8 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*(ckt->CKTstate0 + here->HICUMqbcpar1) = Qbcpar1;
|
||||
*(ckt->CKTstate0 + here->HICUMqbcpar2) = Qbcpar2;
|
||||
*(ckt->CKTstate0 + here->HICUMqsu) = Qsu;
|
||||
//NQS
|
||||
*(ckt->CKTstate0 + here->HICUMqxf) = Qxf;
|
||||
if (model->HICUMflsh)
|
||||
*(ckt->CKTstate0 + here->HICUMqcth) = Qcth;
|
||||
|
||||
|
|
@ -1791,6 +1831,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
here->HICUMcapscp = Cscp;
|
||||
here->HICUMcapsu = model->HICUMcsu;
|
||||
here->HICUMcapcth = model->HICUMcth;
|
||||
here->HICUMcapscp = Cscp;
|
||||
|
||||
/*
|
||||
* store small-signal parameters
|
||||
|
|
@ -1814,6 +1855,8 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*(ckt->CKTstate0 + here->HICUMcqbcpar1) = Qbcpar1_Vbci;
|
||||
*(ckt->CKTstate0 + here->HICUMcqbcpar2) = Qbcpar2_Vbpci;
|
||||
*(ckt->CKTstate0 + here->HICUMcqsu) = Qsu_Vsis;
|
||||
//NQS
|
||||
*(ckt->CKTstate0 + here->HICUMcqxf) = Qxf_Vxf;
|
||||
if (model->HICUMflsh)
|
||||
*(ckt->CKTstate0 + here->HICUMcqcth) = model->HICUMcth;
|
||||
continue; /* go to 1000 */
|
||||
|
|
@ -1854,6 +1897,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*(ckt->CKTstate0 + here->HICUMqbcpar2) ;
|
||||
*(ckt->CKTstate1 + here->HICUMqsu) =
|
||||
*(ckt->CKTstate0 + here->HICUMqsu) ;
|
||||
//NQS
|
||||
*(ckt->CKTstate1 + here->HICUMqxf) =
|
||||
*(ckt->CKTstate0 + here->HICUMqxf) ;
|
||||
if (model->HICUMflsh)
|
||||
*(ckt->CKTstate1 + here->HICUMqcth) =
|
||||
*(ckt->CKTstate0 + here->HICUMqcth) ;
|
||||
|
|
@ -1912,6 +1958,11 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
if(error) return(error);
|
||||
Isc_Vsc = geq;
|
||||
Isc = *(ckt->CKTstate0 + here->HICUMcqscp);
|
||||
//NQS
|
||||
error = NIintegrate(ckt,&geq,&ceq,Qxf_Vxf,here->HICUMqxf);
|
||||
if(error) return(error);
|
||||
Iqxf_Vxf = geq;
|
||||
Iqxf = *(ckt->CKTstate0 + here->HICUMcqxf);
|
||||
|
||||
if (model->HICUMflsh)
|
||||
{
|
||||
|
|
@ -2242,6 +2293,27 @@ c Branch: sis, Stamp element: Rsu
|
|||
*(here->HICUMsubsSISubsSIPtr) += Isis_Vsis;
|
||||
*(here->HICUMsubsSISubsPtr) += -Isis_Vsis;
|
||||
*(here->HICUMsubsSubsSIPtr) += -Isis_Vsis;
|
||||
//NQS
|
||||
/*
|
||||
c Branch: xf, Stamp element: Ixf
|
||||
*/
|
||||
rhs_current = model->HICUMtype * Ixf;
|
||||
*(ckt->CKTrhs + here->HICUMxfNode) += -rhs_current;
|
||||
// *(here->HICUMxfTempPtr) += -Ixf_Vrth;
|
||||
// *(here->HICUMxfBaseBIPtr) += -Ixf_Vbiei;
|
||||
// *(here->HICUMxfEmitEIPtr) += +Ixf_Vbiei;
|
||||
// *(here->HICUMxfBaseBIPtr) += -Ixf_Vbici;
|
||||
// *(here->HICUMxfCollCIPtr) += +Ixf_Vbici;
|
||||
/*
|
||||
c Branch: xf, Stamp element: Qxf
|
||||
*/
|
||||
rhs_current = model->HICUMtype * (Iqxf - Iqxf_Vxf*Vxf);
|
||||
*(ckt->CKTrhs + here->HICUMxfNode) += -rhs_current;
|
||||
*(here->HICUMxfXfPtr) += Iqxf_Vxf;
|
||||
/*
|
||||
c Branch: xf, Stamp element: Rxf
|
||||
*/
|
||||
*(here->HICUMxfXfPtr) += 1.0;
|
||||
|
||||
if (model->HICUMflsh) {
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -135,12 +135,18 @@ HICUMmAsk(CKTcircuit *ckt, GENmodel *instPtr, int which, IFvalue *value)
|
|||
case HICUM_MOD_QAVL:
|
||||
value->rValue = here->HICUMqavl;
|
||||
return(OK);
|
||||
case HICUM_MOD_KAVL:
|
||||
value->rValue = here->HICUMkavl;
|
||||
return(OK);
|
||||
case HICUM_MOD_ALFAV:
|
||||
value->rValue = here->HICUMalfav;
|
||||
return(OK);
|
||||
case HICUM_MOD_ALQAV:
|
||||
value->rValue = here->HICUMalqav;
|
||||
return(OK);
|
||||
case HICUM_MOD_ALKAV:
|
||||
value->rValue = here->HICUMalkav;
|
||||
return(OK);
|
||||
|
||||
//Series resistances
|
||||
case HICUM_MOD_RBI0:
|
||||
|
|
|
|||
|
|
@ -171,6 +171,10 @@ HICUMmParam(int param, IFvalue *value, GENmodel *inModel)
|
|||
model->HICUMqavl = value->rValue;
|
||||
model->HICUMqavlGiven = TRUE;
|
||||
break;
|
||||
case HICUM_MOD_KAVL:
|
||||
model->HICUMkavl = value->rValue;
|
||||
model->HICUMkavlGiven = TRUE;
|
||||
break;
|
||||
case HICUM_MOD_ALFAV:
|
||||
model->HICUMalfav = value->rValue;
|
||||
model->HICUMalfavGiven = TRUE;
|
||||
|
|
@ -179,6 +183,10 @@ HICUMmParam(int param, IFvalue *value, GENmodel *inModel)
|
|||
model->HICUMalqav = value->rValue;
|
||||
model->HICUMalqavGiven = TRUE;
|
||||
break;
|
||||
case HICUM_MOD_ALKAV:
|
||||
model->HICUMalkav = value->rValue;
|
||||
model->HICUMalkavGiven = TRUE;
|
||||
break;
|
||||
|
||||
//Series resistances
|
||||
case HICUM_MOD_RBI0:
|
||||
|
|
|
|||
|
|
@ -38,433 +38,441 @@ HICUMsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|||
for( ; model != NULL; model = HICUMnextModel(model)) {
|
||||
|
||||
//Circuit simulator specific parameters
|
||||
if(model->HICUMtype != NPN && model->HICUMtype != PNP) {
|
||||
if(model->HICUMtype != NPN && model->HICUMtype != PNP)
|
||||
model->HICUMtype = NPN;
|
||||
}
|
||||
if(!model->HICUMtnomGiven) {
|
||||
model->HICUMtnom = ckt->CKTnomTemp;
|
||||
}
|
||||
//Transfer current
|
||||
if(!model->HICUMc10Given) {
|
||||
model->HICUMc10 = 2e-30;
|
||||
}
|
||||
if(!model->HICUMqp0Given) {
|
||||
model->HICUMqp0 = 2e-14;
|
||||
}
|
||||
if(!model->HICUMichGiven) {
|
||||
model->HICUMich = 0.0;
|
||||
}
|
||||
if(!model->HICUMhf0Given) {
|
||||
model->HICUMhf0 = 1.0;
|
||||
}
|
||||
if(!model->HICUMhfeGiven) {
|
||||
model->HICUMhfe = 1.0;
|
||||
}
|
||||
if(!model->HICUMhfcGiven) {
|
||||
model->HICUMhfc = 1.0;
|
||||
}
|
||||
if(!model->HICUMhjeiGiven) {
|
||||
model->HICUMhjei = 1.0;
|
||||
}
|
||||
if(!model->HICUMahjeiGiven) {
|
||||
model->HICUMahjei = 0.0;
|
||||
}
|
||||
if(!model->HICUMrhjeiGiven) {
|
||||
model->HICUMrhjei = 1.0;
|
||||
}
|
||||
if(!model->HICUMhjciGiven) {
|
||||
model->HICUMhjci = 1.0;
|
||||
}
|
||||
//Base-Emitter diode;
|
||||
if(!model->HICUMibeisGiven) {
|
||||
model->HICUMibeis = 1e-18;
|
||||
}
|
||||
if(!model->HICUMmbeiGiven) {
|
||||
model->HICUMmbei = 1.0;
|
||||
}
|
||||
if(!model->HICUMireisGiven) {
|
||||
model->HICUMireis = 0.0;
|
||||
}
|
||||
if(!model->HICUMmreiGiven) {
|
||||
model->HICUMmrei = 2.0;
|
||||
}
|
||||
if(!model->HICUMibepsGiven) {
|
||||
model->HICUMibeps = 0.0;
|
||||
}
|
||||
if(!model->HICUMmbepGiven) {
|
||||
model->HICUMmbep = 1.0;
|
||||
}
|
||||
if(!model->HICUMirepsGiven) {
|
||||
model->HICUMireps = 0.0;
|
||||
}
|
||||
if(!model->HICUMmrepGiven) {
|
||||
model->HICUMmrep = 2.0;
|
||||
}
|
||||
if(!model->HICUMmcfGiven) {
|
||||
model->HICUMmcf = 1.0;
|
||||
}
|
||||
//Transit time for excess recombination current at b-c barrier
|
||||
if(!model->HICUMtbhrecGiven) {
|
||||
model->HICUMtbhrec = 0.0;
|
||||
}
|
||||
//Base-Collector diode currents
|
||||
if(!model->HICUMibcisGiven) {
|
||||
model->HICUMibcis = 1e-16;
|
||||
}
|
||||
if(!model->HICUMmbciGiven) {
|
||||
model->HICUMmbci = 1.0;
|
||||
}
|
||||
if(!model->HICUMibcxsGiven) {
|
||||
model->HICUMibcxs = 0.0;
|
||||
}
|
||||
if(!model->HICUMmbcxGiven) {
|
||||
model->HICUMmbcx = 1.0;
|
||||
}
|
||||
//Base-Emitter tunneling current
|
||||
if(!model->HICUMibetsGiven) {
|
||||
model->HICUMibets = 0.0;
|
||||
}
|
||||
if(!model->HICUMabetGiven) {
|
||||
model->HICUMabet = 40.0;
|
||||
}
|
||||
if(!model->HICUMtunodeGiven) {
|
||||
model->HICUMtunode = 1;
|
||||
}
|
||||
//Base-Collector avalanche current
|
||||
if(!model->HICUMfavlGiven) {
|
||||
model->HICUMfavl = 0.0;
|
||||
}
|
||||
if(!model->HICUMqavlGiven) {
|
||||
model->HICUMqavl = 0.0;
|
||||
}
|
||||
if(!model->HICUMalfavGiven) {
|
||||
model->HICUMalfav = 0.0;
|
||||
}
|
||||
if(!model->HICUMalqavGiven) {
|
||||
model->HICUMalqav = 0.0;
|
||||
}
|
||||
//Series resistances
|
||||
if(!model->HICUMrbi0Given) {
|
||||
model->HICUMrbi0 = MIN_R;
|
||||
}
|
||||
if(!model->HICUMrbxGiven) {
|
||||
model->HICUMrbx = MIN_R;
|
||||
}
|
||||
if(!model->HICUMfgeoGiven) {
|
||||
model->HICUMfgeo = 0.6557;
|
||||
}
|
||||
if(!model->HICUMfdqr0Given) {
|
||||
model->HICUMfdqr0 = 0.0;
|
||||
}
|
||||
if(!model->HICUMfcrbiGiven) {
|
||||
model->HICUMfcrbi = 0.0;
|
||||
}
|
||||
if(!model->HICUMfqiGiven) {
|
||||
model->HICUMfqi = 1.0;
|
||||
}
|
||||
if(!model->HICUMreGiven) {
|
||||
model->HICUMre = MIN_R;
|
||||
}
|
||||
if(!model->HICUMrcxGiven) {
|
||||
model->HICUMrcx = MIN_R;
|
||||
}
|
||||
//Substrate transistor
|
||||
if(!model->HICUMitssGiven) {
|
||||
model->HICUMitss = 0.0;
|
||||
}
|
||||
if(!model->HICUMmsfGiven) {
|
||||
model->HICUMmsf = 1.0;
|
||||
}
|
||||
if(!model->HICUMiscsGiven) {
|
||||
model->HICUMiscs = 0.0;
|
||||
}
|
||||
if(!model->HICUMmscGiven) {
|
||||
model->HICUMmsc = 1.0;
|
||||
}
|
||||
if(!model->HICUMtsfGiven) {
|
||||
model->HICUMtsf = 0.0;
|
||||
}
|
||||
//Intra-device substrate coupling
|
||||
if(!model->HICUMrsuGiven) {
|
||||
model->HICUMrsu = MIN_R;
|
||||
}
|
||||
if(!model->HICUMcsuGiven) {
|
||||
model->HICUMcsu = 0.0;
|
||||
}
|
||||
//Depletion Capacitances
|
||||
if(!model->HICUMcjei0Given) {
|
||||
model->HICUMcjei0 = 1.0e-20;
|
||||
}
|
||||
if(!model->HICUMvdeiGiven) {
|
||||
model->HICUMvdei = 0.9;
|
||||
}
|
||||
if(!model->HICUMzeiGiven) {
|
||||
model->HICUMzei = 0.5;
|
||||
}
|
||||
if(!model->HICUMajeiGiven) {
|
||||
model->HICUMajei = 2.5;
|
||||
}
|
||||
if(!model->HICUMcjep0Given) {
|
||||
model->HICUMcjep0 = 1.0e-20;
|
||||
}
|
||||
if(!model->HICUMvdepGiven) {
|
||||
model->HICUMvdep = 0.9;
|
||||
}
|
||||
if(!model->HICUMzepGiven) {
|
||||
model->HICUMzep = 0.5;
|
||||
}
|
||||
if(!model->HICUMajepGiven) {
|
||||
model->HICUMajep = 2.5;
|
||||
}
|
||||
if(!model->HICUMcjci0Given) {
|
||||
model->HICUMcjci0 = 1.0e-20;
|
||||
}
|
||||
if(!model->HICUMvdciGiven) {
|
||||
model->HICUMvdci = 0.7;
|
||||
}
|
||||
if(!model->HICUMzciGiven) {
|
||||
model->HICUMzci = 0.4;
|
||||
}
|
||||
if(!model->HICUMvptciGiven) {
|
||||
model->HICUMvptci = 100.0;
|
||||
}
|
||||
if(!model->HICUMcjcx0Given) {
|
||||
model->HICUMcjcx0 = 1.0e-20;
|
||||
}
|
||||
if(!model->HICUMvdcxGiven) {
|
||||
model->HICUMvdcx = 0.7;
|
||||
}
|
||||
if(!model->HICUMzcxGiven) {
|
||||
model->HICUMzcx = 0.4;
|
||||
}
|
||||
if(!model->HICUMvptcxGiven) {
|
||||
model->HICUMvptcx = 100.0;
|
||||
}
|
||||
if(!model->HICUMfbcparGiven) {
|
||||
model->HICUMfbcpar = 0.0;
|
||||
}
|
||||
if(!model->HICUMfbeparGiven) {
|
||||
model->HICUMfbepar = 1.0;
|
||||
}
|
||||
if(!model->HICUMcjs0Given) {
|
||||
model->HICUMcjs0 = 0.0;
|
||||
}
|
||||
if(!model->HICUMvdsGiven) {
|
||||
model->HICUMvds = 0.6;
|
||||
}
|
||||
if(!model->HICUMzsGiven) {
|
||||
model->HICUMzs = 0.5;
|
||||
}
|
||||
if(!model->HICUMvptsGiven) {
|
||||
model->HICUMvpts = 100.0;
|
||||
}
|
||||
if(!model->HICUMcscp0Given) {
|
||||
model->HICUMcscp0 = 0.0;
|
||||
}
|
||||
if(!model->HICUMvdspGiven) {
|
||||
model->HICUMvdsp = 0.6;
|
||||
}
|
||||
if(!model->HICUMzspGiven) {
|
||||
model->HICUMzsp = 0.5;
|
||||
}
|
||||
if(!model->HICUMvptspGiven) {
|
||||
model->HICUMvptsp = 100.0;
|
||||
}
|
||||
//Diffusion Capacitances
|
||||
if(!model->HICUMt0Given) {
|
||||
model->HICUMt0 = 0.0;
|
||||
}
|
||||
if(!model->HICUMdt0hGiven) {
|
||||
model->HICUMdt0h = 0.0;
|
||||
}
|
||||
if(!model->HICUMtbvlGiven) {
|
||||
model->HICUMtbvl = 0.0;
|
||||
}
|
||||
if(!model->HICUMtef0Given) {
|
||||
model->HICUMtef0 = 0.0;
|
||||
}
|
||||
if(!model->HICUMgtfeGiven) {
|
||||
model->HICUMgtfe = 1.0;
|
||||
}
|
||||
if(!model->HICUMthcsGiven) {
|
||||
model->HICUMthcs = 0.0;
|
||||
}
|
||||
if(!model->HICUMahcGiven) {
|
||||
model->HICUMahc = 0.1;
|
||||
}
|
||||
if(!model->HICUMfthcGiven) {
|
||||
model->HICUMfthc = 0.0;
|
||||
}
|
||||
if(!model->HICUMrci0Given) {
|
||||
model->HICUMrci0 = 150;
|
||||
}
|
||||
if(!model->HICUMvlimGiven) {
|
||||
model->HICUMvlim = 0.5;
|
||||
}
|
||||
if(!model->HICUMvcesGiven) {
|
||||
model->HICUMvces = 0.1;
|
||||
}
|
||||
if(!model->HICUMvptGiven) {
|
||||
model->HICUMvpt = 100.0;
|
||||
}
|
||||
if(!model->HICUMaickGiven) {
|
||||
model->HICUMaick = 1.0e-03;
|
||||
}
|
||||
if(!model->HICUMdelckGiven) {
|
||||
model->HICUMdelck = 2.0;
|
||||
}
|
||||
if(!model->HICUMtrGiven) {
|
||||
model->HICUMtr = 0.0;
|
||||
}
|
||||
if(!model->HICUMvcbarGiven) {
|
||||
model->HICUMvcbar = 0.0;
|
||||
}
|
||||
if(!model->HICUMicbarGiven) {
|
||||
model->HICUMicbar = 0.0;
|
||||
}
|
||||
if(!model->HICUMacbarGiven) {
|
||||
model->HICUMacbar = 0.01;
|
||||
}
|
||||
//Isolation Capacitances
|
||||
if(!model->HICUMcbeparGiven) {
|
||||
model->HICUMcbepar = 0.0;
|
||||
}
|
||||
if(!model->HICUMcbcparGiven) {
|
||||
model->HICUMcbcpar = 0.0;
|
||||
}
|
||||
//Non-quasi-static Effect
|
||||
if(!model->HICUMalqfGiven) {
|
||||
model->HICUMalqf = 0.167;
|
||||
}
|
||||
if(!model->HICUMalitGiven) {
|
||||
model->HICUMalit = 0.333;
|
||||
}
|
||||
if(!model->HICUMflnqsGiven) {
|
||||
model->HICUMflnqs = 0;
|
||||
}
|
||||
//Noise
|
||||
if(!model->HICUMkfGiven) {
|
||||
model->HICUMkf = 0.0;
|
||||
}
|
||||
if(!model->HICUMafGiven) {
|
||||
model->HICUMaf = 2.0;
|
||||
}
|
||||
if(!model->HICUMcfbeGiven) {
|
||||
model->HICUMcfbe = -1;
|
||||
}
|
||||
if(!model->HICUMflconoGiven) {
|
||||
model->HICUMflcono = 0;
|
||||
}
|
||||
if(!model->HICUMkfreGiven) {
|
||||
model->HICUMkfre = 0.0;
|
||||
}
|
||||
if(!model->HICUMafreGiven) {
|
||||
model->HICUMafre = 2.0;
|
||||
}
|
||||
//Lateral Geometry Scaling (at high current densities)
|
||||
if(!model->HICUMlatbGiven) {
|
||||
model->HICUMlatb = 0.0;
|
||||
}
|
||||
if(!model->HICUMlatlGiven) {
|
||||
model->HICUMlatl = 0.0;
|
||||
}
|
||||
//Temperature dependence
|
||||
if(!model->HICUMvgbGiven) {
|
||||
model->HICUMvgb = 1.17;
|
||||
}
|
||||
if(!model->HICUMalt0Given) {
|
||||
model->HICUMalt0 = 0.0;
|
||||
}
|
||||
if(!model->HICUMkt0Given) {
|
||||
model->HICUMkt0 = 0.0;
|
||||
}
|
||||
if(!model->HICUMzetaciGiven) {
|
||||
model->HICUMzetaci = 0.0;
|
||||
}
|
||||
if(!model->HICUMalvsGiven) {
|
||||
model->HICUMalvs = 0.0;
|
||||
}
|
||||
if(!model->HICUMalcesGiven) {
|
||||
model->HICUMalces = 0.0;
|
||||
}
|
||||
if(!model->HICUMzetarbiGiven) {
|
||||
model->HICUMzetarbi = 0.0;
|
||||
}
|
||||
if(!model->HICUMzetarbxGiven) {
|
||||
model->HICUMzetarbx = 0.0;
|
||||
}
|
||||
if(!model->HICUMzetarcxGiven) {
|
||||
model->HICUMzetarcx = 0.0;
|
||||
}
|
||||
if(!model->HICUMzetareGiven) {
|
||||
model->HICUMzetare = 0.0;
|
||||
}
|
||||
if(!model->HICUMzetacxGiven) {
|
||||
model->HICUMzetacx = 1.0;
|
||||
}
|
||||
if(!model->HICUMvgeGiven) {
|
||||
model->HICUMvge = 1.17;
|
||||
}
|
||||
if(!model->HICUMvgcGiven) {
|
||||
model->HICUMvgc = 1.17;
|
||||
}
|
||||
if(!model->HICUMvgsGiven) {
|
||||
model->HICUMvgs = 1.17;
|
||||
}
|
||||
if(!model->HICUMf1vgGiven) {
|
||||
model->HICUMf1vg = -1.02377e-4;
|
||||
}
|
||||
if(!model->HICUMf2vgGiven) {
|
||||
model->HICUMf2vg = 4.3215e-4;
|
||||
}
|
||||
if(!model->HICUMzetactGiven) {
|
||||
model->HICUMzetact = 3.0;
|
||||
}
|
||||
if(!model->HICUMzetabetGiven) {
|
||||
model->HICUMzetabet = 3.5;
|
||||
}
|
||||
if(!model->HICUMalbGiven) {
|
||||
model->HICUMalb = 0.0;
|
||||
}
|
||||
if(!model->HICUMdvgbeGiven) {
|
||||
model->HICUMdvgbe = 0.0;
|
||||
}
|
||||
if(!model->HICUMzetahjeiGiven) {
|
||||
model->HICUMzetahjei = 1.0;
|
||||
}
|
||||
if(!model->HICUMzetavgbeGiven) {
|
||||
model->HICUMzetavgbe = 1.0;
|
||||
}
|
||||
//Self-Heating
|
||||
if(!model->HICUMflshGiven) {
|
||||
model->HICUMflsh = 0;
|
||||
}
|
||||
if(!model->HICUMrthGiven) {
|
||||
model->HICUMrth = 0.0;
|
||||
}
|
||||
if(!model->HICUMzetarthGiven) {
|
||||
model->HICUMzetarth = 0.0;
|
||||
}
|
||||
if(!model->HICUMalrthGiven) {
|
||||
model->HICUMalrth = 0.0;
|
||||
}
|
||||
if(!model->HICUMcthGiven) {
|
||||
model->HICUMcth = 0.0;
|
||||
}
|
||||
//Compatibility with V2.1
|
||||
if(!model->HICUMflcompGiven) {
|
||||
model->HICUMflcomp = 0.0;
|
||||
}
|
||||
|
||||
if(!model->HICUMvbeMaxGiven) {
|
||||
if(!model->HICUMtnomGiven)
|
||||
model->HICUMtnom = ckt->CKTnomTemp;
|
||||
|
||||
//Transfer current
|
||||
if(!model->HICUMc10Given)
|
||||
model->HICUMc10 = 2e-30;
|
||||
|
||||
if(!model->HICUMqp0Given)
|
||||
model->HICUMqp0 = 2e-14;
|
||||
|
||||
if(!model->HICUMichGiven)
|
||||
model->HICUMich = 0.0;
|
||||
|
||||
if(!model->HICUMhf0Given)
|
||||
model->HICUMhf0 = 1.0;
|
||||
|
||||
if(!model->HICUMhfeGiven)
|
||||
model->HICUMhfe = 1.0;
|
||||
|
||||
if(!model->HICUMhfcGiven)
|
||||
model->HICUMhfc = 1.0;
|
||||
|
||||
if(!model->HICUMhjeiGiven)
|
||||
model->HICUMhjei = 1.0;
|
||||
|
||||
if(!model->HICUMahjeiGiven)
|
||||
model->HICUMahjei = 0.0;
|
||||
|
||||
if(!model->HICUMrhjeiGiven)
|
||||
model->HICUMrhjei = 1.0;
|
||||
|
||||
if(!model->HICUMhjciGiven)
|
||||
model->HICUMhjci = 1.0;
|
||||
|
||||
//Base-Emitter diode;
|
||||
if(!model->HICUMibeisGiven)
|
||||
model->HICUMibeis = 1e-18;
|
||||
|
||||
if(!model->HICUMmbeiGiven)
|
||||
model->HICUMmbei = 1.0;
|
||||
|
||||
if(!model->HICUMireisGiven)
|
||||
model->HICUMireis = 0.0;
|
||||
|
||||
if(!model->HICUMmreiGiven)
|
||||
model->HICUMmrei = 2.0;
|
||||
|
||||
if(!model->HICUMibepsGiven)
|
||||
model->HICUMibeps = 0.0;
|
||||
|
||||
if(!model->HICUMmbepGiven)
|
||||
model->HICUMmbep = 1.0;
|
||||
|
||||
if(!model->HICUMirepsGiven)
|
||||
model->HICUMireps = 0.0;
|
||||
|
||||
if(!model->HICUMmrepGiven)
|
||||
model->HICUMmrep = 2.0;
|
||||
|
||||
if(!model->HICUMmcfGiven)
|
||||
model->HICUMmcf = 1.0;
|
||||
|
||||
//Transit time for excess recombination current at b-c barrier
|
||||
if(!model->HICUMtbhrecGiven)
|
||||
model->HICUMtbhrec = 0.0;
|
||||
|
||||
//Base-Collector diode currents
|
||||
if(!model->HICUMibcisGiven)
|
||||
model->HICUMibcis = 1e-16;
|
||||
|
||||
if(!model->HICUMmbciGiven)
|
||||
model->HICUMmbci = 1.0;
|
||||
|
||||
if(!model->HICUMibcxsGiven)
|
||||
model->HICUMibcxs = 0.0;
|
||||
|
||||
if(!model->HICUMmbcxGiven)
|
||||
model->HICUMmbcx = 1.0;
|
||||
|
||||
//Base-Emitter tunneling current
|
||||
if(!model->HICUMibetsGiven)
|
||||
model->HICUMibets = 0.0;
|
||||
|
||||
if(!model->HICUMabetGiven)
|
||||
model->HICUMabet = 40.0;
|
||||
|
||||
if(!model->HICUMtunodeGiven)
|
||||
model->HICUMtunode = 1;
|
||||
|
||||
//Base-Collector avalanche current
|
||||
if(!model->HICUMfavlGiven)
|
||||
model->HICUMfavl = 0.0;
|
||||
|
||||
if(!model->HICUMqavlGiven)
|
||||
model->HICUMqavl = 0.0;
|
||||
|
||||
if(!model->HICUMkavlGiven)
|
||||
model->HICUMkavl = 0.0;
|
||||
|
||||
if(!model->HICUMalfavGiven)
|
||||
model->HICUMalfav = 0.0;
|
||||
|
||||
if(!model->HICUMalqavGiven)
|
||||
model->HICUMalqav = 0.0;
|
||||
|
||||
if(!model->HICUMalkavGiven)
|
||||
model->HICUMalkav = 0.0;
|
||||
|
||||
//Series resistances
|
||||
if(!model->HICUMrbi0Given)
|
||||
model->HICUMrbi0 = MIN_R;
|
||||
|
||||
if(!model->HICUMrbxGiven)
|
||||
model->HICUMrbx = MIN_R;
|
||||
|
||||
if(!model->HICUMfgeoGiven)
|
||||
model->HICUMfgeo = 0.6557;
|
||||
|
||||
if(!model->HICUMfdqr0Given)
|
||||
model->HICUMfdqr0 = 0.0;
|
||||
|
||||
if(!model->HICUMfcrbiGiven)
|
||||
model->HICUMfcrbi = 0.0;
|
||||
|
||||
if(!model->HICUMfqiGiven)
|
||||
model->HICUMfqi = 1.0;
|
||||
|
||||
if(!model->HICUMreGiven)
|
||||
model->HICUMre = MIN_R;
|
||||
|
||||
if(!model->HICUMrcxGiven)
|
||||
model->HICUMrcx = MIN_R;
|
||||
|
||||
//Substrate transistor
|
||||
if(!model->HICUMitssGiven)
|
||||
model->HICUMitss = 0.0;
|
||||
|
||||
if(!model->HICUMmsfGiven)
|
||||
model->HICUMmsf = 1.0;
|
||||
|
||||
if(!model->HICUMiscsGiven)
|
||||
model->HICUMiscs = 0.0;
|
||||
|
||||
if(!model->HICUMmscGiven)
|
||||
model->HICUMmsc = 1.0;
|
||||
|
||||
if(!model->HICUMtsfGiven)
|
||||
model->HICUMtsf = 0.0;
|
||||
|
||||
//Intra-device substrate coupling
|
||||
if(!model->HICUMrsuGiven)
|
||||
model->HICUMrsu = MIN_R;
|
||||
|
||||
if(!model->HICUMcsuGiven)
|
||||
model->HICUMcsu = 0.0;
|
||||
|
||||
//Depletion Capacitances
|
||||
if(!model->HICUMcjei0Given)
|
||||
model->HICUMcjei0 = 1.0e-20;
|
||||
|
||||
if(!model->HICUMvdeiGiven)
|
||||
model->HICUMvdei = 0.9;
|
||||
|
||||
if(!model->HICUMzeiGiven)
|
||||
model->HICUMzei = 0.5;
|
||||
|
||||
if(!model->HICUMajeiGiven)
|
||||
model->HICUMajei = 2.5;
|
||||
|
||||
if(!model->HICUMcjep0Given)
|
||||
model->HICUMcjep0 = 1.0e-20;
|
||||
|
||||
if(!model->HICUMvdepGiven)
|
||||
model->HICUMvdep = 0.9;
|
||||
|
||||
if(!model->HICUMzepGiven)
|
||||
model->HICUMzep = 0.5;
|
||||
|
||||
if(!model->HICUMajepGiven)
|
||||
model->HICUMajep = 2.5;
|
||||
|
||||
if(!model->HICUMcjci0Given)
|
||||
model->HICUMcjci0 = 1.0e-20;
|
||||
|
||||
if(!model->HICUMvdciGiven)
|
||||
model->HICUMvdci = 0.7;
|
||||
|
||||
if(!model->HICUMzciGiven)
|
||||
model->HICUMzci = 0.4;
|
||||
|
||||
if(!model->HICUMvptciGiven)
|
||||
model->HICUMvptci = 100.0;
|
||||
|
||||
if(!model->HICUMcjcx0Given)
|
||||
model->HICUMcjcx0 = 1.0e-20;
|
||||
|
||||
if(!model->HICUMvdcxGiven)
|
||||
model->HICUMvdcx = 0.7;
|
||||
|
||||
if(!model->HICUMzcxGiven)
|
||||
model->HICUMzcx = 0.4;
|
||||
|
||||
if(!model->HICUMvptcxGiven)
|
||||
model->HICUMvptcx = 100.0;
|
||||
|
||||
if(!model->HICUMfbcparGiven)
|
||||
model->HICUMfbcpar = 0.0;
|
||||
|
||||
if(!model->HICUMfbeparGiven)
|
||||
model->HICUMfbepar = 1.0;
|
||||
|
||||
if(!model->HICUMcjs0Given)
|
||||
model->HICUMcjs0 = 0.0;
|
||||
|
||||
if(!model->HICUMvdsGiven)
|
||||
model->HICUMvds = 0.6;
|
||||
|
||||
if(!model->HICUMzsGiven)
|
||||
model->HICUMzs = 0.5;
|
||||
|
||||
if(!model->HICUMvptsGiven)
|
||||
model->HICUMvpts = 100.0;
|
||||
|
||||
if(!model->HICUMcscp0Given)
|
||||
model->HICUMcscp0 = 0.0;
|
||||
|
||||
if(!model->HICUMvdspGiven)
|
||||
model->HICUMvdsp = 0.6;
|
||||
|
||||
if(!model->HICUMzspGiven)
|
||||
model->HICUMzsp = 0.5;
|
||||
|
||||
if(!model->HICUMvptspGiven)
|
||||
model->HICUMvptsp = 100.0;
|
||||
|
||||
//Diffusion Capacitances
|
||||
if(!model->HICUMt0Given)
|
||||
model->HICUMt0 = 0.0;
|
||||
|
||||
if(!model->HICUMdt0hGiven)
|
||||
model->HICUMdt0h = 0.0;
|
||||
|
||||
if(!model->HICUMtbvlGiven)
|
||||
model->HICUMtbvl = 0.0;
|
||||
|
||||
if(!model->HICUMtef0Given)
|
||||
model->HICUMtef0 = 0.0;
|
||||
|
||||
if(!model->HICUMgtfeGiven)
|
||||
model->HICUMgtfe = 1.0;
|
||||
|
||||
if(!model->HICUMthcsGiven)
|
||||
model->HICUMthcs = 0.0;
|
||||
|
||||
if(!model->HICUMahcGiven)
|
||||
model->HICUMahc = 0.1;
|
||||
|
||||
if(!model->HICUMfthcGiven)
|
||||
model->HICUMfthc = 0.0;
|
||||
|
||||
if(!model->HICUMrci0Given)
|
||||
model->HICUMrci0 = 150;
|
||||
|
||||
if(!model->HICUMvlimGiven)
|
||||
model->HICUMvlim = 0.5;
|
||||
|
||||
if(!model->HICUMvcesGiven)
|
||||
model->HICUMvces = 0.1;
|
||||
|
||||
if(!model->HICUMvptGiven)
|
||||
model->HICUMvpt = 100.0;
|
||||
|
||||
if(!model->HICUMaickGiven)
|
||||
model->HICUMaick = 1.0e-03;
|
||||
|
||||
if(!model->HICUMdelckGiven)
|
||||
model->HICUMdelck = 2.0;
|
||||
|
||||
if(!model->HICUMtrGiven)
|
||||
model->HICUMtr = 0.0;
|
||||
|
||||
if(!model->HICUMvcbarGiven)
|
||||
model->HICUMvcbar = 0.0;
|
||||
|
||||
if(!model->HICUMicbarGiven)
|
||||
model->HICUMicbar = 0.0;
|
||||
|
||||
if(!model->HICUMacbarGiven)
|
||||
model->HICUMacbar = 0.01;
|
||||
|
||||
//Isolation Capacitances
|
||||
if(!model->HICUMcbeparGiven)
|
||||
model->HICUMcbepar = 0.0;
|
||||
|
||||
if(!model->HICUMcbcparGiven)
|
||||
model->HICUMcbcpar = 0.0;
|
||||
|
||||
//Non-quasi-static Effect
|
||||
if(!model->HICUMalqfGiven)
|
||||
model->HICUMalqf = 0.167;
|
||||
|
||||
if(!model->HICUMalitGiven)
|
||||
model->HICUMalit = 0.333;
|
||||
|
||||
if(!model->HICUMflnqsGiven)
|
||||
model->HICUMflnqs = 0;
|
||||
|
||||
//Noise
|
||||
if(!model->HICUMkfGiven)
|
||||
model->HICUMkf = 0.0;
|
||||
|
||||
if(!model->HICUMafGiven)
|
||||
model->HICUMaf = 2.0;
|
||||
|
||||
if(!model->HICUMcfbeGiven)
|
||||
model->HICUMcfbe = -1;
|
||||
|
||||
if(!model->HICUMflconoGiven)
|
||||
model->HICUMflcono = 0;
|
||||
|
||||
if(!model->HICUMkfreGiven)
|
||||
model->HICUMkfre = 0.0;
|
||||
|
||||
if(!model->HICUMafreGiven)
|
||||
model->HICUMafre = 2.0;
|
||||
|
||||
//Lateral Geometry Scaling (at high current densities)
|
||||
if(!model->HICUMlatbGiven)
|
||||
model->HICUMlatb = 0.0;
|
||||
|
||||
if(!model->HICUMlatlGiven)
|
||||
model->HICUMlatl = 0.0;
|
||||
|
||||
//Temperature dependence
|
||||
if(!model->HICUMvgbGiven)
|
||||
model->HICUMvgb = 1.17;
|
||||
|
||||
if(!model->HICUMalt0Given)
|
||||
model->HICUMalt0 = 0.0;
|
||||
|
||||
if(!model->HICUMkt0Given)
|
||||
model->HICUMkt0 = 0.0;
|
||||
|
||||
if(!model->HICUMzetaciGiven)
|
||||
model->HICUMzetaci = 0.0;
|
||||
|
||||
if(!model->HICUMalvsGiven)
|
||||
model->HICUMalvs = 0.0;
|
||||
|
||||
if(!model->HICUMalcesGiven)
|
||||
model->HICUMalces = 0.0;
|
||||
|
||||
if(!model->HICUMzetarbiGiven)
|
||||
model->HICUMzetarbi = 0.0;
|
||||
|
||||
if(!model->HICUMzetarbxGiven)
|
||||
model->HICUMzetarbx = 0.0;
|
||||
|
||||
if(!model->HICUMzetarcxGiven)
|
||||
model->HICUMzetarcx = 0.0;
|
||||
|
||||
if(!model->HICUMzetareGiven)
|
||||
model->HICUMzetare = 0.0;
|
||||
|
||||
if(!model->HICUMzetacxGiven)
|
||||
model->HICUMzetacx = 1.0;
|
||||
|
||||
if(!model->HICUMvgeGiven)
|
||||
model->HICUMvge = 1.17;
|
||||
|
||||
if(!model->HICUMvgcGiven)
|
||||
model->HICUMvgc = 1.17;
|
||||
|
||||
if(!model->HICUMvgsGiven)
|
||||
model->HICUMvgs = 1.17;
|
||||
|
||||
if(!model->HICUMf1vgGiven)
|
||||
model->HICUMf1vg = -1.02377e-4;
|
||||
|
||||
if(!model->HICUMf2vgGiven)
|
||||
model->HICUMf2vg = 4.3215e-4;
|
||||
|
||||
if(!model->HICUMzetactGiven)
|
||||
model->HICUMzetact = 3.0;
|
||||
|
||||
if(!model->HICUMzetabetGiven)
|
||||
model->HICUMzetabet = 3.5;
|
||||
|
||||
if(!model->HICUMalbGiven)
|
||||
model->HICUMalb = 0.0;
|
||||
|
||||
if(!model->HICUMdvgbeGiven)
|
||||
model->HICUMdvgbe = 0.0;
|
||||
|
||||
if(!model->HICUMzetahjeiGiven)
|
||||
model->HICUMzetahjei = 1.0;
|
||||
|
||||
if(!model->HICUMzetavgbeGiven)
|
||||
model->HICUMzetavgbe = 1.0;
|
||||
|
||||
//Self-Heating
|
||||
if(!model->HICUMflshGiven)
|
||||
model->HICUMflsh = 0;
|
||||
|
||||
if(!model->HICUMrthGiven)
|
||||
model->HICUMrth = 0.0;
|
||||
|
||||
if(!model->HICUMzetarthGiven)
|
||||
model->HICUMzetarth = 0.0;
|
||||
|
||||
if(!model->HICUMalrthGiven)
|
||||
model->HICUMalrth = 0.0;
|
||||
|
||||
if(!model->HICUMcthGiven)
|
||||
model->HICUMcth = 0.0;
|
||||
|
||||
if((model->HICUMrthGiven) && (model->HICUMcth < 1e-12))
|
||||
model->HICUMcth = 1e-12;
|
||||
|
||||
//Compatibility with V2.1
|
||||
if(!model->HICUMflcompGiven)
|
||||
model->HICUMflcomp = 0.0;
|
||||
|
||||
|
||||
if(!model->HICUMvbeMaxGiven)
|
||||
model->HICUMvbeMax = 1e99;
|
||||
}
|
||||
if(!model->HICUMvbcMaxGiven) {
|
||||
|
||||
if(!model->HICUMvbcMaxGiven)
|
||||
model->HICUMvbcMax = 1e99;
|
||||
}
|
||||
if(!model->HICUMvceMaxGiven) {
|
||||
|
||||
if(!model->HICUMvceMaxGiven)
|
||||
model->HICUMvceMax = 1e99;
|
||||
}
|
||||
|
||||
/* loop through all the instances of the model */
|
||||
for (here = HICUMinstances(model); here != NULL ;
|
||||
|
|
@ -552,26 +560,23 @@ HICUMsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|||
here->HICUMbaseBINode = tmp->number;
|
||||
}
|
||||
|
||||
// if(here->HICUMxfNode == 0) {
|
||||
// error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf");
|
||||
// if(error) return(error);
|
||||
// here->HICUMxfNode = tmp->number;
|
||||
// }
|
||||
//
|
||||
// if(here->HICUMxf1Node == 0) {
|
||||
// error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf1");
|
||||
// if(error) return(error);
|
||||
// here->HICUMxf1Node = tmp->number;
|
||||
// }
|
||||
//
|
||||
// if(here->HICUMxf2Node == 0) {
|
||||
// error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf2");
|
||||
// if(error) return(error);
|
||||
// here->HICUMxf2Node = tmp->number;
|
||||
// }
|
||||
if(here->HICUMxfNode == 0) {
|
||||
error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf");
|
||||
if(error) return(error);
|
||||
here->HICUMxfNode = tmp->number;
|
||||
}
|
||||
|
||||
if((model->HICUMrthGiven) && (model->HICUMcth < 1e-12))
|
||||
model->HICUMcth = 1e-12;
|
||||
if(here->HICUMxf1Node == 0) {
|
||||
error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf1");
|
||||
if(error) return(error);
|
||||
here->HICUMxf1Node = tmp->number;
|
||||
}
|
||||
|
||||
if(here->HICUMxf2Node == 0) {
|
||||
error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf2");
|
||||
if(error) return(error);
|
||||
here->HICUMxf2Node = tmp->number;
|
||||
}
|
||||
|
||||
/* macro to make elements with built in test for out of memory */
|
||||
#define TSTALLOC(ptr,first,second) \
|
||||
|
|
@ -636,9 +641,9 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
|
|||
TSTALLOC(HICUMsubsCollPtr,HICUMsubsNode,HICUMcollNode); //s-c
|
||||
TSTALLOC(HICUMcollSubsPtr,HICUMcollNode,HICUMsubsNode); //c-s
|
||||
|
||||
// TSTALLOC(HICUMxfXfPtr,HICUMxfNode,HICUMxfNode);
|
||||
// TSTALLOC(HICUMxf1Xf1Ptr,HICUMxf1Node,HICUMxf1Node);
|
||||
// TSTALLOC(HICUMxf2Xf2Ptr,HICUMxf2Node,HICUMxf2Node);
|
||||
TSTALLOC(HICUMxfXfPtr,HICUMxfNode,HICUMxfNode);
|
||||
TSTALLOC(HICUMxf1Xf1Ptr,HICUMxf1Node,HICUMxf1Node);
|
||||
TSTALLOC(HICUMxf2Xf2Ptr,HICUMxf2Node,HICUMxf2Node);
|
||||
|
||||
if (model->HICUMflsh) {
|
||||
TSTALLOC(HICUMcollTempPtr,HICUMcollNode,HICUMtempNode);
|
||||
|
|
@ -702,6 +707,19 @@ HICUMunsetup(
|
|||
&& here->HICUMcollCINode != here->HICUMcollNode)
|
||||
CKTdltNNum(ckt, here->HICUMcollCINode);
|
||||
here->HICUMcollCINode = 0;
|
||||
|
||||
if(here->HICUMxfNode > 0)
|
||||
CKTdltNNum(ckt, here->HICUMxfNode);
|
||||
here->HICUMxfNode = 0;
|
||||
|
||||
if(here->HICUMxf1Node > 0)
|
||||
CKTdltNNum(ckt, here->HICUMxf1Node);
|
||||
here->HICUMxf1Node = 0;
|
||||
|
||||
if(here->HICUMxf2Node > 0)
|
||||
CKTdltNNum(ckt, here->HICUMxf2Node);
|
||||
here->HICUMxf2Node = 0;
|
||||
|
||||
}
|
||||
}
|
||||
return OK;
|
||||
|
|
|
|||
|
|
@ -253,6 +253,7 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance)
|
|||
//Avalanche current factors
|
||||
here->HICUMfavl_t = model->HICUMfavl*exp(model->HICUMalfav*dT);
|
||||
here->HICUMqavl_t = model->HICUMqavl*exp(model->HICUMalqav*dT);
|
||||
here->HICUMkavl_t = model->HICUMkavl*exp(model->HICUMalkav*dT);
|
||||
|
||||
//Zero bias internal base resistance
|
||||
here->HICUMrbi0_t = model->HICUMrbi0*exp(model->HICUMzetarbi*here->HICUMln_qtt0);
|
||||
|
|
|
|||
Loading…
Reference in New Issue