Make your own free website on Tripod.com
Sergey Trushin' s Home Page
Verilog-A models
Home
About Me
Discussions
My Publications
Favorite Links
Shop
Contact Me

/*

Copyright 2003 Eagleware Corporation. All rights reserved.

This software has been provided pursuant to a License Agreement

containing restrictions on its use. This software contains

valuable trade secrets and proprietary information of

Eagleware Corporation and is protected by law. 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 except with the prior

written authorization from Eagleware Co.

Verilog-A definition of Motorola MET LDMOS.

http://e-www.motorola.com/files/abstract/ldmos_models/MET_LDMOS_MODEL_DOCUMENT_0502.pdf

Developed by: Sergey Trushin.

$RCSfile: ldmos.va,v $ $Revision: 1.1 $ $Date: 2003/10/23 12:01:00 $

*/

`include "disciplines.vams"

`include "constants.vams"

`include "compact.vams"

`define EXCESS_PHASE

`define SELF_HEATING

`ifdef EXCESS_PHASE

`define DELAY_NETWORK

`endif

module ldmos(d, g, s, t);

// %%DEVICE_CLASS=MOS(NMOS:TYPE=1,PMOS:TYPE=-1)%%

//

// Node definitions

//

inout g, d, s, t;

electrical g, d, s, t, gi, di, si, ti, gsi, gdi, dsi;

`ifdef DELAY_NETWORK

electrical xf1, xf2; // excess phase network's nodes

`endif

parameter real RG_0 = 1 from (0:inf); //"Gate Resistance Evaluated at Tnom (Ohms)"

parameter real RG_1 = 0.001; //"Gate Resistance Coefficient (Ohms/K)"

parameter real RS_0 = .1 from (0:inf); //"Source Resistance Evaluated at Tnom (Ohms)"

parameter real RS_1 = 0.0001; //"Source Resistance Coefficient (Ohms/K)"

parameter real RD_0 = 1.5 from (0:inf); //"Drain Resistance Evaluated at Tnom (Ohms)"

parameter real RD_1 = 0.0015; //"Drain Resistance Coefficient (Ohms/K)"

parameter real VTO_0 = 3.5; //"Forward Threshold Voltage Evaluated at Tnom (V)"

parameter real VTO_1 = -0.001; //"Forward Threshold Voltage Coefficient (V/K)"

parameter real GAMMA = -0.02; //"IDS Equation Coefficient"

parameter real VST = 0.15 exclude 0; //"Sub-Threshold Slope Coefficient(V)"

parameter real BETA_0= 0.2 from (0:inf); //"IDS Equation Coefficient BETA Evaluated at Tnom"

parameter real BETA_1= -0.0002; //"IDS Equation Coefficient (1/K)"

parameter real LAMBDA= -0.0025; //"IDS Equation Coefficient (1/V)"

parameter real VGEXP = 1.1 from (0:inf); //"IDS Equation Coefficient"

parameter real ALPHA = 1.5 from (0:inf); //"IDS Equation Coefficient (1/Ohms)"

parameter real VK = 7.0; //"IDS Equation Coefficient (V)"

parameter real DELTA = 0.9; //"IDS Equation Coefficient (V)"

parameter real VBR_0 = 75.0; //"Breakdown Voltage Evaluated at Tnom (V)"

parameter real VBR_1 = 0; //"VBR temperature coefficient (V/K)"

parameter real K1 = 1.5; //"Breakdown Parameter"

parameter real K2 = 1.15 exclude 0; //"Breakdown Parameter"

parameter real M1 = 9.5; //"Breakdown Parameter (V)"

parameter real M2 = 1.2; //"Breakdown Parameter"

parameter real M3 = 0.001; //"Breakdown Parameter (V)"

parameter real BR = 0.5; //"Reverse IDS Equation Coefficient (1/(V*Ohm))"

parameter real RDIODE_0 = 0.5 from (0:inf);//"Reverse Diode Series Resistance Evaluated at Tnom (Ohms)"

