*.va, use $simparam("gmin") instead of the _circuit_gmin workaround

This commit is contained in:
rlar 2017-05-25 19:56:34 +02:00
parent a84592745b
commit 9decf5bd60
5 changed files with 20 additions and 28 deletions

View File

@ -1857,8 +1857,6 @@ real AIGS_i, BIGS_i, CIGS_i, AIGD_i, BIGD_i, CIGD_i, POXEDGE_i, PIGCD_i;
real DLCIG_i, DLCIGD_i, NTOX_i; real DLCIG_i, DLCIGD_i, NTOX_i;
real IGT_i; real IGT_i;
real _circuit_gmin;
//stress effect //stress effect
real W_tmp_stress, tmp1_stress, kstress_u0, tmp1_stress_vth, kstress_vth0, ku0_temp; real W_tmp_stress, tmp1_stress, kstress_u0, tmp1_stress_vth, kstress_vth0, ku0_temp;
real Inv_sa, Inv_sb, Inv_saref, Inv_sbref, Inv_odref, rho_ref, Inv_od,rho; real Inv_sa, Inv_sb, Inv_saref, Inv_sbref, Inv_odref, rho_ref, Inv_od,rho;
@ -4472,14 +4470,14 @@ end
// Diode Current and Capacitance // Diode Current and Capacitance
`ifdef __RBODYMOD__ `ifdef __RBODYMOD__
if(RBODYMOD != 0) begin if(RBODYMOD != 0) begin
I(sbulk, `IntrinsicSource) <+ devsign * Ibs + _circuit_gmin*Vbs_jct; I(sbulk, `IntrinsicSource) <+ devsign * Ibs + $simparam("gmin")*Vbs_jct;
I(dbulk, `IntrinsicDrain) <+ devsign * Ibd + _circuit_gmin*Vbd_jct; I(dbulk, `IntrinsicDrain) <+ devsign * Ibd + $simparam("gmin")*Vbd_jct;
I(sbulk, `IntrinsicSource) <+ devsign * ddt(Qbs); I(sbulk, `IntrinsicSource) <+ devsign * ddt(Qbs);
I(dbulk, `IntrinsicDrain) <+ devsign * ddt(Qbd); I(dbulk, `IntrinsicDrain) <+ devsign * ddt(Qbd);
end else begin end else begin
`endif `endif
I(`IntrinsicBody, `IntrinsicSource) <+ devsign * Ibs + _circuit_gmin*Vbs_jct; I(`IntrinsicBody, `IntrinsicSource) <+ devsign * Ibs + $simparam("gmin")*Vbs_jct;
I(`IntrinsicBody, `IntrinsicDrain) <+ devsign * Ibd + _circuit_gmin*Vbd_jct; I(`IntrinsicBody, `IntrinsicDrain) <+ devsign * Ibd + $simparam("gmin")*Vbd_jct;
I(`IntrinsicBody, `IntrinsicSource) <+ devsign * ddt(Qbs); I(`IntrinsicBody, `IntrinsicSource) <+ devsign * ddt(Qbs);
I(`IntrinsicBody, `IntrinsicDrain) <+ devsign * ddt(Qbd); I(`IntrinsicBody, `IntrinsicDrain) <+ devsign * ddt(Qbd);
`ifdef __RBODYMOD__ `ifdef __RBODYMOD__

View File

