diff --git a/src/spicelib/devices/adms/mextram/admsva/opinfo.inc b/src/spicelib/devices/adms/mextram/admsva/opinfo.inc new file mode 100644 index 000000000..7554c61ad --- /dev/null +++ b/src/spicelib/devices/adms/mextram/admsva/opinfo.inc @@ -0,0 +1,212 @@ +// Evaluate the operating point (outout) variables +begin + +`ifdef __VAMS_COMPACT_MODELING__ + +// The external currents and the current gain +OP_ic = I(); // External DC collector current +OP_ib = I(); // External DC base Current + +OP_betadc = OP_ic / OP_ib; // External DC Current gain + +// The internal voltage differences +OP_vb2e1 = Vb2e1; // Internal base-emiter bias +OP_vb2c2 = Vb2c2; // Internal base-emiter bias +OP_vb2c1 = Vb2c1; // Internal base-collector bias including epilayer + +OP_vb1c1 = Vb1b2 + Vb2c1; // External base-collector bias without contact resistances + +OP_vc4c1 = Vc4c1; // Bias over intrinsic buried layer +OP_vc3c4 = Vc3c4; // Bias over extrinsic buried layer + +OP_ve1e = - Vee1; // Bias over emiter resistance + +// The branch currents +OP_in = In; // Main current +OP_ic1c2 = Ic1c2; // Epilayer current +OP_ib1b2 = Ib1b2; // Pinched-base current +OP_ib1 = Ib1; // Ideal forward base current +OP_sib1 = Ib1_s; // Ideal side-wall base current +OP_ib2 = Ib2; // Non-ideal forward base current +OP_ib3 = Ib3; // Non-ideal reverse base current +OP_iavl = Iavl; // Avalanche current +OP_iex = Iex; // Extrinsic reverse base current +OP_xiex = XIex; // Extrinsic reverse base current +`ifdef SUBSTRATE +OP_isub = Isub; // Substrate current +OP_xisub = XIsub; // Substrate current +OP_isf = Isf; // Substrate failure current +`endif +OP_ire = - Vee1 / RE_TM; // Current through emiter resistance +OP_irbc = Vbb1 / RBC_TM; // Current through constant base resistance + +OP_ircc = Vcc3 * GCCxx_TM; // Current through collector contact resistance +OP_ircblx = Vc3c4 * GCCex_TM; // Current through extrinsic buried layer resistance +OP_ircbli = Vc4c1 * GCCin_TM; // Current through extrinsic buried layer resistance + +// The branch charges +OP_qe = Qe; // Emitter charge or emitter neutral charge +OP_qte = Qte; // Base-emiter depletion charge +OP_sqte = Qte_s; // Sidewall base-emiter depletion charge +OP_qbe = Qbe; // Base-emiter diffusion charge +OP_qbc = Qbc; // Base-collector diffusion charge +OP_qtc = Qtc; // Base-colector depletion charge +OP_qepi = Qepi; // Epilayer diffusion charge +OP_qb1b2 = Qb1b2; // AC current crowding charge +OP_qtex = Qtex; // Extrinsic base-collector depletion charge +OP_xqtex = XQtex; // Extrinsic base-collector depletion charge +OP_qex = Qex; // Extrinsic base-collector diffusion charge +OP_xqex = XQex; // Extrinsic base-collector diffusion charge +`ifdef SUBSTRATE +OP_qts = Qts; // Collector substrate depletion charge +`endif + +// Small signal equivalent circuit conductances and resistances + +OP_gx = - ddx(In, V(e1)); // Forward transconductance +OP_gy = - ddx(In, V(c2)); // Reverse transconductance + +OP_gz = - ddx(In, V(c1)); // Reverse transconductance + +OP_sgpi = - ddx(Ib1_s, V(e)) + - ddx(Ib1_s, V(e1)); // Conductance sidewal b-e junction +OP_gpix = - ddx(Ib1+Ib2, V(e1)); // Conductance floor b-e junction + +OP_gpiy = - ddx(Ib1, V(c2)); // Early effect on recombination base current +OP_gpiz = - ddx(Ib1, V(c1)); // Early effect on recombination base current + +OP_gmux = ddx( Iavl, V(e1)); // Early effect on avalanche current limitting +OP_gmuy = ddx( Iavl, V(c2)); // Conductance of avalanche current +OP_gmuz = - ddx(- Iavl, V(c1)); // Conductance of avalanche current + +// Conductance extrinsic b-c current : +OP_gmuex = ddx(Iex+Ib3, V(e)) + + ddx(Iex+Ib3, V(b1)) + + ddx(Iex+Ib3, V(b2)) + + ddx(Iex+Ib3, V(e1)) + + ddx(Iex+Ib3, V(c2)); + +OP_xgmuex = ddx(XIex, V(b)) ; // Conductance extrinsic b-c current + +OP_grcvy = - ddx(Ic1c2, V(c2)); // Conductance of epilayer current +OP_grcvz = - ddx(Ic1c2, V(c1)); // Conductance of epilayer current + +OP_rbv = 1.0 / (- ddx(Ib1b2, V(b2)) - ddx(Ib1b2, V(c2))); // Base resistance + +OP_grbvx = - ddx(Ib1b2, V(e)) - ddx(Ib1b2, V(e1)); // Early effect on base resistance +OP_grbvy = - ddx(Ib1b2, V(c2)); // Early effect on base resistance + +OP_grbvz = - ddx(Ib1b2, V(c1)); // Early effect on base resistance + +OP_re = RE_TM; // Emiter resistance +OP_rbc = RBC_TM; // Constant base resistance +OP_rcc = RCCxx_TM; // Collector Contact resistance +OP_rcblx = RCCex_TM; // Extrinsic buried layer resistance +OP_rcbli = RCCin_TM; // Extrinsic buried layer resistance + + +`ifdef SUBSTRATE +OP_gs = ddx(Isub, V(b)) + ddx(Isub, V(b1)); // Conductance parasitic PNP transitor +OP_xgs = ddx(XIsub, V(b)) ; // Conductance parasitic PNP transistor +OP_gsf = ddx(Isf, V(s)) ; // Conductance substrate failure current +`endif + + + +// Small signal equivalent circuit capacitances +OP_scbe = - ddx(Qte_s, V(e)) - ddx(Qte_s, V(e1)); // Capacitance sidewall b-e junction + +OP_cbex = - ddx(Qte + Qbe + Qe, V(e1)) ; // Capacitance floor b-e junction + +OP_cbey = - ddx(Qbe, V(c2)); // Early effect on b-e diffusion junction + +OP_cbez = - ddx(Qbe, V(c1)); // Early effect on b-e diffusion junction + +OP_cbcx = - ddx(Qbc, V(e)) - ddx(Qbc, V(e1)); // Early effect on b-c diffusion junction + + +OP_cbcy = - ddx(Qtc + Qbc + Qepi, V(c2)); // Capacitance floor b-c junction +OP_cbcz = - ddx(Qtc + Qbc + Qepi, V(c1)); // Capacitance floor b-c junction + +// Capacitance extrinsic b-c junction : +OP_cbcex = ddx(Qtex + Qex,V(e)) + + ddx(Qtex + Qex,V(b1 )) + + ddx(Qtex + Qex,V(b2)) + + ddx(Qtex + Qex,V(e1)) + + ddx(Qtex + Qex,V(c2)) ; + +// Capacitance extrinsic b-c junction : +OP_xcbcex = ddx(XQtex + XQex, V(b)) ; + +OP_cb1b2 = - ddx(Qb1b2, V(b2)) - ddx(Qb1b2, V(c2)); // Capacitance AC current crowding + +OP_cb1b2x = - ddx(Qb1b2, V(e)) - ddx(Qb1b2, V(e1)); // Cross-capacitance AC current crowding +OP_cb1b2y = - ddx(Qb1b2, V(c2)); // Cross-capacitance AC current crowding +OP_cb1b2z = - ddx(Qb1b2, V(c1)) ; // Cross-capacitance AC current crowding + +`ifdef SUBSTRATE +OP_cts = ddx(Qts, V(s)) ; // Capacitance s-c junction +`endif + +// Approximate small signal equivalent circuit +dydx = (OP_gx - OP_gmux) / (OP_grcvy + OP_gmuy - OP_gy); +dydz = (OP_gz - OP_grcvz - OP_gmuz) / (OP_grcvy + OP_gmuy - OP_gy); +gpi = OP_sgpi + OP_gpix + OP_gmux + OP_gpiz + OP_gmuz + + (OP_gpiy + OP_gmuy) * (dydx + dydz); +OP_gm = (OP_grcvy * (OP_gx - OP_gmux + // Transconductance + OP_gz - OP_gmuz) - OP_grcvz * + (OP_gy - OP_gmuy)) / (OP_grcvy + OP_gmuy - OP_gy); +OP_beta = OP_gm / gpi; // Current amplification +OP_gout = ((OP_gy - OP_gmuy) * OP_grcvz - // Output conductance + (OP_gz - OP_gmuz) * OP_grcvy) / + (OP_grcvy + OP_gmuy - OP_gy); +OP_gmu = OP_gpiz + OP_gmuz + (OP_gpiy + OP_gmuy) * dydz + // Feedback transconductance + OP_gmuex + OP_xgmuex; +OP_rb = RBC_TM + OP_rbv; // Base resistance +OP_rc = OP_rcc + OP_rcblx + OP_rcbli; // Collector resistance +OP_cbe = OP_cbex + OP_scbe + OP_cbcx + // Base-emitter capacitance + (OP_cbey + OP_cbcy) * dydx + CBEO_M; +OP_cbc = (OP_cbey + OP_cbcy) * dydz + OP_cbcz + // Base-collector capacitance + OP_cbcex + OP_xcbcex + CBCO_M; + + +// Quantities to describe internal state of the model +gammax = (OP_gpix + OP_gmux - OP_grbvx) * OP_rbv; +gammay = (OP_gpiy + OP_gmuy - OP_grbvy) * OP_rbv; +gammaz = (OP_gpiz + OP_gmuz - OP_grbvz) * OP_rbv; +gbfx = OP_gpix + OP_sgpi * (1.0 + gammax); +gbfy = OP_gpiy + OP_sgpi * gammay; +gbfz = OP_gpiz + OP_sgpi * gammaz; + +// RvdT March 2008: +alpha_ft = (1.0 + (OP_grcvy * dydx * OP_rc) + + (OP_gx + gbfx + (OP_gy + gbfy) * dydx) * RE_TM)/ + (1.0 - (OP_grcvz + OP_grcvy * dydz) * OP_rc - + (OP_gz + gbfz + (OP_gy + gbfy) * dydz) * RE_TM); + +rx = pow((OP_grcvy * dydx + alpha_ft * (OP_grcvz + OP_grcvy * dydz)), -1); +rz = alpha_ft * rx; +ry = (1.0 - OP_grcvz * rz) / OP_grcvy; +rb1b2 = gammax * rx + gammay * ry + gammaz * rz; +rex = rz + rb1b2 - OP_rcbli; +xrex = rex + RBC_TM * ((gbfx + OP_gmux) * rx + (gbfy + OP_gmuy) * ry + + (gbfz + OP_gmuz) * rz) - OP_rcbli - OP_rcblx; + +taut = OP_scbe * (rx + rb1b2) + (OP_cbex + OP_cbcx) * rx + (OP_cbey + OP_cbcy) * + ry + (OP_cbez + OP_cbcz) * rz + OP_cbcex * rex + OP_xcbcex * xrex + + (CBEO_M + CBCO_M) * (xrex - RCCxx_TM); + +OP_ft = 1.0 / (2.0 * `PI * taut); // Good approximation for cut-off frequency +OP_iqs = Iqs; // Current at onset of quasi-saturation +OP_xiwepi = xi_w; // Thickness of injection layer +OP_vb2c2star = Vb2c2star; // Physical value of internal base-collector bias + +//self-heating +`ifdef SELFHEATING +OP_pdiss = power; // Dissipation +`endif + +OP_tk = Tk; // Actual temperature + +`endif +end diff --git a/src/spicelib/devices/adms/mextram/admsva/opvars.inc b/src/spicelib/devices/adms/mextram/admsva/opvars.inc new file mode 100644 index 000000000..e6a68b09e --- /dev/null +++ b/src/spicelib/devices/adms/mextram/admsva/opvars.inc @@ -0,0 +1,123 @@ +// +// Operation point (output) variables +// + +// The external currents and current gain +`OPP(OP_ic, A, External DC collector current) +`OPP(OP_ib, A, External DC base current) +`OPP(OP_betadc, , External DC current gain Ic/Ib) + +// The internal biases +`OPP(OP_vb2e1, V, Internal base-emitter bias) +`OPP(OP_vb2c2, V, Internal base-collector bias) +`OPP(OP_vb2c1, V, Internal base-collector bias including epilayer) +`OPP(OP_vb1c1, V, External base-collector bias without contact resistances) +`OPP(OP_vc4c1, V, Bias over intrinsic buried layer) +`OPP(OP_vc3c4, V, Bias over extrinsic buried layer) +`OPP(OP_ve1e, V, Bias over emitter resistance) + +// The actual currents +`OPP(OP_in, A, Main current) +`OPP(OP_ic1c2, A, Epilayer current) +`OPP(OP_ib1b2, A, Pinched-base current) +`OPP(OP_ib1, A, Ideal forward base current) +`OPP(OP_sib1, A, Ideal side-wall base current) +`OPP(OP_ib2, A, Non-ideal forward base current) +`OPP(OP_ib3, A, Non-ideal reverse base current) +`OPP(OP_iavl, A, Avalanche current) +`OPP(OP_iex, A, Extrinsic reverse base current) + +`OPP(OP_xiex, A, Extrinsic reverse base current) +`OPP(OP_isub, A, Substrate current) +`OPP(OP_xisub, A, Substrate current) +`OPP(OP_isf, A, Substrate failure current) +`OPP(OP_ire, A, Current through emitter resistance) +`OPP(OP_irbc, A, Current through constant base resistance) +`OPP(OP_ircblx, A, Current through extrinsic buried layer resistance) +`OPP(OP_ircbli, A, Current through intrinsic buried layer resistance) +`OPP(OP_ircc, A, Current through collector contact resistance) + +//The actual charges +`OPP(OP_qe, C, Emitter charge or emitter neutral charge) +`OPP(OP_qte, C, Base-emitter depletion charge) +`OPP(OP_sqte, C, Sidewall base-emitter depletion charge) +`OPP(OP_qbe, C, Base-emitter diffusion charge) +`OPP(OP_qbc, C, Base_collector diffusion charge) +`OPP(OP_qtc, C, Base-collector depletion charge) +`OPP(OP_qepi, C, Epilayer diffusion charge) +`OPP(OP_qb1b2, C, AC current crowding charge) +`OPP(OP_qtex, C, Extrinsic base-collector depletion charge) +`OPP(OP_xqtex, C, Extrinsic base-collector depletion charge) +`OPP(OP_qex, C, Extrinsic base-collector diffusion charge) +`OPP(OP_xqex, C, Extrinsic base-collector diffusion charge) +`OPP(OP_qts, C, Collector-substrate depletion charge) + +//Small signal equivalent circuit conductances and resistances +`OPP(OP_gx, S, Forward transconductance) +`OPP(OP_gy, S, Reverse transconductance) +`OPP(OP_gz, S, Reverse transconductance) +`OPP(OP_sgpi, S, Conductance sidewall b-e junction) +`OPP(OP_gpix, S, Conductance floor b-e junction) +`OPP(OP_gpiy, S, Early effect on recombination base current) +`OPP(OP_gpiz, S, Early effect on recombination base current) +`OPP(OP_gmux, S, Early effect on avalanche current limiting) +`OPP(OP_gmuy, S, Conductance of avalanche current) +`OPP(OP_gmuz, S, Conductance of avalanche current) +`OPP(OP_gmuex, S, Conductance of extrinsic b-c junction) +`OPP(OP_xgmuex, S, Conductance of extrinsic b-c junction) +`OPP(OP_grcvy, S, Conductance of epilayer current) +`OPP(OP_grcvz, S, Conductance of epilayer current) +`OPP(OP_rbv, Ohm, Base resistance) +`OPP(OP_grbvx, S, Early effect on base resistance) +`OPP(OP_grbvy, S, Early effect on base resistance) +`OPP(OP_grbvz, S, Early effect on base resistance) +`OPP(OP_re, Ohm, Emitter resistance) +`OPP(OP_rbc, Ohm, Constant base resistance) +`OPP(OP_rcc, Ohm, Collector contact resistance) +`OPP(OP_rcblx, Ohm, Extrinsic buried layer resistance) +`OPP(OP_rcbli, Ohm, Intrinsic buried layer resistance) +`OPP(OP_gs, S, Conductance parasistic PNP transistor) +`OPP(OP_xgs, S, Conductance parasistic PNP transistor) +`OPP(OP_gsf, S, Conductance substrate failure current) + +//Small signal equivalent circuit capacitances +`OPP(OP_scbe, F, Capacitance sidewall b-e junction) +`OPP(OP_cbex, F, Capacitance floor b-e junction) +`OPP(OP_cbey, F, Early effect on b-e diffusion charge) +`OPP(OP_cbez, F, Early effect on b-e diffusion charge) +`OPP(OP_cbcx, F, Early effect on b-c diffusion charge) +`OPP(OP_cbcy, F, Capacitance floor b-c junction) +`OPP(OP_cbcz, F, Capacitance floor b-c junction) +`OPP(OP_cbcex, F, Capacitance extrinsic b-c junction) +`OPP(OP_xcbcex, F, Capacitance extrinsic b-c junction) +`OPP(OP_cb1b2, F, Capacitance AC current crowding) +`OPP(OP_cb1b2x, F, Cross-capacitance AC current crowding) +`OPP(OP_cb1b2y, F, Cross-capacitance AC current crowding) +`OPP(OP_cb1b2z, F, Cross-capacitance AC current crowding) +`OPP(OP_cts, F, Capacitance s-c junction) + +//Approximate small signal equivalent circuit +`OPP(OP_gm, S,transconductance) +`OPP(OP_beta, , Current amplification) +`OPP(OP_gout, S, Output conductance) +`OPP(OP_gmu, S, Feedback transconductance) +`OPP(OP_rb, Ohm, Base resistance) +`OPP(OP_rc, Ohm, Collector resistance) +`OPP(OP_cbe, C, Base-emitter capacitance) +`OPP(OP_cbc, C, Base-collector capacitance) + +//quantities to describe internal state of the model +`OPP(OP_ft, , Good approximation for cut-off frequency) +`OPP(OP_iqs, A, Current at onset of quasi-saturation) +`OPP(OP_xiwepi, m, Thickness of injection layer) +`OPP(OP_vb2c2star, V, Physical value of internal base-collector bias) + +//self-heating +`OPP(OP_pdiss, W, Dissipation) +`OPP(OP_tk, K, Actual temperature) + +//help variables +real dydx, dydz, gpi; +real gammax, gammay, gammaz, gbfx, gbfy, gbfz, alpha_ft; +real rx, ry, rz, rb1b2, rex, xrex, taut; +