diff --git a/src/spicelib/devices/hicum2/hicum2.c b/src/spicelib/devices/hicum2/hicum2.c index db8b544e4..191697117 100644 --- a/src/spicelib/devices/hicum2/hicum2.c +++ b/src/spicelib/devices/hicum2/hicum2.c @@ -23,6 +23,7 @@ IFparm HICUMpTable[] = { /* parameters */ IOPAU("icvce", HICUM_IC_VCE, IF_REAL, "Initial C-E voltage"), IOPU("m", HICUM_M, IF_REAL, "Multiplier"), IOPU("temp", HICUM_TEMP, IF_REAL, "Instance temperature"), + IP("dt", HICUM_DTEMP, IF_REAL, "Instance delta 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"), @@ -81,7 +82,7 @@ IFparm HICUMpTable[] = { /* parameters */ /* 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") }; diff --git a/src/spicelib/devices/hicum2/hicum2ask.c b/src/spicelib/devices/hicum2/hicum2ask.c index 28e52af72..6c5d80034 100644 --- a/src/spicelib/devices/hicum2/hicum2ask.c +++ b/src/spicelib/devices/hicum2/hicum2ask.c @@ -130,6 +130,12 @@ HICUMask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFval 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; @@ -219,12 +225,6 @@ 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); @@ -247,7 +247,9 @@ HICUMask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFval ) ); return(OK); - + case HICUM_QUEST_ICK: + value->rValue = here->HICUMick; + return(OK); /* power */ case HICUM_QUEST_POWER: value->rValue = here->HICUMpterm; diff --git a/src/spicelib/devices/hicum2/hicum2defs.h b/src/spicelib/devices/hicum2/hicum2defs.h index 7281ef00b..32777a98f 100644 --- a/src/spicelib/devices/hicum2/hicum2defs.h +++ b/src/spicelib/devices/hicum2/hicum2defs.h @@ -133,6 +133,7 @@ typedef struct sHICUMinstance { double HICUMpterm; double HICUMtf; + double HICUMick; double HICUMcbepar; double HICUMcbcpar; @@ -1004,6 +1005,8 @@ enum { HICUM_QUEST_CB, HICUM_QUEST_CE, HICUM_QUEST_CS, + HICUM_QUEST_CBEI, + HICUM_QUEST_CBCI, /* resistances */ HICUM_QUEST_RCX_T, HICUM_QUEST_RE_T, @@ -1029,8 +1032,7 @@ enum { /* transit time */ HICUM_QUEST_TF, HICUM_QUEST_FT, - HICUM_QUEST_CBEI, - HICUM_QUEST_CBCI, + HICUM_QUEST_ICK, /* power */ HICUM_QUEST_POWER, }; diff --git a/src/spicelib/devices/hicum2/hicumL2.cpp b/src/spicelib/devices/hicum2/hicumL2.cpp index f69432528..0a829da34 100644 --- a/src/spicelib/devices/hicum2/hicumL2.cpp +++ b/src/spicelib/devices/hicum2/hicumL2.cpp @@ -39,7 +39,7 @@ Spice3 Implementation: 2019 Dietmar Warning, Markus Müller, Mario Krattenmacher #include "cmath" #ifndef M_PI #define M_PI 3.1415926535897932384626433832795 -#endif +#endif #include #include "hicumL2.hpp" #include @@ -1604,6 +1604,8 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) result = calc_ick(here->HICUMtemp+1_e, Vciei); ick_dT = result.dpart(); + here->HICUMick = ick; + //begin Q_pT calculation (dual numbers to calculate derivative of loop? Yes my boy, yes) //todo: derivatives of temperature dependent hicum parameters @@ -1636,7 +1638,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) // result = calc_it(here->HICUMtemp, Vbiei , Vbici , Q_0 , T_f0 , ick +ick*1e-3 ); // Q_pT_dick_numerical = (result.rpart() - Q_pT)/(ick*1e-3); - //add derivatives of ick + //add derivatives of ick Q_pT_dVciei = Q_pT_dick*ick_Vciei; //additional component not seen in equivalent circuit of HiCUM...jesus Q_pT_dT += Q_pT_dick*ick_dT; @@ -1666,25 +1668,25 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) itr_Vbiei = result_itr.dpart(); Qf_Vbiei = result_Qf.dpart(); Qr_Vbiei = result_Qr.dpart(); - + calc_it_final(here->HICUMtemp , Vbiei , Vbici+1_e, Q_pT , T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr); itf_Vbici = result_itf.dpart(); itr_Vbici = result_itr.dpart(); Qf_Vbici = result_Qf.dpart(); Qr_Vbici = result_Qr.dpart(); - + calc_it_final(here->HICUMtemp , Vbiei , Vbici , Q_pT+1_e, T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr); itf_dQ_pT = result_itf.dpart(); itr_dQ_pT = result_itr.dpart(); Qf_dQ_pT = result_Qf.dpart(); Qr_dQ_pT = result_Qr.dpart(); - + calc_it_final(here->HICUMtemp , Vbiei , Vbici , Q_pT , T_f0+1_e, ick , &result_itf, &result_itr, &result_Qf, &result_Qr); itf_dT_f0 = result_itf.dpart(); itr_dT_f0 = result_itr.dpart(); Qf_dT_f0 = result_Qf.dpart(); Qr_dT_f0 = result_Qr.dpart(); - + calc_it_final(here->HICUMtemp , Vbiei , Vbici , Q_pT , T_f0 , ick+1_e, &result_itf, &result_itr, &result_Qf, &result_Qr); itf_dick = result_itf.dpart(); itr_dick = result_itr.dpart(); @@ -1711,7 +1713,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) itr_Vciei += itr_dQ_pT*Q_pT_dVciei; Qf_Vciei += Qf_dQ_pT*Q_pT_dVciei; Qr_Vciei += Qr_dQ_pT*Q_pT_dVciei; - + // add derivatives of T_f0 = f(Vbici, T) itf_Vbici += itf_dick*T_f0_Vbici; itr_Vbici += itr_dick*T_f0_Vbici; @@ -1727,7 +1729,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) itf_Vciei += itf_dick*ick_Vciei; itr_Vciei += itr_dick*ick_Vciei; Qf_Vciei += Qf_dick*ick_Vciei; - Qr_Vciei += Qr_dick*ick_Vciei; + Qr_Vciei += Qr_dick*ick_Vciei; itf_dT += itf_dick*ick_dT; itr_dT += itr_dick*ick_dT; @@ -1741,7 +1743,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) it_Vbiei = it_ditf*itf_Vbiei + it_ditr*itr_Vbiei; it_Vbici = it_ditf*itf_Vbici + it_ditr*itr_Vbici; it_dT = it_ditf*itf_dT + it_ditr*itr_dT; - + //end final calculations -------------------------------------------------- here->HICUMtf = Tf; diff --git a/tests/hicum2/FG.cir b/tests/hicum2/FG.cir index 11c766c22..fdcf48a62 100644 --- a/tests/hicum2/FG.cir +++ b/tests/hicum2/FG.cir @@ -3,33 +3,37 @@ VE Q1_E 0 1.0 VC Q1_C 0 0.0 VB Q1_B 0 0.0 RT Q1_T 0 1M -Q1 Q1_C Q1_B Q1_E Q1_E Q1_T P1 +Q1 Q1_C Q1_B Q1_E Q1_E Q1_T P1 dt=0.0 .DC VE -0.2 -1.2 -10m .OPTIONS GMIN=1e-13 NOACCT -.print dc abs(i(vc)) abs(i(vb)) @Q1[area] @Q1[icvbe] @Q1[icvce] @Q1[temp] @Q1[m] @Q1[vbe] @Q1[vbc] @Q1[vce] @Q1[vsc] @Q1[ic] @Q1[ib] @Q1[ie] @Q1[iavl] @Q1[is] @Q1[rcx_t] @Q1[re_t] @Q1[rbi] @Q1[rb] @Q1[betadc] @Q1[gmi] @Q1[gms] @Q1[rpii] @Q1[rpix] @Q1[rmui] @Q1[rmux] @Q1[roi] @Q1[cpii] @Q1[cpix] @Q1[cmui] @Q1[cmux] @Q1[ccs] @Q1[betaac] @Q1[crbi] @Q1[tf] @Q1[ft] @Q1[p] @Q1[tk] @Q1[dtsh] +.print dc abs(i(vc)) abs(i(vb)) + +* @Q1[area] @Q1[icvbe] @Q1[icvce] @Q1[temp] @Q1[m] @Q1[vbe] @Q1[vbc] @Q1[vce] @Q1[vsc] @Q1[ic] @Q1[ib] @Q1[ie] @Q1[iavl] @Q1[is] @Q1[rcx_t] @Q1[re_t] @Q1[rbi] @Q1[rb] @Q1[betadc] @Q1[gmi] @Q1[gms] @Q1[rpii] @Q1[rpix] @Q1[rmui] @Q1[rmux] @Q1[roi] @Q1[cpii] @Q1[cpix] @Q1[cmui] @Q1[cmux] @Q1[ccs] @Q1[betaac] @Q1[crbi] @Q1[tf] @Q1[ft] @Q1[p] @Q1[tk] @Q1[dtsh] .MODEL P1 NPN LEVEL=8 -+ c10=9.074e-030 qp0=1.008e-013 hfe=10.01 hfc=20.04 hjei=3.382 hjci=0.2 -+ ibeis=1.328e-019 mbei=1.027 ireis=1.5e-014 mrei=2 ibeps=1.26e-019 mbep=1.042 -+ ireps=1.8e-014 mrep=1.8 mcf=1 tbhrec=1e-010 ibcis=4.603e-017 mbci=1.15 -+ ibcxs=0 mbcx=1 ibets=0.02035 abet=24 tunode=1 favl=18.96 qavl=5.092e-014 -+ alfav=-0.0024 alqav=-0.0006284 rbi0=4.444 rbx=2.568 fgeo=0.7409 fdqr0=0 -+ fcrbi=0 fqi=1 re=1.511 rcx=2.483 itss=0 msf=1 iscs=0 msc=1 -+ tsf=0 rsu=0 csu=0 cjei0=8.869e-015 vdei=0.714 zei=0.2489 ajei=1.65 -+ cjep0=2.178e-015 vdep=0.8501 zep=0.2632 ajep=1.6 cjci0=3.58e-015 vdci=0.8201 -+ zci=0.2857 vptci=1.79 cjcx0=6.299e-015 vdcx=0.8201 zcx=0.2863 vptcx=1.977 -+ fbcpar=0.3 fbepar=1 cjs0=2.6e-014 vds=0.9997 zs=0.4295 vpts=100 -+ t0=2.089e-013 dt0h=8e-014 tbvl=8.25e-014 tef0=3.271e-013 gtfe=3.548 thcs=5.001e-012 -+ ahc=0.05 fthc=0.7 rci0=9.523 vlim=0.6999 vces=0.01 vpt=2 tr=0 -+ cbepar=2.609e-014 cbcpar=1.64512e-014 alqf=0.166667 alit=0.333333 flnqs=0 kf=0 -+ af=2 cfbe=-1 latb=0 latl=0 vgb=0.91 alt0=0.004 kt0=6.588e-005 -+ zetaci=0.58 alvs=0.001 alces=-0.2286 zetarbi=0.3002 zetarbx=0.06011 zetarcx=-0.02768 -+ zetare=-0.9605 zetacx=0 vge=1.17 vgc=1.17 vgs=1.17 f1vg=-0.000102377 f2vg=0.00043215 -+ zetact=5 zetabet=4.892 flsh=0 rth=1113.4 cth=6.841e-012 zetarth=0 -+ alrth=0.002 flcomp=2.4 tnom=26.85 acbar=1.5 flcono=0 icbar=0.01 -+ vcbar=0.04 zetavgbe=0.7 hf0=40 ahjei=3 rhjei=2 delck=2 zetahjei=-0.5 ++ tr=0.0000000000e+00 acbar=1.5000000000e+00 ahc=5.0000000000e-02 aick=1.0000000000e-03 delck=2.0000000000e+00 dt0h=0.0000000000e+00 fthc=7.0000000000e-01 gtfe=3.5480000000e+00 icbar=1.0000000000e-02 rci0=1.0000000000e-09 t0=1.0000000000e-15 tbvl=0.0000000000e+00 tef0=3.2710000000e-13 thcs=5.0010000000e-12 vcbar=4.0000000000e-02 vces=1.0000000000e-02 vlim=6.9990000000e-01 vpt=2.0000000000e+00 ajei=1.6500000000e+00 ajep=1.6000000000e+00 cjci0=3.5800000000e-15 cjcx0=0.0000000000e+00 cjei0=8.8690000000e-15 cjep0=0.0000000000e+00 cjs0=0.0000000000e+00 cscp0=0.0000000000e+00 fbcpar=3.0000000000e-01 fbepar=1.0000000000e+00 vdci=8.2010000000e-01 vdcx=8.2010000000e-01 vdei=7.1400000000e-01 vdep=8.5010000000e-01 vds=9.9970000000e-01 vdsp=6.0000000000e-01 vptci=1.7900000000e+00 vptcx=1.9770000000e+00 vpts=1.0000000000e+02 vptsp=1.0000000000e+02 zci=2.8570000000e-01 zcx=2.8630000000e-01 zei=2.4890000000e-01 zep=2.6320000000e-01 zs=4.2950000000e-01 zsp=5.0000000000e-01 cbcpar=0.0000000000e+00 cbepar=2.6090000000e-14 alfav=-2.4000000000e-03 alkav=0.0000000000e+00 alqav=-6.2840000000e-04 favl=1.8960000000e+01 kavl=0.0000000000e+00 qavl=5.0920000000e-14 ibcis=4.6030000000e-17 ibcxs=0.0000000000e+00 mbci=1.1500000000e+00 mbcx=1.0000000000e+00 ibeis=1.3280000000e-19 ibeps=0.0000000000e+00 ireis=0.0000000000e+00 ireps=0.0000000000e+00 mbei=1.0270000000e+00 mbep=1.0420000000e+00 mrei=2.0000000000e+00 mrep=1.8000000000e+00 tbhrec=0.0000000000e+00 abet=2.4000000000e+01 ibets=0.0000000000e+00 tunode=1.0000000000e+00 iscs=0.0000000000e+00 itss=0.0000000000e+00 msc=1.0000000000e+00 msf=1.0000000000e+00 tsf=0.0000000000e+00 ahjei=3.0000000000e+00 c10=1.0000000000e-15 hf0=4.0000000000e+01 hfc=2.0040000000e+01 hfe=1.0010000000e+01 hjci=2.0000000000e-01 hjei=3.3820000000e+00 ich=0.0000000000e+00 mcf=1.0000000000e+00 qp0=1.0080000000e-13 rhjei=2.0000000000e+00 latb=0.0000000000e+00 latl=0.0000000000e+00 alit=3.3333300000e-01 alqf=1.6666700000e-01 flnqs=0.0000000000e+00 af=2.0000000000e+00 afre=2.0000000000e+00 cfbe=-1.0000000000e+00 flcono=0.0000000000e+00 kf=0.0000000000e+00 kfre=0.0000000000e+00 fcrbi=0.0000000000e+00 fdqr0=0.0000000000e+00 fgeo=7.4090000000e-01 fqi=1.0000000000e+00 rbi0=0.0000000000e+00 rbx=0.0000000000e+00 rcx=0.0000000000e+00 re=1.0000000000e+00 csu=0.0000000000e+00 rsu=0.0000000000e+00 alrth=2.0000000000e-03 cth=6.8410000000e-12 flsh=0.0000000000e+00 rth=1.1134000000e+03 zetarth=0.0000000000e+00 flcomp=2.4000000000e+00 tnom=2.6850000000e+01 alb=0.0000000000e+00 alces=-2.2860000000e-01 alt0=4.0000000000e-03 alvs=1.0000000000e-03 dvgbe=0.0000000000e+00 f1vg=-1.0237700000e-04 f2vg=4.3215000000e-04 kt0=6.5880000000e-05 vgb=9.1000000000e-01 vgc=1.1700000000e+00 vge=1.1700000000e+00 vgs=1.1700000000e+00 zetabet=4.8920000000e+00 zetaci=5.8000000000e-01 zetact=5.0000000000e+00 zetacx=0.0000000000e+00 zetahjei=-5.0000000000e-01 zetarbi=3.0020000000e-01 zetarbx=6.0110000000e-02 zetarcx=-2.7680000000e-02 zetare=-9.6050000000e-01 zetavgbe=7.0000000000e-01 + +* + c10=9.074e-030 qp0=1.008e-013 hfe=10.01 hfc=20.04 hjei=3.382 hjci=0.2 +* + ibeis=1.328e-019 mbei=1.027 ireis=1.5e-014 mrei=2 ibeps=1.26e-019 mbep=1.042 +* + ireps=1.8e-014 mrep=1.8 mcf=1 tbhrec=1e-010 ibcis=4.603e-017 mbci=1.15 +* + ibcxs=0 mbcx=1 ibets=0.02035 abet=24 tunode=1 favl=18.96 qavl=5.092e-014 +* + alfav=-0.0024 alqav=-0.0006284 rbi0=4.444 rbx=2.568 fgeo=0.7409 fdqr0=0 +* + fcrbi=0 fqi=1 re=1.511 rcx=2.483 itss=0 msf=1 iscs=0 msc=1 +* + tsf=0 rsu=0 csu=0 cjei0=8.869e-015 vdei=0.714 zei=0.2489 ajei=1.65 +* + cjep0=2.178e-015 vdep=0.8501 zep=0.2632 ajep=1.6 cjci0=3.58e-015 vdci=0.8201 +* + zci=0.2857 vptci=1.79 cjcx0=6.299e-015 vdcx=0.8201 zcx=0.2863 vptcx=1.977 +* + fbcpar=0.3 fbepar=1 cjs0=2.6e-014 vds=0.9997 zs=0.4295 vpts=100 +* + t0=2.089e-013 dt0h=8e-014 tbvl=8.25e-014 tef0=3.271e-013 gtfe=3.548 thcs=5.001e-012 +* + ahc=0.05 fthc=0.7 rci0=9.523 vlim=0.6999 vces=0.01 vpt=2 tr=0 +* + cbepar=2.609e-014 cbcpar=1.64512e-014 alqf=0.166667 alit=0.333333 flnqs=0 kf=0 +* + af=2 cfbe=-1 latb=0 latl=0 vgb=0.91 alt0=0.004 kt0=6.588e-005 +* + zetaci=0.58 alvs=0.001 alces=-0.2286 zetarbi=0.3002 zetarbx=0.06011 zetarcx=-0.02768 +* + zetare=-0.9605 zetacx=0 vge=1.17 vgc=1.17 vgs=1.17 f1vg=-0.000102377 f2vg=0.00043215 +* + zetact=5 zetabet=4.892 flsh=0 rth=1113.4 cth=6.841e-012 zetarth=0 +* + alrth=0.002 flcomp=2.4 tnom=26.85 acbar=1.5 flcono=0 icbar=0.01 +* + vcbar=0.04 zetavgbe=0.7 hf0=40 ahjei=3 rhjei=2 delck=2 zetahjei=-0.5 .END