@ -353,8 +353,6 @@ module hic0_full (c,b,e,s,tnode);
// Declaration of the variables: begin // Declaration of the variables: begin
real _circuit_gmin;
real HICUMtype `P(spice:name="type" info="Device type from npn or pnp flags" unit="no" ask="yes"); real HICUMtype `P(spice:name="type" info="Device type from npn or pnp flags" unit="no" ask="yes");
// QCJMOD // QCJMOD
@ -779,33 +777,33 @@ analog begin
// //
// Define branch sources // Define branch sources
// //
I(br_biei) <+ _circuit_gmin*V(br_biei); I(br_biei) <+ $simparam("gmin")*V(br_biei);
I(br_bici) <+ _circuit_gmin*V(br_bici); I(br_bici) <+ $simparam("gmin")*V(br_bici);
I(br_bs) <+ HSI_Tsu; I(br_bs) <+ HSI_Tsu;
I(br_sci) <+ ijsc + _circuit_gmin*V(br_sci); //`P(spectre:gmin="add" spectre:pwl_passive="1e10"); I(br_sci) <+ ijsc + $simparam("gmin")*V(br_sci); //`P(spectre:gmin="add" spectre:pwl_passive="1e10");
I(br_sci) <+ ddt(qjs); I(br_sci) <+ ddt(qjs);
I(br_bci) <+ ddt(qjcx); I(br_bci) <+ ddt(qjcx);
I(br_bci) <+ ddt(Qbci); I(br_bci) <+ ddt(Qbci);
I(br_be) <+ ddt(Qbe); I(br_be) <+ ddt(Qbe);
if (re >= `MIN_R) begin if (re >= `MIN_R) begin
I(br_eie_i) <+ Veie/re_t + _circuit_gmin*V(br_eie_i);//`P(spectre:gmin="add"); I(br_eie_i) <+ Veie/re_t + $simparam("gmin")*V(br_eie_i);//`P(spectre:gmin="add");
end else begin end else begin
V(br_eie_v) <+ 0.0; V(br_eie_v) <+ 0.0;
end end
if (rcx >= `MIN_R) begin if (rcx >= `MIN_R) begin
I(br_cic_i) <+ Vcic/rcx_t + _circuit_gmin*V(br_cic_i);//`P(spectre:gmin="add"); I(br_cic_i) <+ Vcic/rcx_t + $simparam("gmin")*V(br_cic_i);//`P(spectre:gmin="add");
end else begin end else begin
V(br_cic_v) <+ 0.0; V(br_cic_v) <+ 0.0;
end end
if (rbi0 >= `MIN_R || rbx >= `MIN_R) begin if (rbi0 >= `MIN_R || rbx >= `MIN_R) begin
I(br_bbi_i) <+ Vbbi/rb + _circuit_gmin*V(br_bbi_i); //`P(spectre:gmin="add"); I(br_bbi_i) <+ Vbbi/rb + $simparam("gmin")*V(br_bbi_i); //`P(spectre:gmin="add");
end else begin end else begin
V(br_bbi_v) <+ 0.0; V(br_bbi_v) <+ 0.0;
end end
I(br_bici) <+ Ibici + _circuit_gmin*V(br_bici); //`P(spectre:gmin="add" spectre:pwl_sat_current="IMAX" spectre:pwl_sat_cond="imax/0.025" spectre:pwl_rev_current="imax" spectre:pwl_rev_cond="IMAX/0.025"); I(br_bici) <+ Ibici + $simparam("gmin")*V(br_bici); //`P(spectre:gmin="add" spectre:pwl_sat_current="IMAX" spectre:pwl_sat_cond="imax/0.025" spectre:pwl_rev_current="imax" spectre:pwl_rev_cond="IMAX/0.025");
I(br_bici) <+ ddt(Qbici); I(br_bici) <+ ddt(Qbici);
I(br_biei) <+ ijbe + _circuit_gmin*V(br_biei); //`P(spectre:gmin="add" spectre:pwl_fwd_current="IBEIS*exp(25.0)" spectre:pwl_fwd_node="bi" spectre:pwl_fwd_cond="IBEIS*exp(25.0)/0.025" spectre:pwl_sat_current="IMAX" spectre:pwl_sat_cond="IMAX/0.025" spectre:pwl_passive="1e10"); I(br_biei) <+ ijbe + $simparam("gmin")*V(br_biei); //`P(spectre:gmin="add" spectre:pwl_fwd_current="IBEIS*exp(25.0)" spectre:pwl_fwd_node="bi" spectre:pwl_fwd_cond="IBEIS*exp(25.0)/0.025" spectre:pwl_sat_current="IMAX" spectre:pwl_sat_cond="IMAX/0.025" spectre:pwl_passive="1e10");
I(br_biei) <+ ddt(Qbiei); I(br_biei) <+ ddt(Qbiei);
I(br_ciei) <+ it `P(spectre:pwl_fwd_current="IS*exp(25.0)" spectre:pwl_fwd_node="bi" spectre:pwl_fwd_cond="IS*exp(25.0)/0.025" spectre:pwl_rev_current="IMAX" spectre:pwl_rev_cond="IMAX/0.025" spectre:pwl_passive="1e10"); I(br_ciei) <+ it `P(spectre:pwl_fwd_current="IS*exp(25.0)" spectre:pwl_fwd_node="bi" spectre:pwl_fwd_cond="IS*exp(25.0)/0.025" spectre:pwl_rev_current="IMAX" spectre:pwl_rev_cond="IMAX/0.025" spectre:pwl_passive="1e10");
@ -814,7 +812,7 @@ analog begin
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 + _circuit_gmin*V(br_sht);//`P(spectre:gmin="add"); I(br_sht) <+ Vrth/rth-pterm + $simparam("gmin")*V(br_sht);//`P(spectre:gmin="add");
I(br_sht) <+ ddt(cth*Vrth); I(br_sht) <+ ddt(cth*Vrth);
end end
// ****************************************** // ******************************************

View File

