added asks, found bug with ibci
This commit is contained in:
parent
2baac89ae3
commit
8fd70e2f15
|
|
@ -0,0 +1,3 @@
|
|||
n_c @q_q_h[area] @q_q_h[betaac] @q_q_h[betadc] @q_q_h[ccs] @q_q_h[cmui] @q_q_h[cmux] @q_q_h[cpii] @q_q_h[cpix] @q_q_h[crbi] @q_q_h[dtsh] @q_q_h[ft] @q_q_h[gmi] @q_q_h[gms] @q_q_h[iavl] @q_q_h[ib] @q_q_h[ic] @q_q_h[icvbe] @q_q_h[icvce] @q_q_h[ie] @q_q_h[is] @q_q_h[m] @q_q_h[p] @q_q_h[rb] @q_q_h[rbi] @q_q_h[rcx_t] @q_q_h[re_t] @q_q_h[rmui] @q_q_h[rmux] @q_q_h[roi] @q_q_h[rpii] @q_q_h[rpix] @q_q_h[temp] @q_q_h[tf] @q_q_h[tk] @q_q_h[vbc] @q_q_h[vbe] @q_q_h[vce] @q_q_h[vsc] n_b n_b_forced n_bx n_c n_c_forced n_cx n_e n_e_forced n_ex n_s n_sx n_t q_q_h#collCI q_q_h#emitEI q_q_h#subsSI q_q_h#xf q_q_h#xf1 q_q_h#xf2 v_v_b#branch v_v_c#branch v_v_e#branch v_v_s#branch
|
||||
1.00000104e-15 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 8.72829429e-22 0.00000000e+00 0.00000000e+00 0.00000000e+00 -nan 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.99751242e-03 9.97512422e-04 1.00000000e-03 1.00000000e-03 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.68500000e+01 1.00000000e-15 3.00000000e+02 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 5.00000000e-01 5.00000000e-01 5.00000000e-01 1.00000104e-15 1.00000004e-21 0.00000000e+00 2.10449022e-14 2.10448811e-20 0.00000000e+00 1.99987152e-36 0.00000000e+00 0.00000000e+00 2.00000107e-15 4.20897833e-14 1.99987352e-30 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000004e-12 2.10448811e-11 1.99987152e-27
|
||||
1.02000109e-15 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.28505597e-21 0.00000000e+00 0.00000000e+00 0.00000000e+00 -nan 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.99751242e-03 9.97512422e-04 1.00000000e-03 1.00000000e-03 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.68500000e+01 1.00000000e-15 3.00000000e+02 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 5.10000000e-01 5.10000000e-01 5.10000000e-01 1.02000109e-15 1.02000007e-21 0.00000000e+00 3.02332613e-14 3.02332311e-20 0.00000000e+00 2.03984753e-36 0.00000000e+00 0.00000000e+00 2.04000117e-15 6.04664924e-14 2.03984957e-30 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.02000007e-12 3.02332311e-11 2.03984753e-27
|
||||
|
|
@ -25,6 +25,7 @@ IFparm HICUMpTable[] = { /* parameters */
|
|||
IOPU("temp", HICUM_TEMP, IF_REAL, "Instance temperature"),
|
||||
IOPUR("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"),
|
||||
|
|
@ -47,6 +48,8 @@ IFparm HICUMpTable[] = { /* parameters */
|
|||
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 */
|
||||
|
|
|
|||
|
|
@ -125,6 +125,9 @@ HICUMask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFval
|
|||
case HICUM_QUEST_RE_T:
|
||||
value->rValue = here->HICUMre_t;
|
||||
return(OK);
|
||||
case HICUM_QUEST_IT:
|
||||
value->rValue = *(ckt->CKTstate0 + here->HICUMiciei);
|
||||
return(OK);
|
||||
case HICUM_QUEST_RBI:
|
||||
value->rValue = here->HICUMrbi;
|
||||
return(OK);
|
||||
|
|
@ -204,6 +207,12 @@ HICUMask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFval
|
|||
case HICUM_QUEST_TF:
|
||||
value->rValue = here->HICUMtf;
|
||||
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);
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -1003,6 +1003,7 @@ enum {
|
|||
/* resistances */
|
||||
HICUM_QUEST_RCX_T,
|
||||
HICUM_QUEST_RE_T,
|
||||
HICUM_QUEST_IT,
|
||||
HICUM_QUEST_RBI,
|
||||
HICUM_QUEST_RB,
|
||||
/* transconductances and capacitances */
|
||||
|
|
@ -1024,6 +1025,8 @@ enum {
|
|||
/* transit time */
|
||||
HICUM_QUEST_TF,
|
||||
HICUM_QUEST_FT,
|
||||
HICUM_QUEST_CBEI,
|
||||
HICUM_QUEST_CBCI,
|
||||
/* power */
|
||||
HICUM_QUEST_POWER,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -668,7 +668,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double Ibpbi, Ibpbi_Vbpbi, Ibpbi_Vbici, Ibpbi_Vbiei;
|
||||
double Ibpsi, Ibpsi_Vbpci, Ibpsi_Vsici;
|
||||
double Icic_Vcic;
|
||||
double Ibci, Ibci_Vbci, Ibci_dT;
|
||||
double ibci_Vbci, ibci_dT;
|
||||
double hjei_vbe_Vbiei, hjei_vbe_dT, ibet_Vbpei=0.0, ibet_dT=0, ibet_Vbiei=0.0, ibh_rec_Vbiei;
|
||||
double irei_Vbiei, irei_dT;
|
||||
double ibep_Vbpei, ibep_dT;
|
||||
|
|
@ -740,6 +740,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double Ith_Veie;
|
||||
double Ith_Vcic;
|
||||
double Ith_Vbbp;
|
||||
double dummy_1, dummy_2; //for debugging
|
||||
|
||||
//declaration of lambda functions -----------------------------------
|
||||
|
||||
|
|
@ -1430,8 +1431,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
hicum_diode(here->HICUMtemp,here->HICUMibeis_t,model->HICUMmbei, Vbiei, &ibei, &ibei_Vbiei, &ibei_dT);
|
||||
hicum_diode(here->HICUMtemp,here->HICUMireis_t,model->HICUMmrei, Vbiei, &irei, &irei_Vbiei, &irei_dT);
|
||||
|
||||
|
||||
|
||||
//Internal b-e and b-c junction capacitances and charges
|
||||
//QJMODF(here->HICUMvt,cjei0_t,vdei_t,model->HICUMzei,ajei_t,V(br_biei),Qjei)
|
||||
//Cjei = ddx(Qjei,V(bi));
|
||||
|
|
@ -1619,7 +1618,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
|
||||
//Internal base current across b-c junction
|
||||
//TODO
|
||||
hicum_diode(here->HICUMtemp,here->HICUMibcis_t,model->HICUMmbci, Vbici, &Ibci, &Ibci_Vbci, &Ibci_dT);
|
||||
hicum_diode(here->HICUMtemp,here->HICUMibcis_t,model->HICUMmbci, Vbici, &ibci, &ibci_Vbci, &ibci_dT);
|
||||
|
||||
//Avalanche current
|
||||
result = calc_iavl(Vbici+1_e, Cjci , itf);
|
||||
|
|
@ -1806,6 +1805,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Ibpei_Vbpei += model->HICUMtype*irep_Vbpei;
|
||||
|
||||
Ibiei = model->HICUMtype*ibei;
|
||||
Ibiei_Vbiei = model->HICUMtype*ibei_Vbiei;
|
||||
Ibiei += model->HICUMtype*irei;
|
||||
Ibiei_Vbiei += model->HICUMtype*irei_Vbiei;
|
||||
Ibiei += model->HICUMtype*ibh_rec;
|
||||
|
|
@ -1904,8 +1904,12 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Ibpbi_Vbpbi = 1 / rbi;
|
||||
Ibpbi = Vbpbi / rbi;
|
||||
} else {
|
||||
// Makrus: why this???
|
||||
Ibpbi_Vbpbi = 1 / MIN_R;
|
||||
Ibpbi = Vbpbi / MIN_R;
|
||||
|
||||
// Ibpbi = 0;
|
||||
// Ibpbi_Vbpbi = 0;
|
||||
}
|
||||
Ibpbi_Vbiei = -Vbpbi * rbi_Vbiei / (rbi*rbi);
|
||||
Ibpbi_Vbici = -Vbpbi * rbi_Vbici / (rbi*rbi);
|
||||
|
|
@ -2125,10 +2129,10 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Isici += *(ckt->CKTstate0 + here->HICUMcqjs);
|
||||
|
||||
// Ibci += ddt(model->HICUMtype*qjcx0_t_i);
|
||||
error = NIintegrate(ckt,&geq,&ceq,Cjcx_i,here->HICUMqjcx0_i);
|
||||
if(error) return(error);
|
||||
Ibci_Vbci = geq;
|
||||
Ibci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_i);
|
||||
// error = NIintegrate(ckt,&geq,&ceq,Cjcx_i,here->HICUMqjcx0_i);
|
||||
// if(error) return(error);
|
||||
// Ibci_Vbci = geq;
|
||||
// Ibci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_i);
|
||||
|
||||
// Ibpci += ddt(model->HICUMtype*(qjcx0_t_ii+Qdsu));
|
||||
error = NIintegrate(ckt,&geq,&ceq,Cjcx_ii,here->HICUMqjcx0_ii);
|
||||
|
|
@ -2398,13 +2402,13 @@ c Branch: ciei, Stamp element: It
|
|||
/*
|
||||
c Branch: bci, Stamp element: Qbcx
|
||||
*/
|
||||
rhs_current = model->HICUMtype * (Ibci - Ibci_Vbci*Vbci);
|
||||
rhs_current = model->HICUMtype * (ibci - ibci_Vbci*Vbci);
|
||||
*(ckt->CKTrhs + here->HICUMbaseNode) += -rhs_current;
|
||||
*(here->HICUMbaseBasePtr) += Ibci_Vbci;
|
||||
*(here->HICUMbaseCollCIPtr) += -Ibci_Vbci;
|
||||
*(here->HICUMbaseBasePtr) += ibci_Vbci;
|
||||
*(here->HICUMbaseCollCIPtr) += -ibci_Vbci;
|
||||
*(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current;
|
||||
*(here->HICUMcollCIBasePtr) += -Ibci_Vbci;
|
||||
*(here->HICUMcollCICollCIPtr) += Ibci_Vbci;
|
||||
*(here->HICUMcollCIBasePtr) += -ibci_Vbci;
|
||||
*(here->HICUMcollCICollCIPtr) += ibci_Vbci;
|
||||
/*
|
||||
c Branch: bpci, Stamp element: Ijbcx
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -31,6 +31,12 @@ This file gives an overview of the files needed for the ngspice HiCUM version, e
|
|||
# hicum2temp.c
|
||||
* Temperature scaling of all parameters
|
||||
* Models are implemented, missing are the derivatives
|
||||
* As most models are easy and just temperature dependent -> no dual numbers
|
||||
* As most models are easy and just temperature dependent -> no dual numbers -> Markus: I disagree
|
||||
* Assignee: Mario
|
||||
# hicum2trunc.c
|
||||
|
||||
# Working in the DC case without self heating:
|
||||
See test case in DMT where this is compared against ADS.
|
||||
- re
|
||||
- Ibiei
|
||||
- Ibici
|
||||
|
|
|
|||
Loading…
Reference in New Issue