parameter real RDIODE_1 = 0.001; //"Reverse Diode Series Resistance Coefficient (Ohms/K)"

parameter real ISR = 1e-13 from [0:inf); //"Reverse Diode Leakage Current (A)"

parameter real NR = 1.0 from (0:inf); //"Reverse Diode Ideality Factor"

parameter real VTO_R = 3.0; //"Reverse Threshold Voltage (V)"

parameter real RTH = 10.0 from [0:inf); //"Thermal Resistance Coefficient (C/Watts)"

parameter real GGS = 1e5 from [0:inf); //"Gate to Source Conductance (1/Ohms)"

parameter real GGD = 1e5 from [0:inf); //"Gate to Drain Conductance (1/Ohms)"

parameter real TAU = 1e-12 from [0:inf); //"Transit Time Under Gate to (sec)"

parameter real TNOM = 25 from [-`P_CELSIUS0:300]; //"Temperature at Which Model Parameters are Extracted (C)"

parameter real TSNK = 25 from [-`P_CELSIUS0:300]; //"Heat Sink Temperature (C)"

parameter real CGST = 0.001; //"Cgs Temperature Coefficient(1/K)"

parameter real CDST = 0.001; //"Cds Temperature Coefficient(1/K)"

parameter real CGDT = 0.0; //"Cgd Temperature Coefficient(1/K)"

parameter real CTH = 0.0 from (0:inf); //"Termal Capacitance(J/C)"

parameter real KF = 0.0 from (0:inf); //"Flicker Noise Coefficient"

parameter real AF = 1.0; //"Flicker Noise Exponent"

parameter real FFE = 1.0 from (0:inf); //"Flicker Noise Frequency Exponent"

parameter real N = 1.0 from (0:inf); //"Forward Diode Ideality Factor"

parameter real ISS = 1e-13 from [0:inf); //"Forward Diode Leakage Current (A)"

parameter real CGS1 = 2e-12 from [0:inf); //"Cgs Equation Coefficient(F)"

parameter real CGS2 = 1e-12; //"Cgs Equation Coefficient(F/V)"

parameter real CGS3 = -4.0; //"Cgs Equation Coefficient(V)"

parameter real CGS4 = 1e-12; //"Cgs Equation Coefficient(F/V)"

parameter real CGS5 = 0.25; //"Cgs Equation Coefficient"

parameter real CGS6 = 3.5; //"Cgs Equation Coefficient(1/V)"

parameter real CGD1 = 4e-13 from (0:inf); //"Cgd Equation Coefficient(F)"

parameter real CGD2 = 1e-13; //"Cgd Equation Coefficient(F)"

parameter real CGD3 = 0.1; //"Cgd Equation Coefficient(1/V^2)"

parameter real CGD4 = 4; //"Cgd Equation Coefficient(V)"

parameter real CDS1 = 1e-12 from (0:inf); //"Cds Equation Coefficient(F)"

parameter real CDS2 = 1.5e-12; //"Cds Equation Coefficient(F)"

parameter real CDS3 = 0.1; //"Cds Equation Coefficient(1/V^2)"

parameter real AREA = 1.0 from (0:inf); //"Gate Periphery Scaling Parameter"

parameter real N_FING= 1.0 from (0:inf); //"Gate Finger Scaling Parameter"

parameter real EG = 1.11 from (0:inf); //"Energy GAP 1.11eV (Si)"

parameter integer NMOS = 1 from [0:1];

parameter integer PMOS = 0 from [0:1];

real Rd, Rg, Rs;

real Itherm, Idiode_R, Idiode_F, Rdiode, Ism;

real Vddi, Vggi, Vssi, Vggs, Vgdg, Vgs, Vgs_delayed,

Vgd, Vds, Vdiode_R, Vrdiode, Vth_rise;

real Cgs, Cgd, Cds;