@ -3,7 +3,7 @@
//dw 09/10: Modifications for ngspice and adms: //dw 09/10: Modifications for ngspice and adms:
// backup to ddx for capacitance calculation // backup to ddx for capacitance calculation
// all V(...) <+ 0.0; are replaced by I(...) < V(...)/`MIN_R; // all V(...) <+ 0.0; are replaced by I(...) < V(...)/`MIN_R;
// using GMIN from ngspice: _circuit_gmin // using GMIN from ngspice: $simparam("gmin")
// switch of section for correlated noise (see below) // switch of section for correlated noise (see below)
// removed obsolete variables S_avl, f_p // removed obsolete variables S_avl, f_p
// don't like internal variable declaration // don't like internal variable declaration
@ -709,8 +709,6 @@ parameter real dt = 0.0 `ATTR(info="Temperature
//Declaration of variables //Declaration of variables
real _circuit_gmin;
//Temperature and drift //Temperature and drift
real VT,Tdev,qtt0,ln_qtt0,r_VgVT,V_gT,dT,k; real VT,Tdev,qtt0,ln_qtt0,r_VgVT,V_gT,dT,k;
real ireis_t,ibeis_t,ibcxs_t,ibcis_t,iscs_t,cjci0_t; real ireis_t,ibeis_t,ibcxs_t,ibcis_t,iscs_t,cjci0_t;
@ -1499,8 +1497,8 @@ end //of Model_evaluation
begin : Load_sources begin : Load_sources
I(br_biei) <+ _circuit_gmin*V(br_biei); I(br_biei) <+ $simparam("gmin")*V(br_biei);
I(br_bici) <+ _circuit_gmin*V(br_bici); I(br_bici) <+ $simparam("gmin")*V(br_bici);
I(br_bci) <+ ddt(qjcx0_t_i); I(br_bci) <+ ddt(qjcx0_t_i);
I(br_bci) <+ ddt(cbcpar1*V(br_bci)); I(br_bci) <+ ddt(cbcpar1*V(br_bci));

View File

@ -86,7 +86,7 @@ Vsc3 = Vsc4 - Vc3c4 ;
pW = 2.0 * eVb2c1VDC / (1.0 + Kw); pW = 2.0 * eVb2c1VDC / (1.0 + Kw);
if (pW < `TEN_M40) pW = 0; if (pW < `TEN_M40) pW = 0;
Ec = Vt * (K0 - Kw - ln((K0 + 1.0) / (Kw + 1.0)) ); Ec = Vt * (K0 - Kw - ln((K0 + 1.0) / (Kw + 1.0)) );
Ic1c2 = (Ec + Vc1c2) / RCV_TM + _circuit_gmin * Vc1c2; Ic1c2 = (Ec + Vc1c2) / RCV_TM + $simparam("gmin") * Vc1c2;
if (Ic1c2 > 0.0) begin if (Ic1c2 > 0.0) begin
@ -206,11 +206,11 @@ Vsc3 = Vsc4 - Vc3c4 ;
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) + _circuit_gmin * Vb2e1; Ib2 = IBF_TM * (tmpExp - 1.0) + $simparam("gmin") * Vb2e1;
`expLin(tmpExp,0.5 * Vb1c4 * VtINV) `expLin(tmpExp,0.5 * Vb1c4 * VtINV)
Ib3 = IBR_TM * (eVb1c4 - 1.0) / Ib3 = IBR_TM * (eVb1c4 - 1.0) /
(tmpExp + exp(0.5 * VLR * VtINV)) + (tmpExp + exp(0.5 * VLR * VtINV)) +
_circuit_gmin * Vb1c4; $simparam("gmin") * Vb1c4;
// begin RvdT, November 2008, MXT504.8_alpha // begin RvdT, November 2008, MXT504.8_alpha
@ -317,7 +317,7 @@ if (ICSS < 0.0)
qBQ = q1Q * (1.0 + 0.5 * (n0 + nB)); qBQ = q1Q * (1.0 + 0.5 * (n0 + nB));
Rb2 = 3.0 * RBV_TM / qBQ; Rb2 = 3.0 * RBV_TM / qBQ;
Ib1b2 = (2.0 * Vt * (eVb1b2 - 1.0) + Vb1b2) / Rb2 + _circuit_gmin * Vb1b2; Ib1b2 = (2.0 * Vt * (eVb1b2 - 1.0) + Vb1b2) / Rb2 + $simparam("gmin") * Vb1b2;
// Weak-avalanche current // Weak-avalanche current

View File

@ -2,8 +2,6 @@
real _x, _x0, _a, _dxa; real _x, _x0, _a, _dxa;
real _circuit_gmin;
// Model constants // Model constants
real An, Bn; real An, Bn;