06 Coram Mos-Ak06

Embed Size (px)

Citation preview

  • 7/31/2019 06 Coram Mos-Ak06

    1/38

    Verilog-A:An Introduction

    for Compact Modelers

    Geoffrey Coram

    MOS-AK/ESSDERC/ESSCIRC Workshop (Montreux 2006)

  • 7/31/2019 06 Coram Mos-Ak06

    2/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)2

    Outline

    The ProblemModeling Languages

    Diode Example

    GuidelinesAdmonishments

    Compiler Optimizations

    ConclusionReferences (and Further Examples)

  • 7/31/2019 06 Coram Mos-Ak06

    3/38

  • 7/31/2019 06 Coram Mos-Ak06

    4/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)4

    M

    odelingIn

    terface

    The Solution

    SpectreEldo

    ADSSmash

    Nanosim

    HSIM

    APLAC

    AMSGolden

    Gate

    HSPICE

    VBIC

    HiCUMBSIM

    Mextram

    ACM

    HiSIM

    USIM

    PSP

    MM20

    HVEKV

    from McAndrew, BMAS 2003

  • 7/31/2019 06 Coram Mos-Ak06

    5/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)5

    Modeling Languages

    Programming languages:FORTRAN (SPICE2)C (SPICE3)+ Fast, direct access to simulator

    Must compute derivatives No standard interface Intimate knowledge of simulator required

    MATLAB+ Excellent for data fitting Does not run directly in any analog simulator

  • 7/31/2019 06 Coram Mos-Ak06

    6/38

  • 7/31/2019 06 Coram Mos-Ak06

    7/38Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)7

    Behavioral Modeling Languages

    Verilog-A Verilog-AMSPushed by Cadence, came to market earlierVerilog-A from Open Verilog International became part

    of Accellera Verilog-AMS

    IEEE 1800 authorized to develop SystemVerilog-AMS

    Verilog-AMS runs in the same AMS simulators asVHDL-AMS

    + Verilog-A runs in Spectre, HSpice, ADS, Eldoand internal simulators of semiconductor companies

    +Clear definition of A+ Verilog-AMS LRM 2.2 was driven by the requirements

    for compact modeling

  • 7/31/2019 06 Coram Mos-Ak06

    8/38Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)8

    V-AMS LRM 2.2 Additions

    Highlights for compact modeling:output / operating point parametersvdsat, id_chan

    also gm, cgs using new ddx() operator

    $simparam to access simulator quantities(gmin)

    $param_given

    paramsets replace and extend Spice .modelcards

  • 7/31/2019 06 Coram Mos-Ak06

    9/38Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)9

    VHDL-AMS Diode

    -- Modified from http://www.syssim.ecs.soton.ac.uk/vhdl-ams/examples/smpr.htm

    library IEEE;use IEEE.math_real.all;use IEEE.electrical_systems.all;use IEEE.FUNDAMENTAL_CONSTANTS.all;

    entity diode is

    generic (Isat: current := 1.0e-14); -- Saturation current [Amps]port (terminal p, n : electrical);

    endentity diode;

    architecture ideal of diode isquantity v across i through p to n;

    constant TempC : real := 27.0; -- Ambient Temperature [Degrees]constant vt : real := PHYS_K*(273.15 + TempC )/PHYS_Q; -- Thermal Voltagebegin

    i == Isat*(limit_exp(v/vt) - 1.0);endarchitecture ideal;

  • 7/31/2019 06 Coram Mos-Ak06

    10/38Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)10

    VHDL-AMS Diode

    -- Modified from http://www.syssim.ecs.soton.ac.uk/vhdl-ams/examples/smpr.htm

    library IEEE;use IEEE.math_real.all;use IEEE.electrical_systems.all;use IEEE.FUNDAMENTAL_CONSTANTS.all;

    entity diode is

    generic (Isat: current := 1.0e-14); -- Saturation current [Amps]port (terminal p, n : electrical);

    endentity diode;

    architecture ideal of diode isquantity v across i through p to n;

    constant TempC : real := 27.0; -- Ambient Temperature [Degrees]constant vt : real := PHYS_K*(273.15 + TempC )/PHYS_Q; -- Thermal Voltagebegin

    i == Isat*(limit_exp(v/vt) - 1.0);endarchitecture ideal;

    isis a keyword!

    TempC is a constant!

  • 7/31/2019 06 Coram Mos-Ak06

    11/38Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)11

    Verilog-A Diode

    `include "disciplines.vams"module diode(a,c);

    inout a,c; electrical a,c;parameter real is = 10p from (0:inf);

    real id;(*desc = "conductance "*) real gd;analogbegin

    id = is * (limexp(V(a,c) / $vt) 1.0);

    gd = ddx(id, V(a));I(a,c)

  • 7/31/2019 06 Coram Mos-Ak06

    12/38Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)12

    Verilog-A Diode

    `include "disciplines.vams"module diode(a,c);

    inout a,c; electrical a,c;parameter real is = 10p from (0:inf);

    real id;(*desc = "conductance "*) real gd;analogbegin

    id = is * (limexp(V(a,c) / $vt) 1.0);

    gd = ddx(id, V(a));I(a,c)

  • 7/31/2019 06 Coram Mos-Ak06

    13/38Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)13

    Verilog-A Diode

    `include "disciplines.vams"module diode(a,c);

    inout a,c; electrical a,c;parameter real is = 10p from (0:inf);

    real id;(*desc = "conductance "*) real gd;analogbegin

    id = is * (limexp(V(a,c) / $vt) 1.0);

    gd = ddx(id, V(a));I(a,c)

  • 7/31/2019 06 Coram Mos-Ak06

    14/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)14

    Verilog-A Diode

    `include "disciplines.vams"module diode(a,c);

    inout a,c; electrical a,c;parameter real is = 10p from (0:inf);

    real id;(*desc = "conductance "*) real gd;analogbegin

    id = is * (limexp(V(a,c) / $vt) 1.0);

    gd = ddx(id, V(a));I(a,c)

  • 7/31/2019 06 Coram Mos-Ak06

    15/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)15

    Verilog-A Diode

    `include "disciplines.vams"module diode(a,c);

    inout a,c; electrical a,c;parameter real is = 10p from (0:inf);

    real id;(*desc = "conductance "*) real gd;analogbegin

    id = is * (limexp(V(a,c) / $vt) 1.0);

    gd = ddx(id, V(a));I(a,c)

  • 7/31/2019 06 Coram Mos-Ak06

    16/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)16

    Verilog-A Diode

    `include "disciplines.vams"module diode(a,c);

    inout a,c; electrical a,c;parameter real is = 10p from (0:inf);

    real id;(*desc = "conductance "*) real gd;analogbegin

    id = is * (limexp(V(a,c) / $vt) 1.0);

    gd = ddx(id, V(a));I(a,c)

  • 7/31/2019 06 Coram Mos-Ak06

    17/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)17

    Verilog-A Jump Start

    Looks much like CIntuitive and easy to read and learn

    Start with an existing model and modify

    Based on through and across variablesSet up is for KCL and KVL

    Understand the contribution operatorI(di,si)

  • 7/31/2019 06 Coram Mos-Ak06

    18/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)18

    Best Practices

    Models formulated in currents I(V) andcharges Q(V)most natural for modified nodal analysis (MNA)

    Q(V) not C(V) to ensure conservation of chargeddt(Q(V)) != ddt(C(V) * V) != C(V) * ddt(V)

    No access to previous timestepswatch non-quasi-static formulations

    allows model to run in RF simulatorNoises as current sources

    No discontinuities

  • 7/31/2019 06 Coram Mos-Ak06

    19/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)19

    Discontinuities

    Spice requires continuous derivativesConsider this code:

    if (vbs == 0.0)begin

    qbs = 0.0;capbs = czbs+czbssw+czbsswg;

    endelseif (vbs < 0.0)begin

    qbs =

    I(b,s)

  • 7/31/2019 06 Coram Mos-Ak06

    20/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)20

    Discontinuities

    Resulting C code:if (vbs == 0.0) {qbs = 0.0;

    dqbs_dvbs = 0.0;//capbs=czbs+czbssw+czbsswg;

    }elseif (vbs < 0.0) {

    qbs =

    Automatic derivativediffers from

    intended value

  • 7/31/2019 06 Coram Mos-Ak06

    21/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)21

    Discontinuities

    HiSIM2 Verilog-A(beta code)

    Clipping in C codemay affect values

    and derivativesdifferently

    HiSIM Verilog-A (beta code)ac drain current (real part)

    hisim ir(m1,d)

    0

    .5

    1

    1.5

    2

    2.5

    3

    3.5

    4

    x1e-3

    -80 -40 0 40 80 120 160 200vd, x1e-3

    if ( Vds

  • 7/31/2019 06 Coram Mos-Ak06

    22/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)22

    Compiler Optimizations

    Common subexpressionsid = is * (exp(vd/vtm) 1.0);gd = is/vtm * exp(vd/vtm);

    Eliminating internal nodesif (rs == 0.0)

    V(b_res)

  • 7/31/2019 06 Coram Mos-Ak06

    23/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)23

    analysis()

    Consider this code:

    if (analysis("tran"))begin

    qd =

    No capacitance in:

    small-signal ac analysis,harmonic balance, envelope following

    Pseudo-transient homotopy

  • 7/31/2019 06 Coram Mos-Ak06

    24/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)24

    analysis()

    Consider this code:if (analysis("noise"))begin

    flicker =strongInversionNoiseEval(vds,temp);

    Compiler/Simulator MUST do this optimization

    But what about PNOISE, HBNoise, ?

  • 7/31/2019 06 Coram Mos-Ak06

    25/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)25

    Events

    Consider this code:@(initial_step)beginisdrain = jsat * ad;

    What happens for a dc sweep?dont want re-computing for bias sweep

    need re-computing for temperature sweep

    Even for transient,initial_stepis true for every iteration at time=0

    Compiler/Simulator MUST do this optimization

  • 7/31/2019 06 Coram Mos-Ak06

    26/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)26

    ADMS Magic Names

    ADMS uses special block names toidentify sections of code

    Eg PSP Verilog-A:

    begin : initializeModel

    NSUB0_i = `CLIP_LOW(NSUB0,1e20);

    //

    Doesnt hurt for other compilers

  • 7/31/2019 06 Coram Mos-Ak06

    27/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)27

    Software Practices

    Use consistent indentationAlign code vertically on =

    Use meaningful namesuse maximum size (8) to help vertical alignment

    Include comments: brief description,reference documentation

    Physical constants are notdated and

    could changemodel results would then change

    define physical constants for a model

  • 7/31/2019 06 Coram Mos-Ak06

    28/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)28

    PSP Model Code

    // 4.2.4 Surface potential at source side

    Gf2 = Gn2 * f_s;inv_Gf2 = 1.0 / Gf2;

    Gf = sqrt(Gf2);

    xi = 1.0 + Gf * `invSqrt2;

    inv_xi = 1.0 / xi;

    Ux = Vsbstar * inv_phit1;

    xn_s = phib * inv_phit1 + Ux;

    if (xn_s < `se)

    delta_ns = exp(-xn_s) * inv_f;

    else

    delta_ns = `ke * inv_f / `P3(xn_s - `se);

    margin = 1e-5 * xi;

    `sp_s(x_s, xg, xn_s, delta_ns)

  • 7/31/2019 06 Coram Mos-Ak06

    29/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)29

    PSP Model Code

    // 4.2.4 Surface potential at source side

    Gf2 = Gn2 * f_s;inv_Gf2 = 1.0 / Gf2;

    Gf = sqrt(Gf2);

    xi = 1.0 + Gf *

    inv_xi = 1.0 / xi;

    Ux = Vsbstar * inv_phit1;

    xn_s = phib * inv_phit1 + Ux;

    if (xn_s < `se)

    delta_ns = exp(-xn_s) * inv_f;

    else

    delta_ns = `ke * inv_f / `P3(xn_s - `se);

    margin = 1e-5 * xi;

    `sp_s(x_s, xg, xn_s, delta_ns)

    equation number fromdocumentationand explanation

  • 7/31/2019 06 Coram Mos-Ak06

    30/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)30

    PSP Model Code

    // 4.2.4 Surface potential at source side

    Gf2 = Gn2 * f_s;inv_Gf2 = 1.0 / Gf2;

    Gf = sqrt(Gf2);

    xi = 1.0 + Gf * `invSqrt2;

    inv_xi = 1.0 / xi;

    Ux = Vsbstar * inv_phit1;

    xn_s = phib * inv_phit1 + Ux;

    if (xn_s < `se)

    delta_ns = exp(-xn_s) * inv_f;

    else

    delta_ns = `ke * inv_f / `P3(xn_s - `se);

    margin = 1e-5 * xi;

    `sp_s(x_s, xg, xn_s, delta_ns)

    alignment forreadability

  • 7/31/2019 06 Coram Mos-Ak06

    31/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)31

    PSP Model Code

    // 4.2.4 Surface potential at source side

    Gf2 = Gn2 * f_s;inv_Gf2 = 1.0 / Gf2;

    Gf = sqrt(Gf2);

    xi = 1.0 + Gf * `invSqrt2;

    inv_xi = 1.0 / xi;

    Ux = Vsbstar * inv_phit1;

    xn_s = phib * inv_phit1 + Ux;

    if (xn_s < `se)

    delta_ns = exp(-xn_s) * inv_f;

    else

    delta_ns = `ke * inv_f / `P3(xn_s - `se);

    margin = 1e-5 * xi;

    `sp_s(x_s, xg, xn_s, delta_ns)

    indentationof blocks

  • 7/31/2019 06 Coram Mos-Ak06

    32/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)32

    Other Model Code

    //----Self Heating Effect

    //(implemented only on mobility)------PD = (VDE-VS)*Id;if (SH_switch ==1) begin

    I(TH)

  • 7/31/2019 06 Coram Mos-Ak06

    33/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)33

    Other Model Code

    //----Self Heating Effect

    //(implemented only on mobility)------PD = (VDE-VS)*Id;if (SH_switch ==1) begin

    I(TH)

  • 7/31/2019 06 Coram Mos-Ak06

    34/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)34

    Other Model Code

    // new model for mobility reduction,

    //linked to the charges model// !! mb 98/10/11 (r10) introduced fabs(Eeff)(jpm) //

    if ((qb + eta_qi*qi) > 0.0) begin

    E0_Q_1 = 1.0 + T0*(qb + eta_qi*qi); endelse begin

    E0_Q_1 = 1.0 - T0*(qb + eta_qi*qi); end

    T0_GAMMA_1 = 1.0 + T0*GAMMA_sqrt_PHI;

    // !! mb 97/06/02 ekv v2.6beta = KP_Weff * T0_GAMMA_1 / (Leq * E0_Q_1+1e-60);

    // !! mb 97/07/18

    cryptic comments where is Eeff??

  • 7/31/2019 06 Coram Mos-Ak06

    35/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)35

    Coding Style

    Verilog-A can be very readable

    Characterization engineers andsimulator people will read it

    Make a good impression!

  • 7/31/2019 06 Coram Mos-Ak06

    36/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)36

    Conclusion

    Verilog-A is a powerful and easy-to-usecompact modeling language

    Writing a good compact model stillrequires care and rigor

    Many examples now available

  • 7/31/2019 06 Coram Mos-Ak06

    37/38

    Coram: Verilog-A Introduction for Compact Modelers (MOS-AK Montreux 2006)37

    References

    Designers Guidehttp://www.designers-guide.org/

    Forum

    Verilog-A model library (VBIC, MOS11, JFET, etc.)

    MCAST (Prof. CJ Richard Shi)http://www.ee.washington.edu/research/

    mscad/shi/mcast.htmlAutomatic compiler beats hand-coded C

    http://www.designers-guide.org/http://www.ee.washington.edu/research/mscad/shi/mcast.htmlhttp://www.ee.washington.edu/research/mscad/shi/mcast.htmlhttp://www.ee.washington.edu/research/mscad/shi/mcast.htmlhttp://www.ee.washington.edu/research/mscad/shi/mcast.htmlhttp://www.designers-guide.org/http://www.designers-guide.org/http://www.designers-guide.org/
  • 7/31/2019 06 Coram Mos-Ak06

    38/38

    Examples

    Verilog-A model library athttp://www.designers-guide.org/VerilogAMS/ VBIC, MOS11, JFET, etc.

    Silvaco public domain models (non-commercial use)https://src.silvaco.com/ResourceCenter/en/downloads/verilogA.jspBSIM3, BSIM4, BJT, etc.

    But: watch out for @(initial_step)!

    PSP http://pspmodel.asu.edu/

    Mextram http://hitec.ewi.tudelft.nl/mug/

    HiCUM http://www.iee.et.tu-dresden.de/iee/eb/hic_new/hic_intro.html

    http://www.designers-guide.org/VerilogAMS/https://src.silvaco.com/ResourceCenter/en/downloads/verilogA.jsphttps://src.silvaco.com/ResourceCenter/en/downloads/verilogA.jsphttp://pspmodel.asu.edu/http://hitec.ewi.tudelft.nl/mug/http://www.iee.et.tu-dresden.de/iee/eb/hic_new/hic_intro.htmlhttp://www.iee.et.tu-dresden.de/iee/eb/hic_new/hic_intro.htmlhttp://www.iee.et.tu-dresden.de/iee/eb/hic_new/hic_intro.htmlhttp://www.iee.et.tu-dresden.de/iee/eb/hic_new/hic_intro.htmlhttp://www.iee.et.tu-dresden.de/iee/eb/hic_new/hic_intro.htmlhttp://www.iee.et.tu-dresden.de/iee/eb/hic_new/hic_intro.htmlhttp://hitec.ewi.tudelft.nl/mug/http://pspmodel.asu.edu/https://src.silvaco.com/ResourceCenter/en/downloads/verilogA.jsphttps://src.silvaco.com/ResourceCenter/en/downloads/verilogA.jsphttp://www.designers-guide.org/VerilogAMS/http://www.designers-guide.org/VerilogAMS/http://www.designers-guide.org/VerilogAMS/