real Rd_0, Rd_1, Rs_0, Rs_1, Rg_0, Rg_1, Ggd, Ggs, Rth, Cth;

real Beta_0, Beta_1, Beta;

real Vt, Vto_f, Vto_r, Vgst, Vgst1, Vgst2, Vbr, Vbreff, Vbreff1;

real Cgs1, Cgs2, Cgs4;

real Cgd1, Cgd2;

real Cds1, Cds2;

real Iss, Isr, Br, Ids, Ids_delayed;

real Rdiode_0, Rdiode_1, Gm;

real T, Tnom, dT, rT;

real Type;

`ifdef DELAY_NETWORK

real Cxf, Lxf;

`endif

analog begin

// Scaling:

Rd_0 = RD_0 / AREA;

Rd_1 = RD_1 / AREA;

Rs_0 = RS_0 / AREA;

Rs_1 = RS_1 / AREA;

Rg_0 = RG_0 * AREA * N_FING * N_FING;

Rg_1 = RG_1 * AREA * N_FING * N_FING;

Ggd = GGD * AREA;

Ggs = GGS * AREA;

Rth = RTH / AREA;

Cth = CTH * AREA;

Beta_0 = BETA_0 * AREA;

Beta_1 = BETA_1 * AREA;

Cgs1 = CGS1 *AREA;

Cgs2 = CGS2 *AREA;

Cgs4 = CGS4 *AREA;

Cgd1 = CGD1 *AREA;

Cgd2 = CGD2 *AREA;

Cds1 = CDS1 *AREA;

Cds2 = CDS2 *AREA;

Iss = ISS * AREA;

Isr = ISR * AREA;

Br = BR * AREA;

Rdiode_0 = RDIODE_0/AREA;

Rdiode_1 = RDIODE_1/AREA;

// Branches voltages

`SET_TYPE(NMOS,PMOS,Type);

if (Type == 0)

Type = 1;

Vddi = Type * V(d,di);

Vggi = Type * V(g,gi);

Vssi = Type * V(s,si);

Vggs = Type * V(gsi,si);

Vgdg = Type * V(gdi,di);

Vgs = Type * V(gi,gsi);

Vgd = Type * V(gi,gdi);

Vds = Type * V(di,si);

Vdiode_R = Type * V(dsi,di);

Vrdiode = Type * V(dsi,si);

Vth_rise = V(t,ti);

// Temperature dependences:

if (Vth_rise < 0)

Vth_rise = 0;

if (Vth_rise > 250)

Vth_rise = 250 + 50*tanh((Vth_rise-250)/50);

T = Vth_rise + TSNK + `P_CELSIUS0;

Tnom = TNOM + `P_CELSIUS0;

dT = T - Tnom;

rT = T / Tnom;

Rg = Rg_0 + Rg_1 * dT;

Rd = Rd_0 + Rd_1 * dT;

Rs = Rs_0 + Rs_1 * dT;

Vto_f = VTO_0 + VTO_1 * dT;

Vto_r = VTO_R + VTO_1 * dT;

Beta = BETA_0 + BETA_1 * dT;

Vbr = VBR_0 + VBR_1 * dT;

`ifdef EXCESS_PHASE

`ifdef DELAY_NETWORK

// use network to model delay

if (TAU<=0) begin

Lxf = 0;

Cxf = 0;

end

else begin

Lxf = TAU/3;

Cxf = TAU;

end

Vgs_delayed = Vgs;

`else

Vgs_delayed = absdelay(Vgs,TAU);

`endif // DELAY_NETWORK

`else

Vgs_delayed = Vgs;

