Update to release version 504.7 now with selfheating
This commit is contained in:
parent
1935e00ff3
commit
9c7e45b1d7
|
|
@ -809,23 +809,23 @@ analog begin
|
||||||
|
|
||||||
// Following code is an intermediate solution:
|
// Following code is an intermediate solution:
|
||||||
// ******************************************
|
// ******************************************
|
||||||
//if(flsh == 0 || rth < `MIN_R) begin
|
if(flsh == 0 || rth < `MIN_R) begin
|
||||||
// I(br_sht) <+ Vrth/`MIN_R;
|
I(br_sht) <+ Vrth/`MIN_R;
|
||||||
//end else begin
|
end else begin
|
||||||
// I(br_sht) <+ Vrth/rth-pterm `P(spectre:gmin="add");
|
I(br_sht) <+ Vrth/rth-pterm `P(spectre:gmin="add");
|
||||||
// I(br_sht) <+ ddt(cth*Vrth);
|
I(br_sht) <+ ddt(cth*Vrth);
|
||||||
//end
|
end
|
||||||
// ******************************************
|
// ******************************************
|
||||||
// For simulators having no problem with V(br_sht) <+ 0.0
|
// For simulators having no problem with V(br_sht) <+ 0.0
|
||||||
// with external thermal node, follwing code may be used.
|
// with external thermal node, follwing code may be used.
|
||||||
// This external thermal node should remain accessible.
|
// This external thermal node should remain accessible.
|
||||||
// ********************************************
|
// ********************************************
|
||||||
if(flsh == 0 || rth < `MIN_R) begin
|
//if(flsh == 0 || rth < `MIN_R) begin
|
||||||
V(br_sht) <+ 0.0;
|
// V(br_sht) <+ 0.0;
|
||||||
end else begin
|
//end else begin
|
||||||
I(br_sht) <+ Vrth/rth-pterm `P(spectre:gmin="add");
|
// I(br_sht) <+ Vrth/rth-pterm `P(spectre:gmin="add");
|
||||||
I(br_sht) <+ ddt(cth*Vrth);
|
// I(br_sht) <+ ddt(cth*Vrth);
|
||||||
end
|
//end
|
||||||
// ********************************************
|
// ********************************************
|
||||||
|
|
||||||
// Noise sources
|
// Noise sources
|
||||||
|
|
|
||||||
|
|
@ -469,9 +469,9 @@ module hic2_full (c,b,e,s,tnode);
|
||||||
|
|
||||||
inout c,b,e,s,tnode;
|
inout c,b,e,s,tnode;
|
||||||
electrical c,b,e,s,ci,ei,bp,bi,si;
|
electrical c,b,e,s,ci,ei,bp,bi,si;
|
||||||
electrical xf1,xf2,xf3,xf4;
|
electrical xf1,xf2,xf3,xf4;
|
||||||
electrical tnode;
|
electrical tnode;
|
||||||
electrical n1,n2;
|
electrical n1,n2;
|
||||||
|
|
||||||
//Branch definitions
|
//Branch definitions
|
||||||
branch (b,bp) br_bbp_i;
|
branch (b,bp) br_bbp_i;
|
||||||
|
|
@ -1558,20 +1558,18 @@ begin : Load_sources
|
||||||
I(br_sht) <+ V(br_sht)/rth-pterm;
|
I(br_sht) <+ V(br_sht)/rth-pterm;
|
||||||
I(br_sht) <+ ddt(cth*V(br_sht));
|
I(br_sht) <+ ddt(cth*V(br_sht));
|
||||||
end
|
end
|
||||||
|
|
||||||
// ******************************************
|
// ******************************************
|
||||||
|
|
||||||
// For simulators having no problem with V(br_sht) <+ 0.0
|
// For simulators having no problem with V(br_sht) <+ 0.0
|
||||||
// with external thermal node, follwing code may be used.
|
// with external thermal node, follwing code may be used.
|
||||||
// Note that external thermal node should remain accessible
|
// Note that external thermal node should remain accessible
|
||||||
// even without self-heating.
|
// even without self-heating.
|
||||||
// ********************************************
|
// ********************************************
|
||||||
//if(flsh == 0 || rth < `MIN_R) begin
|
//if(flsh == 0 || rth < `MIN_R) begin
|
||||||
// V(br_sht) <+ 0.0;
|
// V(br_sht) <+ 0.0;
|
||||||
//end else begin
|
//end else begin
|
||||||
// I(br_sht) <+ V(br_sht)/rth-pterm;
|
// I(br_sht) <+ V(br_sht)/rth-pterm;
|
||||||
// I(br_sht) <+ ddt(cth*V(br_sht));
|
// I(br_sht) <+ ddt(cth*V(br_sht));
|
||||||
//end
|
//end
|
||||||
// ********************************************
|
// ********************************************
|
||||||
|
|
||||||
// NQS effect
|
// NQS effect
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,40 @@
|
||||||
|
Verilog-A implementation of the Mextram Bipolar Transistor Model,
|
||||||
Verilog-A implementation of the Philips Mextram (level 504.6) model.
|
including variants of the Mextram model released by Delft University.
|
||||||
|
|
||||||
Copyright (c) 2002-2005 Delft University of Technology (TUD).
|
Copyright (c) 2006 Delft University of Technology
|
||||||
All rights reserved.
|
Licensed under the Educational Community License version 1.0
|
||||||
|
|
||||||
Permission to modify the code and to distribute modified code is
|
|
||||||
granted, provided the file with the copyright notice is retained,
|
|
||||||
and a notice that the code was modified is included.
|
|
||||||
|
|
||||||
|
This Original Work, including software, source code, documents, or other related items,
|
||||||
|
is being provided by the copyright holder(s) subject to the terms of the Educational
|
||||||
|
Community License. By obtaining, using and/or copying this Original Work, you agree that
|
||||||
|
you have read, understand, and will comply with the following terms and conditions of
|
||||||
|
the Educational Community License:
|
||||||
|
|
||||||
|
Permission to use, copy, modify, merge, publish, distribute, and sublicense this Original
|
||||||
|
Work and its documentation, with or without modification, for any purpose, and without fee
|
||||||
|
or royalty to the copyright holder(s) is hereby granted, provided that you include the
|
||||||
|
following on ALL copies of the Original Work or portions thereof, including modifications
|
||||||
|
or derivatives, that you make:
|
||||||
|
|
||||||
|
The full text of the Educational Community License in a location viewable to users of the
|
||||||
|
redistributed or derivative work.
|
||||||
|
|
||||||
|
Any pre-existing intellectual property disclaimers, notices, or terms and conditions.
|
||||||
|
|
||||||
|
Notice of any changes or modifications to the Original Work, including the date the
|
||||||
|
changes were made.
|
||||||
|
|
||||||
|
Any modifications of the Original Work must be distributed in such a manner as to avoid
|
||||||
|
any confusion with the Original Work of the copyright holders.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
||||||
|
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
The name and trademarks of copyright holder(s) may NOT be used in advertising or publicity
|
||||||
|
pertaining to the Original or Derivative Works without specific, written prior permission.
|
||||||
|
Title to copyright in the Original Work and any associated documentation will at all times
|
||||||
|
remain with the copyright holders.
|
||||||
|
|
@ -8,32 +8,72 @@ begin // Currents and sharges
|
||||||
Vb2e1 = TYPE * V(b2, e1);
|
Vb2e1 = TYPE * V(b2, e1);
|
||||||
Vb1e1 = TYPE * V(b1, e1);
|
Vb1e1 = TYPE * V(b1, e1);
|
||||||
Vb1b2 = TYPE * V(b1, b2);
|
Vb1b2 = TYPE * V(b1, b2);
|
||||||
Vb1c1 = TYPE * V(b1, c1);
|
|
||||||
Vbc1 = TYPE * V(b, c1);
|
|
||||||
`ifdef SUBSTRATE
|
`ifdef SUBSTRATE
|
||||||
Vsc1 = TYPE * V(s, c1);
|
Vsc1 = TYPE * V(s, c1);
|
||||||
`endif
|
`endif
|
||||||
Vc1c2 = TYPE * V(c1, c2);
|
Vc1c2 = TYPE * V(c1, c2);
|
||||||
Vee1 = TYPE * V(e, e1);
|
Vee1 = TYPE * V(e, e1);
|
||||||
Vbb1 = TYPE * V(b, b1);
|
Vbb1 = TYPE * V(b, b1);
|
||||||
Vcc1 = TYPE * V(c, c1);
|
|
||||||
Vbe = TYPE * V(b, e);
|
Vbe = TYPE * V(b, e);
|
||||||
Vbc = TYPE * V(b, c);
|
Vbc = TYPE * V(b, c);
|
||||||
|
|
||||||
|
/* RvdT, 03-12-2007, voltage differences
|
||||||
|
associated with distributed parasitic collector.
|
||||||
|
Evaluated taking values of resistances into account:
|
||||||
|
in case of vanishing resistance corresponding node
|
||||||
|
is not addressed: */
|
||||||
|
|
||||||
|
if (RCBLX > 0.0)
|
||||||
|
begin
|
||||||
|
if (RCBLI > 0.0)
|
||||||
|
begin
|
||||||
|
Vc4c1 = TYPE * V(c4, c1);
|
||||||
|
Vc3c4 = TYPE * V(c3, c4);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Vc4c1 = 0 ;
|
||||||
|
Vc3c4 = TYPE * V(c3, c1);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
if (RCBLI > 0.0)
|
||||||
|
begin
|
||||||
|
Vc4c1 = TYPE * V(c4, c1);
|
||||||
|
Vc3c4 = 0 ;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Vc4c1 = 0 ;
|
||||||
|
Vc3c4 = 0 ;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Vb1c4 = Vb1b2 + Vb2c2 - Vc1c2 - Vc4c1 ;
|
||||||
|
Vcc3 = - Vbc + Vbb1 + Vb1c4 - Vc3c4 ;
|
||||||
|
Vbc3 = Vbc + Vcc3 ;
|
||||||
|
|
||||||
|
`ifdef SUBSTRATE
|
||||||
|
Vsc4 = Vsc1 - Vc4c1 ;
|
||||||
|
Vsc3 = Vsc4 - Vc3c4 ;
|
||||||
|
`endif
|
||||||
|
|
||||||
|
|
||||||
// Exponential bias terms
|
// Exponential bias terms
|
||||||
|
|
||||||
`expLin(eVb2c2,Vb2c2 * VtINV)
|
`expLin(eVb2c2,Vb2c2 * VtINV)
|
||||||
`expLin(eVb2e1,Vb2e1 * VtINV)
|
`expLin(eVb2e1,Vb2e1 * VtINV)
|
||||||
`expLin(eVb1e1,Vb1e1 * VtINV)
|
`expLin(eVb1e1,Vb1e1 * VtINV)
|
||||||
`expLin(eVb1c1,Vb1c1 * VtINV)
|
`expLin(eVb1c4,Vb1c4 * VtINV)
|
||||||
`expLin(eVb1b2,Vb1b2 * VtINV)
|
`expLin(eVb1b2,Vb1b2 * VtINV)
|
||||||
`expLin(eVbc1,Vbc1 * VtINV)
|
`expLin(eVbc3,Vbc3 * VtINV)
|
||||||
`ifdef SUBSTRATE
|
`ifdef SUBSTRATE
|
||||||
`expLin(eVsc1,Vsc1 * VtINV)
|
`expLin(eVsc1,Vsc1 * VtINV)
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
`expLin(eVbc1VDC,(Vbc1 - VDC_T) * VtINV)
|
`expLin(eVbc3VDC,(Vbc3 - VDC_T) * VtINV)
|
||||||
`expLin(eVb1c1VDC,(Vb1c1 - VDC_T) * VtINV)
|
`expLin(eVb1c4VDC,(Vb1c4 - VDC_T) * VtINV)
|
||||||
`expLin(eVb2c2VDC,(Vb2c2 - VDC_T) * VtINV)
|
`expLin(eVb2c2VDC,(Vb2c2 - VDC_T) * VtINV)
|
||||||
`expLin(eVb2c1VDC,(Vb2c1 - VDC_T) * VtINV)
|
`expLin(eVb2c1VDC,(Vb2c1 - VDC_T) * VtINV)
|
||||||
|
|
||||||
|
|
@ -164,22 +204,22 @@ begin // Currents and sharges
|
||||||
Ib1_s = XIBI * Ibf0 * (eVb1e1 - 1.0);
|
Ib1_s = XIBI * Ibf0 * (eVb1e1 - 1.0);
|
||||||
`expLin(tmpExp,Vb2e1 * VtINV / MLF)
|
`expLin(tmpExp,Vb2e1 * VtINV / MLF)
|
||||||
Ib2 = IBF_TM * (tmpExp - 1.0) + GMIN * Vb2e1;
|
Ib2 = IBF_TM * (tmpExp - 1.0) + GMIN * Vb2e1;
|
||||||
`expLin(tmpExp,0.5 * Vb1c1 * VtINV)
|
`expLin(tmpExp,0.5 * Vb1c4 * VtINV)
|
||||||
Ib3 = IBR_TM * (eVb1c1 - 1.0) /
|
Ib3 = IBR_TM * (eVb1c4 - 1.0) /
|
||||||
(tmpExp + exp(0.5 * VLR * VtINV)) +
|
(tmpExp + exp(0.5 * VLR * VtINV)) +
|
||||||
GMIN * Vb1c1;
|
GMIN * Vb1c4;
|
||||||
|
|
||||||
// Iex, Isub (XIex, XIsub)
|
// Iex, Isub (XIex, XIsub)
|
||||||
|
|
||||||
g1 = If0 * eVb1c1;
|
g1 = If0 * eVb1c4;
|
||||||
g2 = 4.0 * eVb1c1VDC;
|
g2 = 4.0 * eVb1c4VDC;
|
||||||
nBex = g1 / (1.0 + sqrt(1.0 + g1));
|
nBex = g1 / (1.0 + sqrt(1.0 + g1));
|
||||||
pWex = g2 / (1.0 + sqrt(1.0 + g2));
|
pWex = g2 / (1.0 + sqrt(1.0 + g2));
|
||||||
Iex = (1.0 / BRI_T) * (0.5 * IK_TM * nBex - IS_TM);
|
Iex = (1.0 / BRI_T) * (0.5 * IK_TM * nBex - IS_TM);
|
||||||
|
|
||||||
`ifdef SUBSTRATE
|
`ifdef SUBSTRATE
|
||||||
Isub = 2.0 * ISS_TM * (eVb1c1 - 1.0) /
|
Isub = 2.0 * ISS_TM * (eVb1c4 - 1.0) /
|
||||||
(1.0 + sqrt(1.0 + 4.0 * (IS_TM / IKS_TM) * eVb1c1));
|
(1.0 + sqrt(1.0 + 4.0 * (IS_TM / IKS_TM) * eVb1c4));
|
||||||
Isf = ISS_TM * (eVsc1 - 1.0);
|
Isf = ISS_TM * (eVsc1 - 1.0);
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
|
|
@ -189,7 +229,8 @@ begin // Currents and sharges
|
||||||
XIsub = 0.0;
|
XIsub = 0.0;
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
if (EXMOD == 1) begin
|
if (EXMOD == 1)
|
||||||
|
begin
|
||||||
|
|
||||||
Iex = Iex * Xext1;
|
Iex = Iex * Xext1;
|
||||||
|
|
||||||
|
|
@ -197,32 +238,36 @@ begin // Currents and sharges
|
||||||
Isub = Isub * Xext1;
|
Isub = Isub * Xext1;
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
Xg1 = If0 * eVbc1;
|
Xg1 = If0 * eVbc3;
|
||||||
XnBex = Xg1 / (1.0 + sqrt(1.0 + Xg1));
|
XnBex = Xg1 / (1.0 + sqrt(1.0 + Xg1));
|
||||||
XIMex = XEXT * (0.5 * IK_TM * XnBex - IS_TM) / BRI_T;
|
XIMex = XEXT * (0.5 * IK_TM * XnBex - IS_TM) / BRI_T;
|
||||||
|
|
||||||
`ifdef SUBSTRATE
|
`ifdef SUBSTRATE
|
||||||
XIMsub = XEXT * 2.0 * ISS_TM * (eVbc1 - 1.0) /
|
XIMsub = XEXT * 2.0 * ISS_TM * (eVbc3 - 1.0) /
|
||||||
(1.0 + sqrt(1.0 + 4.0 * IS_T / IKS_T * eVbc1));
|
(1.0 + sqrt(1.0 + 4.0 * IS_T / IKS_T * eVbc3));
|
||||||
Vex_bias = XEXT * (IS_TM / BRI_T + ISS_TM) * RCC_TM;
|
Vex_bias = XEXT * (IS_TM / BRI_T + ISS_TM) * RCCxx_TM;
|
||||||
`else
|
`else
|
||||||
XIMsub = 0.0;
|
XIMsub = 0.0;
|
||||||
Vex_bias = XEXT * (IS_TM / BRI_T) * RCC_TM;
|
Vex_bias = XEXT * (IS_TM / BRI_T) * RCCxx_TM;
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
Vex = Vt * (2.0 - ln( Vex_bias * VtINV));
|
Vex = Vt * (2.0 - ln( Vex_bias * VtINV));
|
||||||
vdif = Vbc1 - Vex;
|
vdif = Vbc3 - Vex;
|
||||||
`max_hyp0(VBex, vdif, 0.11);
|
`max_hyp0(VBex, vdif, 0.11);
|
||||||
|
|
||||||
Fex = VBex /(Vex_bias + (XIMex + XIMsub) * RCC_TM + VBex);
|
Fex = VBex /(Vex_bias + (XIMex + XIMsub) * RCCxx_TM + VBex);
|
||||||
XIex = Fex * XIMex;
|
XIex = Fex * XIMex;
|
||||||
|
|
||||||
`ifdef SUBSTRATE
|
`ifdef SUBSTRATE
|
||||||
XIsub = Fex * XIMsub;
|
XIsub = Fex * XIMsub;
|
||||||
`endif
|
`endif
|
||||||
|
end
|
||||||
end
|
else
|
||||||
|
begin
|
||||||
|
Fex = 0;
|
||||||
|
XnBex = 0 ;
|
||||||
|
end
|
||||||
|
|
||||||
// Variable base resistance
|
// Variable base resistance
|
||||||
|
|
||||||
q0Q = 1.0 + Vte / VER_T + Vtc / VEF_T;
|
q0Q = 1.0 + Vte / VER_T + Vtc / VEF_T;
|
||||||
|
|
@ -277,30 +322,35 @@ begin // Currents and sharges
|
||||||
RE_TM / (RBC_TM + Rb2);
|
RE_TM / (RBC_TM + Rb2);
|
||||||
Iavl = Ic1c2 * Gem / (Gem +Gem / Gmax + 1.0);
|
Iavl = Ic1c2 * Gem / (Gem +Gem / Gmax + 1.0);
|
||||||
end
|
end
|
||||||
|
|
||||||
`ifdef SELFHEATING
|
|
||||||
// Power dissipation
|
|
||||||
|
|
||||||
if (eVb2c2star > 0.0)
|
if (eVb2c2star > 0.0)
|
||||||
Vb2c2star = Vt * ln(eVb2c2star);
|
Vb2c2star = Vt * ln(eVb2c2star);
|
||||||
else
|
else
|
||||||
Vb2c2star = Vb2c2;
|
Vb2c2star = Vb2c2;
|
||||||
|
|
||||||
|
`ifdef SELFHEATING
|
||||||
|
// Power dissipation
|
||||||
|
|
||||||
|
// RvdT 03-12-2007, modified power equation due to distribution collector resistance
|
||||||
|
|
||||||
power = In * (Vb2e1 - Vb2c2star) +
|
power = In * (Vb2e1 - Vb2c2star) +
|
||||||
Ic1c2 * (Vb2c2star - Vb2c1) -
|
Ic1c2 * (Vb2c2star - Vb2c1) -
|
||||||
Iavl * Vb2c2star +
|
Iavl * Vb2c2star +
|
||||||
Vee1 * Vee1 / RE_TM +
|
Vee1 * Vee1 / RE_TM +
|
||||||
Vcc1 * Vcc1 / RCC_TM +
|
Vcc3 * Vcc3 * GCCxx_TM +
|
||||||
Vbb1 * Vbb1 / RBC_TM +
|
Vc3c4 * Vc3c4 * GCCex_TM +
|
||||||
|
Vc4c1 * Vc4c1 * GCCin_TM +
|
||||||
|
Vbb1 * Vbb1 / RBC_TM +
|
||||||
Ib1b2 * Vb1b2 +
|
Ib1b2 * Vb1b2 +
|
||||||
(Ib1 + Ib2) * Vb2e1 +
|
(Ib1 + Ib2) * Vb2e1 +
|
||||||
Ib1_s * Vb1e1 +
|
Ib1_s * Vb1e1 +
|
||||||
`ifdef SUBSTRATE
|
`ifdef SUBSTRATE
|
||||||
(Iex + Isub + Ib3) * Vb1c1 +
|
(Iex + Ib3) * Vb1c4 + XIex * Vbc3 +
|
||||||
(XIex + XIsub) * Vbc1 -
|
Isub * (Vb1c4 - Vsc4) +
|
||||||
(XIsub + Isub - Isf) * Vsc1;
|
XIsub * (Vbc3 - Vsc3) +
|
||||||
|
Isf * Vsc1;
|
||||||
`else
|
`else
|
||||||
(Iex + Ib3) * Vb1c1 + XIex * Vbc1;
|
(Iex + Ib3) * Vb1c4 + XIex * Vbc3;
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
`endif
|
`endif
|
||||||
|
|
@ -320,16 +370,16 @@ begin // Currents and sharges
|
||||||
Qbc_qs = 0.5 * Qb0 * nB * q1Q;
|
Qbc_qs = 0.5 * Qb0 * nB * q1Q;
|
||||||
|
|
||||||
a_VDC = 0.1 * VDC_T;
|
a_VDC = 0.1 * VDC_T;
|
||||||
`min_logexp(Vjcex, Vb1c1, Vfc, a_VDC);
|
`min_logexp(Vjcex, Vb1c4, Vfc, a_VDC);
|
||||||
Vtexv = VDC_T / (1.0 - PC) * (1.0 - pow(1.0 - Vjcex / VDC_T, 1.0 - PC)) +
|
Vtexv = VDC_T / (1.0 - PC) * (1.0 - pow(1.0 - Vjcex / VDC_T, 1.0 - PC)) +
|
||||||
bjc * (Vb1c1 - Vjcex);
|
bjc * (Vb1c4 - Vjcex);
|
||||||
Qtex = CJC_TM * ((1.0 - XP_T) * Vtexv + XP_T * Vb1c1) *
|
Qtex = CJC_TM * ((1.0 - XP_T) * Vtexv + XP_T * Vb1c4) *
|
||||||
(1.0 - XCJC) * (1.0 - XEXT);
|
(1.0 - XCJC) * (1.0 - XEXT);
|
||||||
|
|
||||||
`min_logexp(XVjcex, Vbc1, Vfc, a_VDC);
|
`min_logexp(XVjcex, Vbc3, Vfc, a_VDC);
|
||||||
XVtexv = VDC_T / (1.0 - PC) * (1.0 - pow(1.0 - XVjcex / VDC_T, 1.0 - PC)) +
|
XVtexv = VDC_T / (1.0 - PC) * (1.0 - pow(1.0 - XVjcex / VDC_T, 1.0 - PC)) +
|
||||||
bjc * (Vbc1 - XVjcex);
|
bjc * (Vbc3 - XVjcex);
|
||||||
XQtex = CJC_TM * ((1.0 - XP_T) * XVtexv + XP_T * Vbc1) *
|
XQtex = CJC_TM * ((1.0 - XP_T) * XVtexv + XP_T * Vbc3) *
|
||||||
(1.0 - XCJC) * XEXT;
|
(1.0 - XCJC) * XEXT;
|
||||||
|
|
||||||
`ifdef SUBSTRATE
|
`ifdef SUBSTRATE
|
||||||
|
|
@ -353,7 +403,7 @@ begin // Currents and sharges
|
||||||
if (EXMOD == 1) begin
|
if (EXMOD == 1) begin
|
||||||
|
|
||||||
Qex = Qex * (1.0 - XEXT);
|
Qex = Qex * (1.0 - XEXT);
|
||||||
Xg2 = 4.0 * eVbc1VDC;
|
Xg2 = 4.0 * eVbc3VDC;
|
||||||
XpWex = Xg2 / (1.0 + sqrt(1.0 + Xg2));
|
XpWex = Xg2 / (1.0 + sqrt(1.0 + Xg2));
|
||||||
XQex = 0.5 * Fex * XEXT * TAUR_T *
|
XQex = 0.5 * Fex * XEXT * TAUR_T *
|
||||||
(Qb0 * XnBex + Qepi0 * XpWex) / (TAUB_T + TEPI_T);
|
(Qb0 * XnBex + Qepi0 * XpWex) / (TAUB_T + TEPI_T);
|
||||||
|
|
@ -397,8 +447,6 @@ begin // Currents and sharges
|
||||||
I(c2, e1) <+ TYPE * In;
|
I(c2, e1) <+ TYPE * In;
|
||||||
I(b1, e1) <+ TYPE * Ib1_s;
|
I(b1, e1) <+ TYPE * Ib1_s;
|
||||||
I(b2, e1) <+ TYPE * (Ib1 + Ib2);
|
I(b2, e1) <+ TYPE * (Ib1 + Ib2);
|
||||||
I(b1, c1) <+ TYPE * (Ib3 + Iex);
|
|
||||||
I(b, c1) <+ TYPE * XIex;
|
|
||||||
`ifdef SUBSTRATE
|
`ifdef SUBSTRATE
|
||||||
I(b1, s) <+ TYPE * Isub;
|
I(b1, s) <+ TYPE * Isub;
|
||||||
I(b, s) <+ TYPE * XIsub;
|
I(b, s) <+ TYPE * XIsub;
|
||||||
|
|
@ -407,9 +455,8 @@ begin // Currents and sharges
|
||||||
I(b1, b2) <+ TYPE * Ib1b2;
|
I(b1, b2) <+ TYPE * Ib1b2;
|
||||||
I(b2, c2) <+ TYPE * (-1.0 * Iavl);
|
I(b2, c2) <+ TYPE * (-1.0 * Iavl);
|
||||||
I(e, e1) <+ TYPE * Vee1 / RE_TM;
|
I(e, e1) <+ TYPE * Vee1 / RE_TM;
|
||||||
I(b, b1) <+ TYPE * Vbb1 / RBC_TM;
|
I(b, b1) <+ TYPE * Vbb1 / RBC_TM;
|
||||||
I(c, c1) <+ TYPE * Vcc1 / RCC_TM;
|
|
||||||
|
|
||||||
`ifdef SELFHEATING
|
`ifdef SELFHEATING
|
||||||
// Electrical equivalent for the thermal network
|
// Electrical equivalent for the thermal network
|
||||||
I(dt) <+ V(dt) / RTH_Tamb_M;
|
I(dt) <+ V(dt) / RTH_Tamb_M;
|
||||||
|
|
@ -428,8 +475,6 @@ begin // Currents and sharges
|
||||||
I(b2, e1) <+ ddt(TYPE * (Qte + Qbe + Qe));
|
I(b2, e1) <+ ddt(TYPE * (Qte + Qbe + Qe));
|
||||||
I(b1, e1) <+ ddt(TYPE * (Qte_s));
|
I(b1, e1) <+ ddt(TYPE * (Qte_s));
|
||||||
I(b2, c2) <+ ddt(TYPE * (Qtc + Qbc + Qepi));
|
I(b2, c2) <+ ddt(TYPE * (Qtc + Qbc + Qepi));
|
||||||
I(b1, c1) <+ ddt(TYPE * (Qtex + Qex));
|
|
||||||
I(b, c1) <+ ddt(TYPE * (XQtex + XQex));
|
|
||||||
`ifdef SUBSTRATE
|
`ifdef SUBSTRATE
|
||||||
I(s, c1) <+ ddt(TYPE * Qts);
|
I(s, c1) <+ ddt(TYPE * Qts);
|
||||||
`endif
|
`endif
|
||||||
|
|
@ -438,6 +483,57 @@ begin // Currents and sharges
|
||||||
I(b, c) <+ ddt(TYPE * CBCO_M * Vbc);
|
I(b, c) <+ ddt(TYPE * CBCO_M * Vbc);
|
||||||
|
|
||||||
end // Currents and charges
|
end // Currents and charges
|
||||||
|
|
||||||
|
|
||||||
|
/* RvdT, Delft Univ. Tech. 03-12-2007.
|
||||||
|
Distribution of parasitic collector resistance.
|
||||||
|
This construct supports the case
|
||||||
|
RCBLI = 0.0 and or RCBLX = 0.0 .
|
||||||
|
It is up to the compiler to adjust the circuit topology
|
||||||
|
and perform a node-collapse in such cases. */
|
||||||
|
if (RCBLX > 0.0)
|
||||||
|
begin
|
||||||
|
I(b, c3) <+ TYPE * XIex;
|
||||||
|
I(c, c3) <+ TYPE * Vcc3 * GCCxx_TM ;
|
||||||
|
I(b, c3) <+ ddt(TYPE * (XQtex + XQex));
|
||||||
|
if (RCBLI > 0.0)
|
||||||
|
begin
|
||||||
|
I(c4, c1) <+ TYPE * Vc4c1 * GCCin_TM;
|
||||||
|
I(b1, c4) <+ TYPE * (Ib3 + Iex);
|
||||||
|
I(c3, c4) <+ TYPE * Vc3c4 * GCCex_TM ;
|
||||||
|
I(b1, c4) <+ ddt(TYPE * (Qtex + Qex));
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
V(c4, c1) <+ 0.0 ;
|
||||||
|
I(b1, c1) <+ TYPE * (Ib3 + Iex);
|
||||||
|
I(b1, c1) <+ ddt(TYPE * (Qtex + Qex));
|
||||||
|
I(c3, c1) <+ TYPE * Vc3c4 * GCCex_TM ;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
V(c3, c4) <+ 0 ;
|
||||||
|
if (RCBLI > 0.0)
|
||||||
|
begin
|
||||||
|
I(b, c4) <+ TYPE * XIex;
|
||||||
|
I(c, c4) <+ TYPE * Vcc3 * GCCxx_TM ;
|
||||||
|
I(c4, c1) <+ TYPE * Vc4c1 * GCCin_TM;
|
||||||
|
I(b1, c4) <+ TYPE * (Ib3 + Iex);
|
||||||
|
I(b1, c4) <+ ddt(TYPE * (Qtex + Qex));
|
||||||
|
I(b, c4) <+ ddt(TYPE * (XQtex + XQex));
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
I(b, c1) <+ TYPE * XIex;
|
||||||
|
I(c, c1) <+ TYPE * Vcc3 * GCCxx_TM ;
|
||||||
|
V(c4, c1) <+ 0.0 ;
|
||||||
|
I(b1, c1) <+ TYPE * (Ib3 + Iex);
|
||||||
|
I(b1, c1) <+ ddt(TYPE * (Qtex + Qex));
|
||||||
|
I(b, c1) <+ ddt(TYPE * (XQtex + XQex));
|
||||||
|
I(c3, c1) <+ TYPE * Vc3c4 * GCCex_TM ;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
// Noise sources
|
// Noise sources
|
||||||
|
|
||||||
|
|
@ -447,7 +543,10 @@ begin // Currents and sharges
|
||||||
common = 4.0 * `KB * Tk;
|
common = 4.0 * `KB * Tk;
|
||||||
powerREC = common / RE_TM; // Emitter resistance
|
powerREC = common / RE_TM; // Emitter resistance
|
||||||
powerRBC = common / RBC_TM; // Base resistance
|
powerRBC = common / RBC_TM; // Base resistance
|
||||||
powerRCC = common / RCC_TM; // Collector resistance
|
// RvdT, 03-12-2007: distributed collector resistance
|
||||||
|
powerRCCxx = common * GCCxx_TM; // Collector resistance
|
||||||
|
powerRCCex = common * GCCex_TM; // Collector resistance
|
||||||
|
powerRCCin = common * GCCin_TM; // Collector resistance
|
||||||
powerRBV = common / Rb2 * (4.0 * eVb1b2 + 5.0) / 3.0; // Variable base resistance
|
powerRBV = common / Rb2 * (4.0 * eVb1b2 + 5.0) / 3.0; // Variable base resistance
|
||||||
|
|
||||||
// Collector current shot noise
|
// Collector current shot noise
|
||||||
|
|
@ -486,15 +585,17 @@ begin // Currents and sharges
|
||||||
powerSubsCS_BS = 2.0 * `QQ * abs(XIsub);
|
powerSubsCS_BS = 2.0 * `QQ * abs(XIsub);
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
|
|
||||||
// Noise due to the avalanche
|
// Noise due to the avalanche
|
||||||
twoqIavl = KAVL * 2.0 * `QQ * Iavl;
|
// twoqIavl = KAVL * 2.0 * `QQ * Iavl;
|
||||||
|
twoqIavl = KAVL*Gem*powerCCS;
|
||||||
powerCCS_A = powerCCS + twoqIavl * (3.0 + 2.0 * Gem
|
powerCCS_A = powerCCS + twoqIavl * (3.0 + 2.0 * Gem
|
||||||
- (2.0 + 2.0 * Gem)*(2.0 + 2.0 * Gem)/(1.0 + 2.0 * Gem) );
|
- (2.0 + 2.0 * Gem)*(2.0 + 2.0 * Gem)/(1.0 + 2.0 * Gem) );
|
||||||
|
|
||||||
// Add noise sources
|
// Add noise sources
|
||||||
I(e, e1) <+ white_noise(powerREC); // "emitter resistance"
|
I(e, e1) <+ white_noise(powerREC); // "emitter resistance"
|
||||||
I(b, b1) <+ white_noise(powerRBC); // "base resistance"
|
I(b, b1) <+ white_noise(powerRBC); // "base resistance"
|
||||||
I(c, c1) <+ white_noise(powerRCC); // "collector resistance"
|
|
||||||
I(b1, b2) <+ white_noise(powerRBV); // "variable baseresistance"
|
I(b1, b2) <+ white_noise(powerRBV); // "variable baseresistance"
|
||||||
|
|
||||||
I(noi, e1) <+ white_noise(twoqIavl); // "avalanche"
|
I(noi, e1) <+ white_noise(twoqIavl); // "avalanche"
|
||||||
|
|
@ -515,5 +616,41 @@ begin // Currents and sharges
|
||||||
I(b1, s) <+ white_noise(powerSubsCS_B1S); // "bas_sub_current"
|
I(b1, s) <+ white_noise(powerSubsCS_B1S); // "bas_sub_current"
|
||||||
I(b, s) <+ white_noise(powerSubsCS_BS); // "bas_sub_current"
|
I(b, s) <+ white_noise(powerSubsCS_BS); // "bas_sub_current"
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
|
/* RvdT, Delft University of Technology 03-12-2007,
|
||||||
|
Noise voltage associated with distributed parasitic collector.
|
||||||
|
In case of vanishing resistance corresponding node
|
||||||
|
is not addressed: */
|
||||||
|
|
||||||
|
// RvdT, 31-01-2007: distributed collector resistance
|
||||||
|
|
||||||
|
if (RCBLX > 0.0)
|
||||||
|
begin
|
||||||
|
if (RCBLI > 0.0)
|
||||||
|
begin /* all branches exist */
|
||||||
|
I(c, c3) <+ white_noise(powerRCCxx); // "collector plug resistance"
|
||||||
|
I(c3, c4) <+ white_noise(powerRCCex); // "extrinsic collector BL resistance"
|
||||||
|
I(c4, c1) <+ white_noise(powerRCCin); // "intrinsic collector BL resistance"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin /* only Rcblx exists */
|
||||||
|
I(c, c3) <+ white_noise(powerRCCxx); // "collector plug resistance"
|
||||||
|
I(c3, c1) <+ white_noise(powerRCCex); // "extrinsic collector BL resistance"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
if (RCBLI > 0.0)
|
||||||
|
begin /* only Rcbli exists */
|
||||||
|
I(c, c4) <+ white_noise(powerRCCxx); // "collector plug resistance"
|
||||||
|
I(c4, c1) <+ white_noise(powerRCCin); // "intrinsic collector BL resistance"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin /* neither Rcblx nor Rcbli exists */
|
||||||
|
I(c, c1) <+ white_noise(powerRCCxx); // "collector plug resistance"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
end // Noise sources
|
end // Noise sources
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,18 @@
|
||||||
`define AJC 2.0
|
`define AJC 2.0
|
||||||
`define AJS 2.0
|
`define AJS 2.0
|
||||||
`define VEXLIM 200.0
|
`define VEXLIM 200.0
|
||||||
|
`define PI 3.1415926
|
||||||
|
|
||||||
|
// Desriptions and units
|
||||||
|
`ifdef __VAMS_COMPACT_MODELING__
|
||||||
|
`define OPP(nam,uni,des) (* desc="des", units="uni" *) real nam;
|
||||||
|
`define PAR(des,uni) (* desc="des", units="uni" *) parameter real
|
||||||
|
`define PAI(des,uni) (* desc="des", units="uni" *) parameter integer
|
||||||
|
`else
|
||||||
|
`define OPP(nam,uni,des)
|
||||||
|
`define PAR(des,uni) parameter real
|
||||||
|
`define PAI(des,uni) parameter integer
|
||||||
|
`endif
|
||||||
|
|
||||||
// ADMS specific definitions
|
// ADMS specific definitions
|
||||||
`ifdef insideADMS
|
`ifdef insideADMS
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
`include "frontdef.inc"
|
`include "frontdef.inc"
|
||||||
|
`define SELFHEATING
|
||||||
`define SUBSTRATE
|
`define SUBSTRATE
|
||||||
|
|
||||||
module bjt504_va (c, b, e, s);
|
module bjt504_va (c, b, e, s, dt);
|
||||||
|
|
||||||
`ifdef insideADMS
|
`ifdef insideADMS
|
||||||
`define P(p) (*p*)
|
`define P(p) (*p*)
|
||||||
`else
|
`else
|
||||||
|
|
@ -10,12 +11,13 @@ module bjt504_va (c, b, e, s);
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
// External ports
|
// External ports
|
||||||
inout c, b, e, s;
|
inout c, b, e, s, dt;
|
||||||
|
|
||||||
electrical c `P(info="external collector node");
|
electrical c `P(info="external collector node");
|
||||||
electrical b `P(info="external base node");
|
electrical b `P(info="external base node");
|
||||||
electrical e `P(info="external emitter node");
|
electrical e `P(info="external emitter node");
|
||||||
electrical s `P(info="external substrate node");
|
electrical s `P(info="external substrate node");
|
||||||
|
electrical dt `P(info="external thermal node");
|
||||||
|
|
||||||
// Internal nodes
|
// Internal nodes
|
||||||
electrical c1 `P(info="internal collector node 1");
|
electrical c1 `P(info="internal collector node 1");
|
||||||
|
|
@ -23,26 +25,30 @@ module bjt504_va (c, b, e, s);
|
||||||
electrical b1 `P(info="internal base node 1");
|
electrical b1 `P(info="internal base node 1");
|
||||||
electrical b2 `P(info="internal base node 2");
|
electrical b2 `P(info="internal base node 2");
|
||||||
electrical c2 `P(info="internal collector node 2");
|
electrical c2 `P(info="internal collector node 2");
|
||||||
|
electrical c3 `P(info="internal collector node 3");
|
||||||
|
electrical c4 `P(info="internal collector node 4");
|
||||||
// For correlated noise implementation
|
// For correlated noise implementation
|
||||||
electrical noi `P(info="internal noise node");
|
electrical noi `P(info="internal noise node");
|
||||||
|
|
||||||
`include "parameters.inc"
|
`include "parameters.inc"
|
||||||
`include "variables.inc"
|
`include "variables.inc"
|
||||||
|
`include "opvars.inc"
|
||||||
|
|
||||||
analog begin
|
analog begin
|
||||||
|
|
||||||
`ifdef insideADMS
|
//`ifdef insideADMS
|
||||||
@(initial_model) begin
|
// @(initial_model) begin
|
||||||
`else
|
//`else
|
||||||
@(initial_step or initial_step("static")) begin
|
// @(initial_step or initial_step("static")) begin
|
||||||
`endif
|
//`endif
|
||||||
|
|
||||||
`include "initialize.inc"
|
`include "initialize.inc"
|
||||||
`include "tscaling.inc"
|
`include "tscaling.inc"
|
||||||
|
|
||||||
end // initial_step
|
// end // initial_step
|
||||||
|
|
||||||
`include "evaluate.inc"
|
`include "evaluate.inc"
|
||||||
|
`include "opinfo.inc"
|
||||||
|
|
||||||
end // analog
|
end // analog
|
||||||
endmodule
|
endmodule
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ parameter integer LEVEL = 504 from [504:505)
|
||||||
parameter real TREF = 25.0 from [-273.0:inf)
|
parameter real TREF = 25.0 from [-273.0:inf)
|
||||||
`ATTR(info="Reference temperature");
|
`ATTR(info="Reference temperature");
|
||||||
parameter real DTA = 0.0
|
parameter real DTA = 0.0
|
||||||
`ATTR(info="Difference between the local and global ambient temperatures");
|
`ATTR(info="Difference between the local and global ambient temperatures");
|
||||||
parameter integer EXMOD = 1 from [0:1]
|
parameter integer EXMOD = 1 from [0:1]
|
||||||
`ATTR(info="Flag for extended modeling of the reverse current gain");
|
`ATTR(info="Flag for extended modeling of the reverse current gain");
|
||||||
parameter integer EXPHI = 1 from [0:1]
|
parameter integer EXPHI = 1 from [0:1]
|
||||||
|
|
@ -44,18 +44,20 @@ parameter real VAVL = 3.0 from [0.01:inf)
|
||||||
`ATTR(info="Voltage determining curvature of avalanche current");
|
`ATTR(info="Voltage determining curvature of avalanche current");
|
||||||
parameter real SFH = 0.3 from [0.0:inf)
|
parameter real SFH = 0.3 from [0.0:inf)
|
||||||
`ATTR(info="Current spreading factor of avalanche model when EXAVL=1");
|
`ATTR(info="Current spreading factor of avalanche model when EXAVL=1");
|
||||||
|
// RvdT, 22-02-2008: for MXT 504.7
|
||||||
parameter real RE = 5.0 from [1.0u:inf)
|
// increased lower clipping values RE, RBC, RBV, RCC, RCV, SCRCV
|
||||||
|
// from 1u to 1m:
|
||||||
|
parameter real RE = 5.0 from [1.0m:inf)
|
||||||
`ATTR(info="Emitter resistance");
|
`ATTR(info="Emitter resistance");
|
||||||
parameter real RBC = 23.0 from [1.0u:inf)
|
parameter real RBC = 23.0 from [1.0m:inf)
|
||||||
`ATTR(info="Constant part of the base resistance");
|
`ATTR(info="Constant part of the base resistance");
|
||||||
parameter real RBV = 18.0 from [1.0u:inf)
|
parameter real RBV = 18.0 from [1.0m:inf)
|
||||||
`ATTR(info="Zero-bias value of the variable part of the base resistance");
|
`ATTR(info="Zero-bias value of the variable part of the base resistance");
|
||||||
parameter real RCC = 12.0 from [1.0u:inf)
|
parameter real RCC = 12.0 from [1.0m:inf)
|
||||||
`ATTR(info="Constant part of the collector resistance");
|
`ATTR(info="Constant part of the collector resistance");
|
||||||
parameter real RCV = 150.0 from [1.0u:inf)
|
parameter real RCV = 150.0 from [1.0m:inf)
|
||||||
`ATTR(info="Resistance of the un-modulated epilayer");
|
`ATTR(info="Resistance of the un-modulated epilayer");
|
||||||
parameter real SCRCV = 1250.0 from [1.0u:inf)
|
parameter real SCRCV = 1250.0 from [1.0m:inf)
|
||||||
`ATTR(info="Space charge resistance of the epilayer");
|
`ATTR(info="Space charge resistance of the epilayer");
|
||||||
parameter real IHC = 4.0m from [1.0p:inf)
|
parameter real IHC = 4.0m from [1.0p:inf)
|
||||||
`ATTR(info="Critical current for velocity saturation in the epilayer");
|
`ATTR(info="Critical current for velocity saturation in the epilayer");
|
||||||
|
|
@ -85,6 +87,12 @@ parameter real MC = 0.5 from [0.0:1.0)
|
||||||
`ATTR(info="Coefficient for current modulation of CB depletion capacitance");
|
`ATTR(info="Coefficient for current modulation of CB depletion capacitance");
|
||||||
parameter real XCJC = 32.0m from [0.0:1.0]
|
parameter real XCJC = 32.0m from [0.0:1.0]
|
||||||
`ATTR(info="Fraction of CB depletion capacitance under the emitter");
|
`ATTR(info="Fraction of CB depletion capacitance under the emitter");
|
||||||
|
// RvdT, 30-11-2007: introduced RCBLX and RCBLI:
|
||||||
|
//dw clipped to 1m and default to 1 Ohm as long adms-ngspice has no working node-collapsing
|
||||||
|
parameter real RCBLX = 1.0 from [1.0m:inf)
|
||||||
|
`ATTR(info="Resistance Collector Buried Layer eXtrinsic");
|
||||||
|
parameter real RCBLI = 1.0 from [1.0m:inf)
|
||||||
|
`ATTR(info="Resistance Collector Buried Layer Intrinsic");
|
||||||
parameter real CBCO = 0.0 from [0.0:inf)
|
parameter real CBCO = 0.0 from [0.0:inf)
|
||||||
`ATTR(info="Collector-base overlap capacitance");
|
`ATTR(info="Collector-base overlap capacitance");
|
||||||
|
|
||||||
|
|
@ -94,7 +102,7 @@ parameter real TAUE = 2.0p from [0.0:inf)
|
||||||
`ATTR(info="Minimum transit time of stored emitter charge");
|
`ATTR(info="Minimum transit time of stored emitter charge");
|
||||||
parameter real TAUB = 4.2p from (0.0:inf)
|
parameter real TAUB = 4.2p from (0.0:inf)
|
||||||
`ATTR(info="Transit time of stored base sharge");
|
`ATTR(info="Transit time of stored base sharge");
|
||||||
parameter real TEPI = 41.0p from (0.0:inf)
|
parameter real TEPI = 41.0p from [0.0:inf)
|
||||||
`ATTR(info="Transit time of stored epilayer charge");
|
`ATTR(info="Transit time of stored epilayer charge");
|
||||||
parameter real TAUR = 520.0p from [0.0:inf)
|
parameter real TAUR = 520.0p from [0.0:inf)
|
||||||
`ATTR(info="Transit time of reverse extrinsic stored base charge");
|
`ATTR(info="Transit time of reverse extrinsic stored base charge");
|
||||||
|
|
@ -115,7 +123,10 @@ parameter real AEPI = 2.5
|
||||||
parameter real AEX = 0.62
|
parameter real AEX = 0.62
|
||||||
`ATTR(info="Temperature coefficient of the resistivity of the extrinsic base");
|
`ATTR(info="Temperature coefficient of the resistivity of the extrinsic base");
|
||||||
parameter real AC = 2.0
|
parameter real AC = 2.0
|
||||||
`ATTR(info="Temperature coefficient of the resistivity of the buried layer");
|
`ATTR(info="Temperature coefficient of the resistivity of the collector contact");
|
||||||
|
// RvdT, 30-01-2007: introduced ACBL
|
||||||
|
parameter real ACBL = 2.0 from [0.0:inf)
|
||||||
|
`ATTR(info="Temperature coefficient of the resistivity of the collector buried layer");
|
||||||
parameter real DVGBF = 50.0m
|
parameter real DVGBF = 50.0m
|
||||||
`ATTR(info="Band-gap voltage difference of the forward current gain");
|
`ATTR(info="Band-gap voltage difference of the forward current gain");
|
||||||
parameter real DVGBR = 45.0m
|
parameter real DVGBR = 45.0m
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,12 @@
|
||||||
RE_T = RE * pow(tN, AE);
|
RE_T = RE * pow(tN, AE);
|
||||||
RBV_T = RBV * pow(tN, AB - AQBO);
|
RBV_T = RBV * pow(tN, AB - AQBO);
|
||||||
RBC_T = RBC * pow(tN, AEX);
|
RBC_T = RBC * pow(tN, AEX);
|
||||||
RCC_T = RCC * pow(tN, AC);
|
|
||||||
|
// RvdT, 30-11-2007: new collector resistances RCCxx_T, RCCex_T, RCCin_T
|
||||||
|
RCCxx_T = RCC * pow(tN, AC);
|
||||||
|
RCCex_T = RCBLX * pow(tN, ACBL);
|
||||||
|
RCCin_T = RCBLI * pow(tN, ACBL);
|
||||||
|
|
||||||
RCV_T = RCV * pow(tN, AEPI);
|
RCV_T = RCV * pow(tN, AEPI);
|
||||||
|
|
||||||
// Current gains
|
// Current gains
|
||||||
|
|
@ -80,7 +85,7 @@
|
||||||
|
|
||||||
`ifdef SUBSTRATE
|
`ifdef SUBSTRATE
|
||||||
ISS_T = ISS * pow(tN, 4.0 - AS) * exp(-VGS * VdtINV);
|
ISS_T = ISS * pow(tN, 4.0 - AS) * exp(-VGS * VdtINV);
|
||||||
if (ISS_T > 0.0)
|
if ((ISS_T > 0.0))
|
||||||
IKS_T = IKS * pow(tN, 1.0 - AS) * (IS_T / IS) * (ISS / ISS_T);
|
IKS_T = IKS * pow(tN, 1.0 - AS) * (IS_T / IS) * (ISS / ISS_T);
|
||||||
else
|
else
|
||||||
IKS_T = IKS * pow(tN, 1.0 - AS);
|
IKS_T = IKS * pow(tN, 1.0 - AS);
|
||||||
|
|
@ -95,9 +100,17 @@
|
||||||
|
|
||||||
// Avalanche constant
|
// Avalanche constant
|
||||||
|
|
||||||
Tk300 = Tk - 300.0;
|
Tk300 = Tk - 300.0;
|
||||||
BnT = Bn * (1.0 + 7.2e-4 * Tk300 - 1.6e-6 * Tk300 * Tk300);
|
// RvdT, 15-02-2008: prevent division by zero and overflow at high temperatures:
|
||||||
|
if (Tk < 525.0)
|
||||||
|
begin
|
||||||
|
BnT = Bn * (1.0 + 7.2e-4 * Tk300 - 1.6e-6 * Tk300 * Tk300) ;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
BnT = Bn * 1.081 ;
|
||||||
|
end
|
||||||
|
|
||||||
// Heterojunction features
|
// Heterojunction features
|
||||||
|
|
||||||
DEG_T = DEG * pow(tN, AQBO);
|
DEG_T = DEG * pow(tN, AQBO);
|
||||||
|
|
@ -129,11 +142,41 @@
|
||||||
RE_TM = RE_T * invMULT;
|
RE_TM = RE_T * invMULT;
|
||||||
RBC_TM = RBC_T * invMULT;
|
RBC_TM = RBC_T * invMULT;
|
||||||
RBV_TM = RBV_T * invMULT;
|
RBV_TM = RBV_T * invMULT;
|
||||||
RCC_TM = RCC_T * invMULT;
|
// RvdT, 30-01-2007: new collector resistances:
|
||||||
|
RCCxx_TM = RCCxx_T * invMULT;
|
||||||
|
RCCex_TM = RCCex_T * invMULT;
|
||||||
|
RCCin_TM = RCCin_T * invMULT;
|
||||||
RCV_TM = RCV_T * invMULT;
|
RCV_TM = RCV_T * invMULT;
|
||||||
|
|
||||||
|
|
||||||
|
// RvdT, 03-12-2007: new collector conductances
|
||||||
|
if (RCC > 0.0)
|
||||||
|
begin
|
||||||
|
GCCxx_TM = 1.0 / RCCxx_TM ;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
GCCxx_TM = 0 ;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (RCBLX > 0.0)
|
||||||
|
begin
|
||||||
|
GCCex_TM = 1.0 / RCCex_TM ;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
GCCex_TM = 0 ;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (RCBLI > 0.0)
|
||||||
|
begin
|
||||||
|
GCCin_TM = 1.0 / RCCin_TM ;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
GCCin_TM = 0 ;
|
||||||
|
end
|
||||||
|
|
||||||
`ifdef SELFHEATING
|
`ifdef SELFHEATING
|
||||||
RTH_Tamb_M = RTH_Tamb * invMULT;
|
RTH_Tamb_M = RTH_Tamb * invMULT;
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,10 @@ real UdeT, VDE_T, UdcT, VDC_T;
|
||||||
real CJE_T, CJC_T, XP_T;
|
real CJE_T, CJC_T, XP_T;
|
||||||
real CJCscale, CJCscaleINV;
|
real CJCscale, CJCscaleINV;
|
||||||
|
|
||||||
real RE_T, RBV_T, RBC_T, RCC_T, RCV_T;
|
real RE_T, RBV_T, RBC_T, RCV_T;
|
||||||
|
// RvdT: 30-01-2007, new collector resistances:
|
||||||
|
real RCCxx_T, RCCex_T, RCCin_T;
|
||||||
|
|
||||||
real BF_T, BRI_T;
|
real BF_T, BRI_T;
|
||||||
|
|
||||||
real IS_T, IK_T, IBF_T, IBR_T, VEF_T, VER_T;
|
real IS_T, IK_T, IBF_T, IBR_T, VEF_T, VER_T;
|
||||||
|
|
@ -36,7 +39,13 @@ real invMULT;
|
||||||
real IS_TM, IK_TM, IBF_TM, IBR_TM, IHC_M;
|
real IS_TM, IK_TM, IBF_TM, IBR_TM, IHC_M;
|
||||||
real CJE_TM, CJC_TM;
|
real CJE_TM, CJC_TM;
|
||||||
|
|
||||||
real RE_TM, RBC_TM, RBV_TM, RCC_TM, RCV_TM, SCRCV_M;
|
real RE_TM, RBC_TM, RBV_TM, RCV_TM, SCRCV_M;
|
||||||
|
// RvdT: 30-01-2007, new collector resistances:
|
||||||
|
real RCCxx_TM, RCCex_TM, RCCin_TM;
|
||||||
|
// RvdT: 03-12-2007, new collector conductances:
|
||||||
|
real GCCxx_TM, GCCex_TM, GCCin_TM;
|
||||||
|
|
||||||
|
|
||||||
real KF_M, KFN_M;
|
real KF_M, KFN_M;
|
||||||
|
|
||||||
`ifdef SELFHEATING
|
`ifdef SELFHEATING
|
||||||
|
|
@ -53,7 +62,7 @@ real ISS_TM, IKS_TM, CJS_TM;
|
||||||
real K0, Kw, pW, Ec, Ic1c2;
|
real K0, Kw, pW, Ec, Ic1c2;
|
||||||
real Vqs_th, Vqs, Iqs;
|
real Vqs_th, Vqs, Iqs;
|
||||||
real alpha, vyi, yi, xi_w, xi_w1;
|
real alpha, vyi, yi, xi_w, xi_w1;
|
||||||
real gp0, gp02, p0star, eVb2c2star;
|
real gp0, gp02, p0star, Vb2c2star, eVb2c2star;
|
||||||
real B1, B2, Vxi0, Vch, Icap, pav;
|
real B1, B2, Vxi0, Vch, Icap, pav;
|
||||||
|
|
||||||
// Effective emitter and collector junction bias variables
|
// Effective emitter and collector junction bias variables
|
||||||
|
|
@ -92,7 +101,7 @@ real lambda, Gem, Gmax, Iavl;
|
||||||
real Icap_IHC;
|
real Icap_IHC;
|
||||||
|
|
||||||
`ifdef SELFHEATING
|
`ifdef SELFHEATING
|
||||||
real Vb2c2star, power;
|
real power;
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
// Charges and capacitances variables
|
// Charges and capacitances variables
|
||||||
|
|
@ -114,10 +123,16 @@ real CBEO_M, CBCO_M;
|
||||||
|
|
||||||
// Biases and exponential terms variables
|
// Biases and exponential terms variables
|
||||||
|
|
||||||
real Vb2c1, Vb2c2, Vb2e1, Vb1e1, Vb1b2, Vb1c1, Vc1c2;
|
real Vb2c1, Vb2c2, Vb2e1, Vb1e1, Vb1b2, Vb1c4, Vc1c2;
|
||||||
real Vsc1, Vee1, Vbb1, Vbc1, Vcc1, Vbe, Vbc;
|
// RvdT, 30-01-2007: new variables Vc3c4, Vc4c1
|
||||||
real eVb2c2, eVb2e1, eVb1e1, eVb1b2, eVb1c1, eVbc1, eVsc1;
|
real Vc3c4, Vc4c1;
|
||||||
real eVb1c1VDC, eVb2c2VDC, eVbc1VDC, eVb2c1VDC;
|
// RvdT, 25-02-2008: new variables Vsc3, Vsc4
|
||||||
|
`ifdef SUBSTRATE
|
||||||
|
real Vsc1, Vsc3, Vsc4;
|
||||||
|
`endif
|
||||||
|
real Vee1, Vbb1, Vbc3, Vcc3, Vbe, Vbc;
|
||||||
|
real eVb2c2, eVb2e1, eVb1e1, eVb1b2, eVb1c4, eVbc3, eVsc1;
|
||||||
|
real eVb1c4VDC, eVb2c2VDC, eVbc3VDC, eVb2c1VDC;
|
||||||
|
|
||||||
// Help variables
|
// Help variables
|
||||||
|
|
||||||
|
|
@ -138,7 +153,7 @@ real a_VDS;
|
||||||
// Noise variables
|
// Noise variables
|
||||||
|
|
||||||
real common;
|
real common;
|
||||||
real powerREC, powerRBC, powerRCC, powerRBV;
|
real powerREC, powerRBC, powerRCCxx, powerRCCex, powerRCCin, powerRBV;
|
||||||
real powerCCS;
|
real powerCCS;
|
||||||
real powerFBCS, powerFBC1fB1, exponentFBC1fB2, powerFBC1fB2;
|
real powerFBCS, powerFBC1fB1, exponentFBC1fB2, powerFBC1fB2;
|
||||||
real powerEBSCS, powerEBSC1f;
|
real powerEBSCS, powerEBSC1f;
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,8 @@ plot abs(i(vc))/abs(i(vb)) vs abs(-i(vc)) xlog xlimit 1e-09 10e-3 ylimit 0 150
|
||||||
+RE=949.668E-03
|
+RE=949.668E-03
|
||||||
+RBC=27.769E+00
|
+RBC=27.769E+00
|
||||||
+RBV=32.004E+00
|
+RBV=32.004E+00
|
||||||
|
+RCBLX=1.0
|
||||||
|
+RCBLI=1.0
|
||||||
+RCC=18.026E+00
|
+RCC=18.026E+00
|
||||||
+RCV=237.417E+00
|
+RCV=237.417E+00
|
||||||
+SCRCV=882.839E+00
|
+SCRCV=882.839E+00
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,8 @@ plot abs(i(vc))
|
||||||
+RE=949.668E-03
|
+RE=949.668E-03
|
||||||
+RBC=27.769E+00
|
+RBC=27.769E+00
|
||||||
+RBV=32.004E+00
|
+RBV=32.004E+00
|
||||||
|
+RCBLX=1.0
|
||||||
|
+RCBLI=1.0
|
||||||
+RCC=18.026E+00
|
+RCC=18.026E+00
|
||||||
+RCV=237.417E+00
|
+RCV=237.417E+00
|
||||||
+SCRCV=882.839E+00
|
+SCRCV=882.839E+00
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue