white spaces and format

This commit is contained in:
dwarning 2023-01-12 15:07:11 +01:00
parent ab6ff4a934
commit 51d732a7ba
10 changed files with 121 additions and 121 deletions

View File

@ -1,20 +1,20 @@
/*
EKV MOS model version 2.6 rev.15 with documentation at: http://ekv.epfl.ch
EKV MOS model version 2.6 rev.15 with documentation at: http://ekv.epfl.ch
Matthias Bucher, Christophe Lallement, Christian Enz, Fabien Theodoloz, Francois Krummenacher
Electronics Laboratories, Swiss Federal Institute of Technology Lausanne, Switzerland
This Verilog-A was developed by Wladek Grabinski with modifications
by Tiburon Design Automation (www.tiburon-da.com).
This software has been provided pursuant to a License Agreement containing restrictions on its use.
It may not be copied or distributed in any form or medium, disclosed to third parties,
reverse engineered or used in any manner not provided for in said License Agreement
reverse engineered or used in any manner not provided for in said License Agreement
except with the prior written authorization.
Licensed under the Educational Community License, Version 2.0 (the "License");
Licensed under the Educational Community License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at http://opensource.org/licenses/ECL-2.0
Unless required by applicable law or agreed to in writing, software distributed under
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
Unless required by applicable law or agreed to in writing, software distributed under
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific language governing permissions
and limitations under the License.
@ -102,68 +102,68 @@ $RCSfile: ekv.va,v $ $Revision: 2.6.15 $ $Date: 2020/05/29 11:50:10 $
// Electrical
// Current in amperes
nature Current
units = "A";
access = I;
idt_nature = Charge;
units = "A";
access = I;
idt_nature = Charge;
`ifdef CURRENT_ABSTOL
abstol = `CURRENT_ABSTOL;
abstol = `CURRENT_ABSTOL;
`else
abstol = 1e-12;
abstol = 1e-12;
`endif
endnature
// Charge in coulombs
nature Charge
units = "coul";
access = Q;
ddt_nature = Current;
units = "coul";
access = Q;
ddt_nature = Current;
`ifdef CHARGE_ABSTOL
abstol = `CHARGE_ABSTOL;
abstol = `CHARGE_ABSTOL;
`else
abstol = 1e-14;
abstol = 1e-14;
`endif
endnature
// Potential in volts
nature Voltage
units = "V";
access = V;
idt_nature = Flux;
units = "V";
access = V;
idt_nature = Flux;
`ifdef VOLTAGE_ABSTOL
abstol = `VOLTAGE_ABSTOL;
abstol = `VOLTAGE_ABSTOL;
`else
abstol = 1e-6;
abstol = 1e-6;
`endif
endnature
// Flux in Webers
nature Flux
units = "Wb";
access = Phi;
ddt_nature = Voltage;
units = "Wb";
access = Phi;
ddt_nature = Voltage;
`ifdef FLUX_ABSTOL
abstol = `FLUX_ABSTOL;
abstol = `FLUX_ABSTOL;
`else
abstol = 1e-9;
abstol = 1e-9;
`endif
endnature
// Conservative discipline
discipline electrical
potential Voltage;
flow Current;
potential Voltage;
flow Current;
enddiscipline
// Signal flow disciplines
discipline voltage
potential Voltage;
potential Voltage;
enddiscipline
discipline current
potential Current;
potential Current;
enddiscipline
//from constants.h we need
`define C_EPSSIL 1.03594314e-10
`define C_EPSOX 34.5e-12
`define C_QE 1.602e-19
`define C_K 1.3807e-23
`define P_K 1.3806226e-23
`define P_EPS0 8.85418792394420013968e-12
`define P_CELSIUS0 273.15
`define P_K 1.3806226e-23
`define P_EPS0 8.85418792394420013968e-12
`define P_CELSIUS0 273.15
`define POS_MIN 1.0E-6
`define SQRT2 1.4142135623730950488016887242097
`define ONE3RD 0.33333333333333333333333333333333
@ -271,7 +271,7 @@ module ekv_va(d,g,s,b);
real csb_d, cssw_d, csswg_d;
real csb_s, cssw_s, csswg_s;
real qjd, qjs;
// parameter definitions
parameter integer TYPE = 1 from [-1:1] exclude 0; // NMOS=1, PMOS=-1
parameter integer Noise = 1 from [0:1]; // Set to zero to prevent noise calculation
@ -399,10 +399,10 @@ module ekv_va(d,g,s,b);
*/
/* If Temp is explicitly specified, use that value
otherwise use Tckt+Trise */
if (TEMP == -`NOT_GIVEN) //AB: 040902 Temp -> TEMP
if (TEMP == -`NOT_GIVEN) //AB: 040902 Temp -> TEMP
T = $temperature + Trise;
else
T = TEMP + `P_CELSIUS0; //AB: 040902 Temp -> TEMP
T = TEMP + `P_CELSIUS0; //AB: 040902 Temp -> TEMP
if (TNOM == -`NOT_GIVEN)
Tnom = `DEFAULT_TNOM + `P_CELSIUS0;
else
@ -415,7 +415,7 @@ module ekv_va(d,g,s,b);
Vt_Vt = Vt * Vt;
Vt_Vt_2 = Vt_Vt + Vt_Vt;
Vt_Vt_16 = 16.0 * Vt_Vt;
Eg = 1.16 - 7.02e-4 * T * T / (T + 1108.0);
refEg = 1.16 - (7.02e-4*Tnom*Tnom) / (Tnom + 1108.0);
deltaT = T - Tnom;
@ -460,8 +460,8 @@ module ekv_va(d,g,s,b);
// VGprime:
if (V0 == 0.0)
deltaVFB = 0.0;
// else begin : VGprime //AB: 040902 VGPrime is also a variable and
else begin : VGprime_block //AB: 040902 VGPrime -> VGprime_block
// else begin : VGprime //AB: 040902 VGPrime is also a variable and
else begin : VGprime_block //AB: 040902 VGPrime -> VGprime_block
real sqv;
// mb 99/03/26 corrected for multiple device number
vL = 0.28 * (Leff/(LK*NS) - 0.1);
@ -824,8 +824,8 @@ module ekv_va(d,g,s,b);
I(sb) <+ TYPE * Isub;
end
I(gb) <+ TYPE * ddt(QG); // wg 22/04/08 corrected for device TYPE
// if (Noise) begin : Noise //AB: 040902 Noise is also a variable and
if (Noise) begin : Noise_block //AB: 040902 Noise -> Noise_block
// if (Noise) begin : Noise //AB: 040902 Noise is also a variable and
if (Noise) begin : Noise_block //AB: 040902 Noise -> Noise_block
real S_flicker, S_thermal;
S_thermal = 4 * `P_K * T * Gn;
S_flicker = KF * gm * gm / (Weff * NS * Leff * COX);
@ -835,7 +835,7 @@ module ekv_va(d,g,s,b);
///////////////////////////////////
//EXTRINSIC PART: JUNCTION DIODES//
///////////////////////////////////
//diode area and perimeter computation
//diode area and perimeter computation
if ((AS == 0.0) && (HDIF>0.0)) as_i = 2.0*HDIF*Weff;
else as_i = AS;
if ((PS == 0.0) && (HDIF>0.0)) ps_i = 4.0*HDIF+1.0*Weff;
@ -844,7 +844,7 @@ module ekv_va(d,g,s,b);
else ad_i = AD;
if ((PD == 0.0) && (HDIF>0.0)) pd_i = 4.0*HDIF+1.0*Weff;
else pd_i = PD;
//temperature update for diodes
//temperature update for diodes
temp_arg = exp((refEg/$vt(Tnom) - Eg/Vt + tp_xti*ln(ratioT))/xd_n);
js_t = xd_js*temp_arg;
jsw_t = xd_jsw*temp_arg;
@ -865,10 +865,10 @@ module ekv_va(d,g,s,b);
is_d = js_t*ad_i+jsw_t*pd_i+jswg_t*Weff;
arg_d = -v_di_b*ratioT/(Vt*xd_n);
if (arg_d < -40.0) arg_d = -40.0;
tmp0 = (-v_di_b+xd_bv)*ratioT/(Vt*xd_n);
if (tmp0>70) f_breakdown_d = 1.0;
else f_breakdown_d = 1.0 + xd_xjbv*exp(-tmp0);
// TRAP-ASSISTED TUNNELING CURRENT
tmp0 = (-v_di_b+xd_bv)*ratioT/(Vt*xd_n);
if (tmp0>70) f_breakdown_d = 1.0;
else f_breakdown_d = 1.0 + xd_xjbv*exp(-tmp0);
// TRAP-ASSISTED TUNNELING CURRENT
idb_tun = -Weff*jswg_t*(exp(v_di_b*ratioT/(Vt*njtsswg_t) * xd_vtsswg/max(xd_vtsswg+v_di_b,1.0e-3))-1.0);
idb_tun = idb_tun - pd_i*jsw_t*(exp(v_di_b*ratioT/(Vt*njtssw_t) * xd_vtssw/max(xd_vtssw+v_di_b,1.0e-3))-1.0);
idb_tun = idb_tun - ad_i*js_t*(exp(v_di_b*ratioT/(Vt*njts_t) * xd_vts/max(xd_vts+v_di_b,1.0e-3))-1.0);
@ -877,17 +877,17 @@ module ekv_va(d,g,s,b);
is_s = js_t*as_i+jsw_t*ps_i+jswg_t*Weff;
arg_s = -v_si_b*ratioT/(Vt*xd_n);
if (arg_s < -40.0) arg_s = -40.0;
tmp0 = (-v_si_b+xd_bv)*ratioT/(Vt*xd_n);
if (tmp0>70) f_breakdown_s = 1.0;
else f_breakdown_s = 1.0 + xd_xjbv*exp(-tmp0);
// TRAP-ASSISTED TUNNELING CURRENT
tmp0 = (-v_si_b+xd_bv)*ratioT/(Vt*xd_n);
if (tmp0>70) f_breakdown_s = 1.0;
else f_breakdown_s = 1.0 + xd_xjbv*exp(-tmp0);
// TRAP-ASSISTED TUNNELING CURRENT
isb_tun = -Weff*jswg_t*(exp(v_si_b*ratioT/(Vt*njtsswg_t) * xd_vtsswg/max(xd_vtsswg+v_si_b,1.0e-3))-1.0);
isb_tun = isb_tun - ps_i*jsw_t*(exp(v_si_b*ratioT/(Vt*njtssw_t) * xd_vtssw/max(xd_vtssw+v_si_b,1.0e-3))-1.0);
isb_tun = isb_tun - as_i*js_t*(exp(v_si_b*ratioT/(Vt*njts_t) * xd_vts/max(xd_vts+v_si_b,1.0e-3))-1.0);
I(s,b) <+ (is_s * (1.0 - exp(arg_s))*f_breakdown_s+v_si_b*xd_gmin + isb_tun)*TYPE*M;
//AC
//DRAIN - BULK
//AC
//DRAIN - BULK
if (v_di_b>0.0)
begin
csb_d = cj_t * ad_i * exp(-xd_mj*ln(1.0+v_di_b/pb_t));
@ -917,6 +917,6 @@ module ekv_va(d,g,s,b);
end
qjs = (csb_s+cssw_s+csswg_s) * v_si_b;
I(s,b) <+ ddt(qjs)*TYPE*M;
//END OF DIODES
//END OF DIODES
end
endmodule

View File

@ -23,12 +23,12 @@
Licensed under Educational Community License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain a copy of the license at
http://opensource.org/licenses/ECL-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations
under the License.
The BSIM-BULK standard has been supported by the members of Silicon Integration Initiative's Compact Model Coalition.
A link to the most recent version of this standard can be found at:
http://www.si2.org/cmc
http://www.si2.org/cmc
*/
`include "constants.vams"
@ -1737,9 +1737,9 @@ endfunction
// High Voltage Model Parameters
// --- Mod selectors -----
`MPIcc( HVMOD ,0 ,"" ,0 ,1 ,"High Voltage series resistance model, 0: Turn Off 1: Turn On")
`MPIcc( HVCAP ,0 ,"" ,0 ,1 ,"High Voltage capacitance model. 0: Turn Off 1: Turn On")
`MPIcc( HVCAPS ,0 ,"" ,0 ,1 ,"High Voltage capacitance model at source side. 0: Turn Off 1: Turn On")
`MPIcc( HVMOD ,0 ,"" ,0 ,1 ,"High Voltage series resistance model, 0: Turn Off 1: Turn On")
`MPIcc( HVCAP ,0 ,"" ,0 ,1 ,"High Voltage capacitance model. 0: Turn Off 1: Turn On")
`MPIcc( HVCAPS ,0 ,"" ,0 ,1 ,"High Voltage capacitance model at source side. 0: Turn Off 1: Turn On")
`MPIcc( IIMOD ,0 ,"" ,0 ,1 ,"Flag for impact ionization in the drift region 0: Turn-Off, 1: Turn On" )
// --- Other parameters -----
@ -1754,7 +1754,7 @@ endfunction
`MPRnb( VFBOV ,-1 ,"V" ,"Flat-band voltage of the overlap region" )
`MPRnb( LOVER ,500n ,"m" ,"Overlap region length" )
`MPRnb( LOVERACC ,LOVER ,"m" ,"Drift region length" )
`MPRnb( NDR ,NDEP ,"m^3" ,"Drift region doping" )
`MPRnb( NDR ,NDEP ,"1/m^3" ,"Drift region doping" )
`MPRcz( SLHV ,0 ,"" ,"Parameter and Flag for controlling slope of accumulation region capacitance. 0: Turn-Off, 1: Turn On" )
`MPRoz( SLHV1 ,1.0 ,"" ,"Parameter for slope of the accumulation capacitance " )
`MPRnb( ALPHADR ,ALPHA0 ,"" ,"First parameter of Iii in the drift region" )
@ -1938,7 +1938,7 @@ real vth0_well, k2_well, mu_well, Wdrn, local_sca, local_scb, local_scc;
real ids_edge, ETA0EDGE_t, NFACTOREDGE_t, Vbi_edge, theta_sce_edge, dvth_dibl, dvth_sce, litl_edge, DGAMMAEDGE_i, vdsatedge, Vdsatedge, Vdssate, phib_edge, phib_n_edge, NDEPEDGE_i, gam_edge;
real vth0_stress_EDGE, k2_stress_EDGE, eta_stress_EDGE;
// 1/f noise model for Edge FET
// 1/f noise model for Edge FET
real nq_edge, qdeff_edge, qs_edge, Leffnoi_edge, Leffnoisq_edge, noia_edge, noib_edge, noic_edge, FNPowerAtedge;
// Below are used by macros by GEOMOD and RGEOMOD
@ -2632,7 +2632,7 @@ analog begin
end else begin
RDrainGeo = 0.0;
end
// Clamping of S/D resistances
// Clamping of S/D resistances
if (RDSMOD == 0) begin
if (RSourceGeo < minr) begin
@ -3204,10 +3204,10 @@ analog begin
// Vth shift for DIBL
dVth_dibl = -(ETA0_a + ETAB_i * Vbsx) * Vdsx;
`Smooth2(dVth_dibl, 0.0, 5.0e-5, dVth_dibl)
// Vth shift with temperature
dvth_temp = (KT1_i + KT1L / Leff + KT2_i * Vbsx) * (pow(TRatio, KT1EXP) - 1.0);
// Vth correction for pocket implants
if (DVTP0_i > 0.0) begin
@ -3615,8 +3615,8 @@ analog begin
end
end
Rdrain = Rdrain + rdrift_d;
Rsource = Rsource + rdrift_s;
Rdrain = Rdrain + rdrift_d;
Rsource = Rsource + rdrift_s;
end
QIOV = 0;
@ -3660,7 +3660,7 @@ analog begin
vgfbdrift = -devsign * V(gm,si) - VFBOV ;
vgfbdrift = vgfbdrift/Vt;
`PO_psip(vgfbdrift,gamhv,0,phibHV,psip_k)
`BSIM_q(psip_k, phibHV, devsign * V(si,bi)/Vt, gamhv, q_k)
`BSIM_q(psip_k, phibHV, devsign * V(si,bi)/Vt, gamhv, q_k)
`Smooth(psip_k, 1.0, 2.0, psipclamp_hv)
sqrtpsip_k = sqrt(psipclamp_hv);
@ -3681,7 +3681,7 @@ analog begin
QIOVS = NF * Wact * LOVERACC * 2 * nq_hv * Vt * T0 * q_k ;
end
end
end
Gcrg = 0.0;
@ -3708,14 +3708,14 @@ analog begin
// Secondary impact ionization in the drift region
if (HVMOD == 1 && IIMOD == 1) begin
Ntot = DRII1 * ids/(NF * Weff * `q * VDRIFT_t );
Ntot = DRII1 * ids/(NF * Weff * `q * VDRIFT_t );
Nextra = Ntot/NDRIFTD - 1;
`Smooth(Nextra, 0, DELTAII, Nextra)
Nextra = NDRIFTD * Nextra;
`Smooth(devsign * V(d,bi) - Vdseff - DRII2, 0, 0.05, T2)
T3 = 2.0 * `q /(EPSRSUB * `EPS0) * Nextra;
T3 = T3 * T2;
T3 = T3 * T2;
if (T3 > BETADR / `EXPL_THRESHOLD) begin
T1 = -BETADR/T3;
@ -4008,7 +4008,7 @@ analog begin
if (SSLMOD != 0) begin
T1 = pow(NDEP_i / 1.0e23, SSLEXP1);
T2 = pow(300.0 / DevTemp, SSLEXP2);
T3 = (devsign*SSL5 * V(bi,si)) / Vt;
T3 = (devsign*SSL5 * V(bi,si)) / Vt;
SSL0_NT = SSL0 * lexp(-T1 * T2);
SSL1_NT = SSL1 * T2 * T1;
PHIB_SSL = SSL3 * tanh(lexp(devsign * SSL4 * (V(gi, bi) - VTH - V(si,bi))));
@ -4042,7 +4042,7 @@ analog begin
end else begin
LH1 = Leff;
T0 = LH1;
end
end
if(LINTNOI >= T0 / 2.0) begin
$strobe("Warning: LINTNOI = %e is too large - Leff for noise is negative. Re-setting LINTNOI = 0.", LINTNOI);
LINTNOI_i = 0.0;
@ -4158,7 +4158,7 @@ analog begin
end
I(di, si) <+ flicker_noise(sigvds*FNPowerAt1Hz, EF, "1overf");
end
T0 = qia / Esatnoi / Leff;
T1 = T0 * T0;
T3 = RNOIA * (1.0 + TNOIA * Leff * T1);
@ -4233,7 +4233,7 @@ analog begin
if (IGBMOD != 0) begin
I(gi, bi) <+ white_noise(2.0 * `q * abs(igb), "igb");
end
// C-V model
vgfbCV = vgfb;
gamg2 = (2.0 * `q * epssi * NGATE_i) / (Cox * Cox * Vt);
@ -4281,7 +4281,7 @@ analog begin
qdsat = LambdaC_by2 * (qs * qs + qs) / (1.0 + LambdaC_by2 * (1.0 + qs));
vdsatcv = psip - 2.0 * phibCV - (2.0 * qdsat + lln((qdsat * 2.0 * nq * inv_gam) * ((qdsat * 2.0 * nq * inv_gam) + (gam / (nq - 1.0)))));
VdsatCV = vdsatcv * Vt;
// Normalized charge qdeff at drain end of channel
`Smooth(VdsatCV - Vs, 0.0, 1e-3, VdssatCV)
VdssatCV = VdssatCV / ABULK;
@ -4397,7 +4397,7 @@ analog begin
end
Qovb = -devsign * NF * Lact * CGBO * V(gm, bi);
Qovg = -(Qovs + Qovd + Qovb);
// Edge FET model
if (EDGEFET == 1) begin
phib_edge = lln(NDEPEDGE_i / ni);
@ -4436,12 +4436,12 @@ analog begin
gam_edge = sqrt(2.0 * `q * epssi * NDEPEDGE_i * inv_nVt) / Cox;
gam_edge = gam_edge * (1.0 + DGAMMAEDGE_i);
inv_gam = 1.0 / gam_edge;
// psip: pinch-off voltage
phib_n_edge = phib_edge / n;
`PO_psip(vgfb, gam_edge, 0.0, phib_n_edge, psip)
`BSIM_q(psip, phib_n_edge, vs, gam_edge, qs_edge)
// Approximate pinch-off voltage
@ -4466,7 +4466,7 @@ analog begin
nq_edge = 1.0 + gam_edge / (sqrtpsip + T2);
ids_edge = 2.0 * NF * nq_edge * ueff * WEDGE / Leff * Cox * nVt * nVt * ((qs_edge - qdeff_edge) * (1.0 + qs_edge + qdeff_edge)) * Moc;
ids = ids_edge + ids;
// Flickernoise calculation for Edge FET
noia_edge = NOIA * NEDGE;
noib_edge = NOIB * NEDGE;
@ -4500,7 +4500,7 @@ analog begin
end
// End of Edge FET parasitic device drain current model
// Charge expressions including fringing and overlap capacitances
QB = devsign * (QBi + Qovb + Qbsj + Qbdj);
if (sigvds > 0) begin
@ -4522,7 +4522,7 @@ analog begin
if (HVCAPS == 1) begin
Qovb = Qovb + QIOVS;
Qovs = Qovs + QBOVS;
end
end
end
// Output
@ -4604,8 +4604,8 @@ analog begin
if (sigvds > 0)begin
GDS = ddx(IDS, V(di)); // Output conductance
end else begin
GDS = ddx(-IDS, V(si));
end
GDS = ddx(-IDS, V(si));
end
// Loading variables
I(gi, bi) <+ ddt(QGI);
@ -4634,15 +4634,15 @@ analog begin
end
// External S/D resistances
if (RDSMOD !=2 && RDrainGeo >0) begin
gdpr = 1.0 / Rdrain; // Note: gdpr considers all fingers
I(d, di) <+ V(d, di) * gdpr;
I(d, di) <+ white_noise(Nt * gdpr, "rd");
end else begin
V(d, di) <+ 0.0;
end
end
if (RDSMOD !=2 && RSourceGeo >0) begin
gspr = 1.0 / Rsource; // Note: gspr considers all fingers
I(s, si) <+ V(s, si) * gspr;
@ -4650,8 +4650,8 @@ analog begin
end else begin
V(s, si) <+ 0.0;
end
if (RGATEMOD == 0) begin
V(g, gm) <+ 0.0;
end else begin: rgate
@ -4672,7 +4672,7 @@ analog begin
end else begin
V(gm, gi) <+ 0.0;
end
if ((SHMOD != 0) && (RTH0 > 0.0)) begin
Pdiss = devsign * sigvds * ids * V(di, si);
if (RDSMOD !=2 && RDrainGeo >0) begin
@ -4685,7 +4685,7 @@ analog begin
end else begin
Temp(t) <+ 0.0;
end
if (RBODYMOD != 0) begin
I(bi, sbulk) <+ V(bi, sbulk) * Grbps;
I(b, sbulk) <+ V(b, sbulk) * Grbsb;

View File

@ -19,12 +19,12 @@
Licensed under Educational Community License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain a copy of the license at
http://opensource.org/licenses/ECL-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations
under the License.
BSIM-CMG model is supported by the members of Silicon Integration Initiative's Compact Model Coalition. A link to the most recent version of this
standard can be found at: http://www.si2.org/cmc
standard can be found at: http://www.si2.org/cmc
*/
`include "constants.vams"

View File

@ -19,12 +19,12 @@
Licensed under Educational Community License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain a copy of the license at
http://opensource.org/licenses/ECL-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations
under the License.
BSIM-CMG model is supported by the members of Silicon Integration Initiative's Compact Model Coalition. A link to the most recent version of this
standard can be found at: http://www.si2.org/cmc
standard can be found at: http://www.si2.org/cmc
*/
analog begin
@ -451,7 +451,7 @@ analog begin
end
Prsd = FPITCH + DELTAPRSD;
// Resistivity calculation
if ($param_given(RHORSD)) begin
if ($param_given(RHORSD)) begin
rhorsd = RHORSD;
end else begin
mu_max = (TYPE == `ntype) ? 1417.0 : 470.5;
@ -530,22 +530,22 @@ analog begin
CGSO_i = CGSO;
end else begin
if ($param_given(DLC) && DLC > 0.0) begin
CGSO_i = max(0.0, DLC * cox - CGSL_i);
CGSO_i = max(0.0, DLC * cox - CGSL_i);
end else begin
CGSO_i = 0.3 * TFIN * cox;
CGSO_i = 0.3 * TFIN * cox;
end
end
if ($param_given(CGDO)) begin
CGDO_i = CGDO;
end else begin
if ($param_given(DLC) && DLC > 0.0) begin
CGDO_i = max(0.0, DLC * cox - CGDL_i);
CGDO_i = max(0.0, DLC * cox - CGDL_i);
end else begin
CGDO_i = 0.3 * TFIN * cox;
CGDO_i = 0.3 * TFIN * cox;
end
end
end
// Parasitic source/drain-to-gate fringe capacitance
if (CGEOMOD == 2) begin
Hg = TGATE + TMASK;
@ -1184,9 +1184,9 @@ analog begin
T8 = T10 - e0 / e1;
T12a = `lexp(-T8) + T8 - 1.0;
if (T12a <= 0) begin
T12 = 0.0;
end else begin
T12 = T9 * sqrt(T12a);
T12 = 0.0;
end else begin
T12 = T9 * sqrt(T12a);
end
end else begin
@ -1898,11 +1898,11 @@ analog begin
// External source/drain resistance
if (RDSMOD == 2) begin
V(d, di) <+ 0.0;
V(s, si) <+ 0.0;
V(d, di) <+ 0.0;
V(s, si) <+ 0.0;
end else begin
I(d, di) <+ V(d, di) / Rdrain;
I(s, si) <+ V(s, si) / Rsource;
I(d, di) <+ V(d, di) / Rdrain;
I(s, si) <+ V(s, si) / Rsource;
end
// NQS gate resistance model
@ -2106,7 +2106,7 @@ analog begin
CESI = -ddx(QBI, V(si));
CEEI = ddx(QBI, V(e));
// Total capacitances
CGG = CGGI + ddx(qgs_parasitic + qgd_parasitic + (CGEOMOD == 1 ? qgs_fr + qgd_fr : 0.0) - devsign * Qeg, V(ge));
CGG = CGGI + ddx(qgs_parasitic + qgd_parasitic + (CGEOMOD == 1 ? qgs_fr + qgd_fr : 0.0) - devsign * Qeg, V(ge));
CGS = -ddx(QG, V(si));
CGD = -ddx(QG, V(di));
CGE = -ddx(QG, V(e));

View File

@ -19,12 +19,12 @@
Licensed under Educational Community License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain a copy of the license at
http://opensource.org/licenses/ECL-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations
under the License.
BSIM-CMG model is supported by the members of Silicon Integration Initiative's Compact Model Coalition. A link to the most recent version of this
standard can be found at: http://www.si2.org/cmc
standard can be found at: http://www.si2.org/cmc
*/
// Parameter checking

View File

@ -19,12 +19,12 @@
Licensed under Educational Community License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain a copy of the license at
http://opensource.org/licenses/ECL-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations
under the License.
BSIM-CMG model is supported by the members of Silicon Integration Initiative's Compact Model Coalition. A link to the most recent version of this
standard can be found at: http://www.si2.org/cmc
standard can be found at: http://www.si2.org/cmc
*/
// Source/drain resistances

View File

@ -19,12 +19,12 @@
Licensed under Educational Community License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain a copy of the license at
http://opensource.org/licenses/ECL-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations
under the License.
BSIM-CMG model is supported by the members of Silicon Integration Initiative's Compact Model Coalition. A link to the most recent version of this
standard can be found at: http://www.si2.org/cmc
standard can be found at: http://www.si2.org/cmc
*/
// Model types

View File

@ -19,12 +19,12 @@
Licensed under Educational Community License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain a copy of the license at
http://opensource.org/licenses/ECL-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations
under the License.
BSIM-CMG model is supported by the members of Silicon Integration Initiative's Compact Model Coalition. A link to the most recent version of this
standard can be found at: http://www.si2.org/cmc
standard can be found at: http://www.si2.org/cmc
*/
// Noise model

View File

@ -19,12 +19,12 @@
Licensed under Educational Community License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain a copy of the license at
http://opensource.org/licenses/ECL-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations
under the License.
BSIM-CMG model is supported by the members of Silicon Integration Initiative's Compact Model Coalition. A link to the most recent version of this
standard can be found at: http://www.si2.org/cmc
standard can be found at: http://www.si2.org/cmc
*/
// Both model and instance parameters

View File

@ -19,12 +19,12 @@
Licensed under Educational Community License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain a copy of the license at
http://opensource.org/licenses/ECL-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations
under the License.
BSIM-CMG model is supported by the members of Silicon Integration Initiative's Compact Model Coalition. A link to the most recent version of this
standard can be found at: http://www.si2.org/cmc
standard can be found at: http://www.si2.org/cmc
*/
// Variables