`endif // EXCESS_PHASE

if (Vds>=0)

Vgst2 = Vgs_delayed - (Vto_f + GAMMA * Vds);

else // Vds < 0

Vgst2 = Vgs_delayed - (Vto_r - GAMMA * Vds);

Vgst1 = Vgst2 - 0.5*(Vgst2 + sqrt((Vgst2-VK)*(Vgst2-VK)+DELTA*DELTA)

- sqrt(VK*VK + DELTA*DELTA));

Vgst = VST * ln(limexp(Vgst1/VST)+1);

if (Vds>=0) begin

Vbreff = Vbr*0.5*(1 + tanh(M1 - Vgst*M2));

Vbreff1 = (Vds-Vbreff)/K2 + M3*Vds/Vbreff;

Ids = Beta * pow(Vgst, VGEXP) * (1 + LAMBDA * Vds)

*tanh(Vds*ALPHA/Vgst)*(1 + K1 * limexp(Vbreff1));

Gm = 0; // set Gm = d(Ids)/d(Vgs) - it need for thermal noise calculation of Gm only

end

else begin

Ids = Br * Vds * Vgst;

Gm = 0;

end

Vt = `P_K / `P_Q * T;

// Forward diode

Idiode_F = Iss * limexp((Vds-Vbr)/(N * Vt));

// Reverse diode

Ism = Isr * pow(rT, 3/NR) / limexp( EG / (Vt*NR) * (1-rT));

Idiode_R = Ism * limexp((Vdiode_R)/(NR * Vt)-1);

Rdiode = RDIODE_0 + RDIODE_1 * dT;

`ifdef SELF_HEATING

Itherm = Vddi*Vddi/Rd + Vggi*Vggi/Rg + Vssi*Vssi/Rs + Idiode_R*Vdiode_R +

Vrdiode*Vrdiode/Rdiode + (Ids+Idiode_F)*Vds;

`else

Itherm = 0; // no therm effects

`endif

`ifdef DELAY_NETWORK

I(xf1) <+ -Ids + Cxf * ddt(V(xf1));

I(xf2) <+ I(xf1);

V(xf2, xf1) <+ Lxf * ddt(I(xf2));

V(xf2) <+ I(xf2);

Ids_delayed = V(xf2);

`else

Ids_delayed = Ids;

`endif

// DC model:

V(ti) <+ TSNK;

I(d,di) <+ V(d,di) / Rd;

I(g,gi) <+ V(g,gi) / Rg;

I(s,si) <+ V(s,si) / Rs;

I(gsi,si) <+ Type * Ggs * V(gsi,si);

I(gdi,di) <+ Type * Ggd * V(gdi,di);

I(di,si) <+ Type * (Ids_delayed + Idiode_F);

I(dsi,di) <+ Type * Idiode_R;

I(dsi,si) <+ V(dsi,si) / Rdiode;

I(ti,t) <+ Itherm - Vth_rise/Rth;

// Capacitances and charge currents:

Cgs = (Cgs1 + Cgs2*(1 + tanh(CGS6*(Vgs+CGS3)))

+ Cgs4*(1 - tanh(Vgs*CGS5)))*(1 + CGST*dT);

Cgd = (Cgd1 + Cgd2/(1 + CGD3*(Vgd-CGD4)*(Vgd-CGD4)))*(1 + CGDT*dT);

Cds = (Cds1 + Cds2/(1 + CDS3*Vds*Vds))*(1 + CDST*dT);

I(gi,gsi) <+ Type * Cgs * ddt(Vgs);

I(gi,gdi) <+ Type * Cgd * ddt(Vgd);

I(di,si) <+ Type * Cds * ddt(Vds);

I(ti,t) <+ -Cth * ddt(Vth_rise);

// Noise:

I(d,di) <+ white_noise(4.0 * `P_K * T / Rd, "thermal");

I(g,gi) <+ white_noise(4.0 * `P_K * T / Rg, "thermal");

I(s,si) <+ white_noise(4.0 * `P_K * T / Rs, "thermal");

I(di, si) <+ flicker_noise(KF * pow(Ids, AF), FFE, "flicker")

+ white_noise(8.0/3.0 * `P_K * T * Gm, "thermal");

end

endmodule

Enter subhead content here

Enter content here

Enter supporting content here