• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC Design
  3. Convergence issue with Verilog-A model

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 125
  • Views 15441
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Convergence issue with Verilog-A model

AQoutb
AQoutb over 4 years ago

I have developed Verilog-A model of a device that I am trying to simulate and every time it gives different value and at most of the occasions it just stops at a certain time of the simulation.

I have seen multiple posts around the same issue and it seems that this is due to a bad Verilog-A model or varying a bit the convergence parameters.

I would like to get your suggestions of either updating the model or changing the convergence parameters in a matter to get this module working properly.

The model is as follows;


//Start
`resetall
`include "constants.vams"
`include "disciplines.vams"


// check this for later updates//////////////////////////////
nature Magnetization
    access = Mgn;
    units = "SI";
    abstol = 1;
endnature

nature Ange
    access = Ang;
    units = "rad";
    abstol = 1;
endnature

discipline magnetization
  potential Magnetization;
enddiscipline

discipline ange
  potential Ange;
enddiscipline
/////////////////////////////////////////////////////////////

//Constants
//Define various physical constants in SI units
`define Pi     3.141592653589793        //rad     
//`define m_Bohr 9.27401E-24              // J/T       Bohr Magneton    
//`define h      6.626070040E-34          // J.s       Plank's constant
`define hbar   1.054571800e-34          // J.s       Reduced Planck's constant
//`define eV     1.60217653E-19           // C         Electron charge
`define KB     1.38064852E-23             // J/K       Boltzman constant
`define mu0    1.256637061435917E-06    // N/A^2     Permeability of free space
//`define ep0    8.854187817620389E-12    // F/m       Permativity of free space
`define e      1.60217653E-19            // C         Electron charge
//`define me     9.1093826E-31              // Kg        Electron rest mass
//`define a0     5.29177E-11                // m         Bohr radius

module asdw(T1,T2,R_out1,R_out2);
/*-------T1~2: Actual terminals coressponding to pinned layer and free layer--------*/
        inout T1,T2;        
        electrical T1,T2;
        /*-------Tmz: Virtual terminal for monitoring the Magnetization-------*/
        output R_out1,R_out2;
        
        electrical R_out1,R_out2;
//        magnetization Tmx,Tmy,Tmz;
        ange Th1, Ph1;
        ange Th2, Ph2;
        
///////////////////////////////////////////////////////////////////////////////////////////
/* Simulation time step bound                                                     */
///////////////////////////////////////////////////////////////////////////////////////////

    parameter real Ts = 2p; // Speed-accuracy tradeoff

    parameter integer TN    = 0;
///////////////////////////////////////////////////////////////////////////////////////////
/* TN is a model parameter to enable Thermal fluctuations                                                         */
/*      TN = 1    : Thermal fluctuations is activated                             */
/*      TN = 0   : Thermal fluctuations is NOT activated                         */      
///////////////////////////////////////////////////////////////////////////////////////////

//    parameter integer STT   = 0;

///////////////////////////////////////////////////////////////////////////////////////////
/* JH is a model parameter                                                               */
/*      JH = 1   : Joule heating mechanism is activated                                  */
/*      JH = 0   : Joule heating mechanism is NOT activated                              */      
///////////////////////////////////////////////////////////////////////////////////////////

//    parameter integer JH    = 0;

///////////////////////////////////////////////////////////////////////////////////////////
/* SHAPE is a model parameter                                                            */
/*      SHAPE = 1   : MTJ cross section is circular                                      */
/*      SHAPE = 0   : MTJ cross section is rectangular                                   */      
///////////////////////////////////////////////////////////////////////////////////////////

//    parameter integer SHAPE    = 1;

///////////////////////////////////////////////////////////////////////////////////////////
/* Device parameters                                                             */
///////////////////////////////////////////////////////////////////////////////////////////
//    parameter real Ms0        = 8E5;          
    parameter real Ms0        = 1.2E6;          
//    parameter real alpha1     = 0.01;           
    parameter real alpha1     = 0.02;       
    parameter real gamma      = 2.21276E5;      



///////////////////////////////////////////////////////////////////////////////////////
/* Device size                                                                       */
///////////////////////////////////////////////////////////////////////////////////////    

//    parameter real t_FL       = 2e-9;               /
    parameter real t_FL       = 1.1E-9;               
//    parameter real w_FL       = 70e-9;                //
    parameter real w_FL1       = 170E-9;                //
//    parameter real l_FL       = 140e-9;               // (
    parameter real l_FL1      = 60E-9;               // (

    parameter real w_FL2       = 170E-9;                //
//    parameter real l_FL       = 140e-9;               //
    parameter real l_FL2       = 60E-9;               // (m)

//    parameter real t_ox       = 0.8e-9;               // (m)
    parameter real t_ox       = 1.1E-9;               // (m)

///////////////////////////////////////////////////////////////////////////////////////
/* Magnetoresistance and electrical parameters                                       */
///////////////////////////////////////////////////////////////////////////////////////

//    parameter real     b_h            =     3.28;          //ev       
    parameter real     b_h            =     0.39;          //ev       
//    parameter real     v_h            =     0.75;          //V       
    parameter real     v_h            =     0.75;          //V       

    parameter real     alpha_sd    =     1.4e-5;         // K^(-3/2)
    parameter real    P01        =     0.591;         //59.1%
    parameter real    P02        =    0.591;         //59.1%
    parameter real    S        =    1.5e-12;       //(ohm.(um)^2)^-1 . K^(-4/3)


    parameter real TMR0      = 1.5;            // TMR @ zero voltage

///////////////////////////////////////////////////////////////////////////////////////
/* Effective field parameters                                       */
///////////////////////////////////////////////////////////////////////////////////////    

//    parameter real Ki0      = 2.6E5 * t_FL * 0.1; //0.32e-3         //
    parameter real Ki0      = 0; //0.32e-3         //(J/m^2)  v=0

    parameter real eta_VCMA      = 0;                         // J/(V.m)
//External Field
    parameter real hx_external=    0; //-31830 A/m               external magnetic field along x axis
    parameter real hy_external=    0;                          // A/m               mexternal magnetic field along y axis
    parameter real hz_external=    0;                          // A/m               external magnetic field along z axis

//Demagnetization Fields, Shape anistropy field
//    parameter real Nx=         0.018;//0.0168            X-axis component of the demagnetization facator
//    parameter real Ny=         0.038;//0.0168;         Y-axis component of the demagnetization facator
//    parameter real Nz=         0.94;//0.9664;         Z-axis component of the demagnetization facator

    parameter real Nx=         0.0045;//0.0168            X-axis component of the demagnetization facator
    parameter real Ny=         0.0152;//0.0168;         Y-axis component of the demagnetization facator
    parameter real Nz=         0.9803;//0.9664;         Z-axis component of the demagnetization facator

//////////////////////////////////////////////////////////////////////////////////////////
/* Spin Transfer Torque Parameters                                                                 */
///////////////////////////////////////////////////////////////////////////////////////
    parameter real th_initial1= `Pi/2;                                // Azimuth initial angle (with Z direction)
//    parameter real ph_initial1= 0.001;                                // Elevation angle  (with X direction in X-Y plane)
    parameter real ph_initial1= `Pi-0.1;                                // Elevation angle  (with X direction in X-Y plane)
    parameter real th_initial2= `Pi/2;                                // Azimuth initial angle (with Z direction)
//    parameter real ph_initia2= 0.001;                                // Elevation angle  (with X direction in X-Y plane)
    parameter real ph_initial2= `Pi-0.1;                                // Elevation angle  (with X direction in X-Y plane)

//    parameter real pin_x= 0;                                // pinned layer orientation
//    parameter real pin_y=0;                                // pinned layer orientation
//    parameter real pin_z=1;                                // pinned layer orientation

    parameter real pin_x= 1;                                // pinned layer orientation
    parameter real pin_y=0;                                // pinned layer orientation
    parameter real pin_z=0;                                // pinned layer orientation

//    parameter real zeta= 1;//%0.58;                       // Spin polarized percent STT Coefficent
//    parameter real zeta_FL=    0;                        // Field-like STT torque coefficient

    parameter real zeta_FL= 1;//%0.58;                       // Spin polarized percent STT Coefficent
    parameter real zeta_DL=    0;                        // Field-like STT torque coefficient


    integer seed;                        
    parameter real Ta      = 300;       // Ambient temperature (K)
    
///////////////////////////////////////////////////////////////////////////////////////
// Model computing parameters:                                 //
///////////////////////////////////////////////////////////////////////////////////////
    real gamma_llg, surface1, surface2,volume1,volume2;
    real H_Demx1, H_Demy1, H_Demz1,H_Demx2, H_Demy2, H_Demz2;
    real Hkp1,Hkp2;
    real H_effx1, H_effy1, H_effz1,H_effx2, H_effy2, H_effz2;
    real Hlx1, Hly1, Hlz1,Hlx2, Hly2, Hlz2, Temp, Q1,Q2;
    real AJ1, BJ1,AJ2, BJ2;
    // real AJ_polarizer, BJ_polarizer;
    real st1, ct1, sp1, cp1,st2, ct2, sp2, cp2;
    real Heff_spherical_theta1, Heff_spherical_phi1, dMdt_eff_theta1, dMdt_eff_phi1;
    real Heff_spherical_theta2, Heff_spherical_phi2, dMdt_eff_theta2, dMdt_eff_phi2;
    real T_STT_spherical_pinned_theta1, T_STT_spherical_pinned_phi1, dMdt_STT_pinned_theta1, dMdt_STT_pinned_phi1;
    real T_STT_spherical_pinned_theta2, T_STT_spherical_pinned_phi2, dMdt_STT_pinned_theta2, dMdt_STT_pinned_phi2;
    
// real T_STT_spherical_polarizer_theta, T_STT_spherical_polarizer_phi, dMdt_STT_polarizer_theta, dMdt_STT_polarizer_phi;
    real dMdt_theta1, dMdt_phi1,dMdt_theta2, dMdt_phi2;
    real M_theta1, M_phi1, M_theta2, M_phi2;
    real I_STT,R1,R2;
    real TD,Time1,Time2;
    real C,sin_temp,G_T1,G_T2, G_V, G_SI, P1_T, P2_T, G1,G2;
    real t_ox_angestrom,C0,C1,C2,A_cm2_1,A_cm2_2,G01,G02,TMR_mod,F;
    
///////////////////////////////////////////////////////////////////////////////////////
/* Branches                                                                     */
///////////////////////////////////////////////////////////////////////////////////////
//    branch (T1,T2) res_mtj;
    
///////////////////////////////////////////////////////////////////////////////////////
/* Main                                                                              */
///////////////////////////////////////////////////////////////////////////////////////

analog begin
    
    $bound_step(Ts); // define simuation time step

    @(initial_step) begin
        M_theta1= th_initial1;
        M_phi1=ph_initial1;
        M_theta2=th_initial2;
        M_phi2=ph_initial2;

    
        seed = 25;
        //T1   = 0;
        F=1;
        t_ox_angestrom  =t_ox*1e10;
        surface1          = `Pi*l_FL1*w_FL1/4;                    // (m^2) Surface area
        surface2          = `Pi*l_FL2*w_FL2/4;                    // (m^2) Surface area
                
        volume1          = surface1*t_FL;                        // (m^3) Surface area
        volume2          = surface2*t_FL;                        // (m^3) Surface area
        gamma_llg      = gamma/(1+alpha1*alpha1);          // Hz/T (1/T.m)      Reduced gyromagnetic ratio
        A_cm2_1           = surface1*1e4;
        A_cm2_2           = surface2*1e4;

        G01 = ((3.16*1e10)*sqrt(b_h)/t_ox_angestrom) * exp(-1.025 * t_ox_angestrom * sqrt(b_h)) * A_cm2_1 * F; // 1/ohm
        G02 = ((3.16*1e10)*sqrt(b_h)/t_ox_angestrom) * exp(-1.025 * t_ox_angestrom * sqrt(b_h)) * A_cm2_2 * F; // 1/ohm
//        G0=2.77414e-4;                             //(APPLY kAZ PARAMETERS)

    end
        

    Time2         =     $abstime;
    TD             =     Time2 - Time1;            //Time duration
    Time1         =     Time2;
    
    Temp            =     Ta;


        if (TN == 1)
            begin
                Q1 = sqrt((2 * alpha1 * `KB * Temp / (`mu0*gamma_llg * Ms0 * volume1 * TD)));
                Q2 = sqrt((2 * alpha1 * `KB * Temp / (`mu0*gamma_llg * Ms0 * volume2 * TD)));
            end
        else
            begin
                Q1 = 0;
                Q2 = 0;
            end
    
        Hlx1  = $rdist_normal(seed,0,Q1);        //$dist_normal (seed, mean, standard_deviation) ; seed const means get const random value
        Hly1  = $rdist_normal(seed,0,Q1);
        Hlz1  = $rdist_normal(seed,0,Q1);
        Hlx2  = $rdist_normal(seed,0,Q2);        //$dist_normal (seed, mean, standard_deviation) ; seed const means get const random value
        Hly2  = $rdist_normal(seed,0,Q2);
        Hlz2  = $rdist_normal(seed,0,Q2);

        st1   = sin(Ang(Th1));
        ct1   = cos(Ang(Th1));
        sp1   = sin(Ang(Ph1));
        cp1   = cos(Ang(Ph1));    

        st2   = sin(Ang(Th2));
        ct2   = cos(Ang(Th2));
        sp2   = sin(Ang(Ph2));
        cp2   = cos(Ang(Ph2));    
    
// as H_dem = - Ms (N(vector).M(vector) (Nx,Ny,Nz). (M_theta,Mphi) cross product
        H_Demx1=         Nx*Ms0 * st1 * cp1 ;
        H_Demy1=         Ny*Ms0 * st1 * sp1;
        H_Demz1=         Nz*Ms0 * ct1;
        H_Demx2=         Nx*Ms0 * st1 * cp1 ;
        H_Demy2=         Ny*Ms0 * st1 * sp1;
        H_Demz2=         Nz*Ms0 * ct1;
//Anisotropy Field, Interfacial
        Hkp1=            (2*Ki0/(t_FL*`mu0*Ms0)-2*eta_VCMA*V(T1,T2)/(t_FL*`mu0*Ms0*t_ox))*ct1;     // The effective anistropy with VCMA effect
        Hkp2=            (2*Ki0/(t_FL*`mu0*Ms0)-2*eta_VCMA*V(T1,T2)/(t_FL*`mu0*Ms0*t_ox))*ct2;     // The effective anistropy with VCMA effect
//Effective anistropy field with VCMA
        H_effx1=       Hlx1 + hx_external- H_Demx1;
        H_effy1=       Hly1 + hy_external- H_Demy1;
        H_effz1=       Hlz1 + hz_external- H_Demz1 + Hkp1;

        H_effx2=       Hlx2 + hx_external- H_Demx2;
        H_effy2=       Hly2 + hy_external- H_Demy2;
        H_effz2=       Hlz2 + hz_external- H_Demz2 + Hkp2;

// write disturbance
//Spin Transfer Torque components
             
        AJ1=                   (`hbar*zeta_FL*I(T1,T2)/(2*`e*`mu0*Ms0*surface1*t_FL));  //0; %0.3e4;                       //A/m STT coefficient Normalized
        BJ1=                   (`hbar*zeta_DL*I(T1,T2)/(2*`e*`mu0*Ms0*surface1*t_FL));                            //  Normalized     
        AJ2=                   (`hbar*zeta_FL*I(T1,T2)/(2*`e*`mu0*Ms0*surface2*t_FL));  //0; %0.3e4;                       //A/m STT coefficient Normalized
        BJ2=                   (`hbar*zeta_DL*I(T1,T2)/(2*`e*`mu0*Ms0*surface2*t_FL));                            //  Normalized    

    //

    T_STT_spherical_pinned_theta1=        pin_x * ct1 * cp1 + pin_y * ct1 * sp1 - pin_z * st1;
    T_STT_spherical_pinned_phi1=      -pin_x * sp1 + pin_y * cp1;
    T_STT_spherical_pinned_theta2=        pin_x * ct2 * cp2 + pin_y * ct2 * sp2 - pin_z * st2;
    T_STT_spherical_pinned_phi2=      -pin_x * sp2 + pin_y * cp2;


// Heff_spherical =   @(t,M) [cos(M(1)).* cos(M(2)), cos(M(1)).*sin(M(2)),    -sin(M(1)); -sin(M(2)), cos(M(2)), 0] * H(t,M);    %A/m Magnetic Field Strength normalized
    Heff_spherical_theta1=               H_effx1 * ct1 * cp1 + H_effy1 * ct1 * sp1 - H_effz1 * st1;
    Heff_spherical_phi1=                -H_effx1 * sp1 + H_effy1 * cp1;
    Heff_spherical_theta2=               H_effx2 * ct2 * cp2 + H_effy2 * ct2 * sp2 - H_effz2 * st2;
    Heff_spherical_phi2=                -H_effx2 * sp2 + H_effy2 * cp2;

    dMdt_eff_theta1=             alpha1 * Heff_spherical_theta1 + Heff_spherical_phi1;
    dMdt_eff_phi1=                -Heff_spherical_theta1/st1 + alpha1 * Heff_spherical_phi1 / st1;
    dMdt_eff_theta2=             alpha1 * Heff_spherical_theta2 + Heff_spherical_phi2;
    dMdt_eff_phi2=                -Heff_spherical_theta2/st2 + alpha1 * Heff_spherical_phi2 / st2;    

    dMdt_STT_pinned_theta1=          (-AJ1 - alpha1 * BJ1) * T_STT_spherical_pinned_theta1 + (alpha1 * AJ1 - BJ1) * T_STT_spherical_pinned_phi1;
    dMdt_STT_pinned_phi1=         (BJ1 - alpha1 * AJ1) * T_STT_spherical_pinned_theta1/st1 + (- AJ1 - alpha1 * BJ1) * T_STT_spherical_pinned_phi1 / st1;
    dMdt_STT_pinned_theta2=          (-AJ2 - alpha1 * BJ2) * T_STT_spherical_pinned_theta2 + (alpha1 * AJ2 - BJ2) * T_STT_spherical_pinned_phi2;
    dMdt_STT_pinned_phi2=         (BJ2 - alpha1 * AJ2) * T_STT_spherical_pinned_theta2/st2 + (- AJ2 - alpha1 * BJ2) * T_STT_spherical_pinned_phi2 / st2;

    dMdt_theta1=         gamma_llg * (dMdt_eff_theta1 + dMdt_STT_pinned_theta1 );
    dMdt_phi1=         gamma_llg * (dMdt_eff_phi1 + dMdt_STT_pinned_phi1 );
    dMdt_theta2=         gamma_llg * (dMdt_eff_theta2 + dMdt_STT_pinned_theta2 );
    dMdt_phi2=         gamma_llg * (dMdt_eff_phi2 + dMdt_STT_pinned_phi2 );    
    
    
//idtmod(integrand x, initial condition y0, modulus m, offset b, tolerance) preferable than just idt
    M_theta1 =  idtmod(dMdt_theta1,th_initial1,2*`Pi);    
    M_phi1   =  idtmod(dMdt_phi1,ph_initial1,2*`Pi);
    M_theta2 =  idtmod(dMdt_theta2,th_initial2,2*`Pi);    
    M_phi2   =  idtmod(dMdt_phi2,ph_initial2,2*`Pi);


// MTJ resistance

    C          =     1.387e-4 * t_ox_angestrom/sqrt(b_h); //Check the parameters later
    sin_temp =      sin(C*Temp);
    G_T1      =     G01* (C*Temp)/(sin_temp);
    G_T2      =     G02* (C*Temp)/(sin_temp);
    G_SI        =     S*pow(Temp,(4/3));            //
//Method1    
    P1_T    =     P01*(1-alpha_sd*pow(Temp,1.5));
    P2_T    =     P02*(1-alpha_sd*pow(Temp,1.5));

    G1    =     G_T1*(1+P1_T*P2_T*cp1 + G_SI);    //
    G2    =     G_T2*(1+P1_T*P2_T*cp2 + G_SI);    //
    R1     = 1 / (G1);
    R2     = 1 / (G2);  



//    I(T1,T2) <+ V(T1,T2)/R;
     V(T1,T2) <+ I(T1,T2) * (R1+R2);
    V(R_out1) <+  R1;
    V(R_out2) <+  R2;
    Ang(Th1) <+ M_theta1;
    Ang(Ph1) <+ M_phi1;
    Ang(Th2) <+ M_theta2;
    Ang(Ph2) <+ M_phi2;

    //

    
    end // end of analog

endmodule   // end of module

the input.scs


simulator lang=spectre
global 0
parameters I=600u

// View name: schematic
I1 (0 Vout) isource dc=I type=dc
I5 (Vout 0 Rout1 Rout2) asdw Ts=2e-12 TN=0 Ms0=1.2e+06 alpha1=0.02 \
        gamma=221276 t_FL=1.1e-09 w_FL1=1.7e-07 l_FL1=6e-08 w_FL2=1.5e-07 \
        l_FL2=5e-08 t_ox=1.1e-09 b_h=0.39 v_h=0.75 alpha_sd=1.4e-05 \
        P01=0.591 P02=0.591 S=1.5e-12 TMR0=1.5 Ki0=0 eta_VCMA=0 \
        hx_external=0 hy_external=0 hz_external=0 Nx=0.0045 Ny=0.0152 \
        Nz=0.9803 th_initial1=1.5708 ph_initial1=0.1 th_initial2=1.5708 \
        ph_initial2=0.1 pin_x=1 pin_y=0 pin_z=0 zeta_FL=1 zeta_DL=0 Ta=300
simulatorOptions options reltol=1e-3 vabstol=1e-6 iabstol=1e-12 temp=27 \
    tnom=27 scalem=1.0 scale=1.0 gmin=1e-12 rforce=1 maxnotes=5 maxwarns=5 \
    digits=5 cols=80 pivrel=1e-3 sensfile="../psf/sens.output" \
    checklimitdest=psf
tran tran stop=800n param=I param_vec=[0 0 30n 450u 50n 0 70n 600u 100n 0 \
    150n -620u 170n 0 200n -630u 250n 0 280n 450u 300n 0 330n -630u 360n \
    0] step=100000 write="spectre.ic" writefinal="spectre.fc" \
    annotate=status maxiters=5
finalTimeOP info what=oppoint where=rawfile
modelParameter info what=models where=rawfile
element info what=inst where=rawfile
outputParameter info what=output where=rawfile
designParamVals info what=parameters where=rawfile
primitives info what=primitives where=rawfile
subckts info what=subckts where=rawfile
save I5:T1
saveOptions options save=allpub
ahdl_include "/Directory/asdw/veriloga/veriloga.va"

The circuit

  • Cancel
Parents
  • AQoutb
    AQoutb over 4 years ago

    The model seems complicated but in reality it is very simple, it just has a lot of variables. But it end up to be just an integrator using idtmod function.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to AQoutb

    First of all, why are you changing the current via the dynamic parameters mechanism for the transient analysis? That is a very abrupt way of causing instantaneous current changes which will very likely lead to convergence issues in the best behaved models. Instantaneous changes (particularly of current) are very hard for the simulator to try to solve (any circuit simulator), so are best avoided.

    Instead why not use a PWL source - as done here - I made the step size a variable (STEP) to allow you to alter that (I also set allbrkpts=yes as that will help the simulator deal with the discontinuities in the derivatives that even this approach would cause - I still would not recommend this approach).

    simulator lang=spectre
    global 0
    parameters I=600u STEP=0.1n
    
    // View name: schematic
    //I1 (0 Vout) isource dc=I type=dc
    I1 (0 Vout) isource type=pwl wave=[0 0 (30n-STEP) 0 30n 450u \
        (50n-STEP) 450u 50n 0 (70n-STEP) 0 70n 600u (100n-STEP) 600u 100n 0 \
        (150n-STEP) 0 150n -620u (170n-STEP) -620u 170n 0 (200n-STEP) 0 \
        200n -630u (250n-STEP) -630u 250n 0 \
        (280n-STEP) 0 280n 450u (300n-STEP) 450u 300n 0 (330n-STEP) 0 330n -630u \
        (360n-STEP) -630u 360n 0] allbrkpts=yes
    I5 (Vout 0 Rout1 Rout2) asdw Ts=2e-12 TN=0 Ms0=1.2e+06 alpha1=0.02 \
            gamma=221276 t_FL=1.1e-09 w_FL1=1.7e-07 l_FL1=6e-08 w_FL2=1.5e-07 \
            l_FL2=5e-08 t_ox=1.1e-09 b_h=0.39 v_h=0.75 alpha_sd=1.4e-05 \
            P01=0.591 P02=0.591 S=1.5e-12 TMR0=1.5 Ki0=0 eta_VCMA=0 \
            hx_external=0 hy_external=0 hz_external=0 Nx=0.0045 Ny=0.0152 \
            Nz=0.9803 th_initial1=1.5708 ph_initial1=0.1 th_initial2=1.5708 \
            ph_initial2=0.1 pin_x=1 pin_y=0 pin_z=0 zeta_FL=1 zeta_DL=0 Ta=300
    simulatorOptions options reltol=1e-3 vabstol=1e-6 iabstol=1e-12 temp=27 \
        tnom=27 scalem=1.0 scale=1.0 gmin=1e-12 rforce=1 maxnotes=5 maxwarns=5 \
        digits=5 cols=80 pivrel=1e-3 sensfile="../psf/sens.output" \
        checklimitdest=psf 
    //tran tran stop=800n param=I param_vec=[0 0 30n 450u 50n 0 70n 600u 100n 0 \
    //    150n -620u 170n 0 200n -630u 250n 0 280n 450u 300n 0 330n -630u 360n \
    //    0] step=100000 write="spectre.ic" writefinal="spectre.fc" \
    //    annotate=status maxiters=5 
    tran tran stop=800n write="spectre.ic" writefinal="spectre.fc" \
        annotate=status maxiters=5 
    finalTimeOP info what=oppoint where=rawfile
    modelParameter info what=models where=rawfile
    element info what=inst where=rawfile
    outputParameter info what=output where=rawfile
    designParamVals info what=parameters where=rawfile
    primitives info what=primitives where=rawfile
    subckts info what=subckts where=rawfile
    save I5:T1 
    saveOptions options save=allpub

    As you can see from doing this, it converges, but complains - and is quite sensitive to the STEP size at which convergence issues re-arise.

    Rather than me trying to debug your model (hard to do without sufficient time which is not really what responding on the community-assisted forum is about - I do this in my spare time), I would suggest that you run spectre with the +diagnose option enabled on the command line. In recent IC versions you can turn this on via the Setup->Environment form in ADE (there should be a diagnose switch) or if it's not there, you can type in "+diagnose" in the userCmdLineOptions field on Setup->Environment. Do this having changed the current source to a PWL source rather than using dynamic parameter, and it will start to pinpoint some problems with your model, and convergence issues caused by the model.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AQoutb
    AQoutb over 4 years ago in reply to Andrew Beckett

    I am not sure how to update the input.scs file with your new posted one. if I try to run from ADE it keeps updating the input.scs file with the previous version. (sorry if this sounds silly question)

    I actually do not want to do a sudden update in current but I just got tired of trying multiple ways. I would like to run the simulation over different amplitudes (current pulses of different amplitudes).

    I actually in another simulation did a Verilog-A model of a multiplixer that select each DC current pulse at a time and it seems, this sudden change in current is driving the simulation crazy.

    What do you suggest me?

    Regarding the +diagnose, I was not able to find it but I found on some other blog to run the simulation mode APS  or XPS MS, I did this but the errors or the warnings mentioned were about a sudden change in the value that the simulation is not able to trace.

    I have Version IC6.1.7-64b.78

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • AQoutb
    AQoutb over 4 years ago in reply to Andrew Beckett

    I am not sure how to update the input.scs file with your new posted one. if I try to run from ADE it keeps updating the input.scs file with the previous version. (sorry if this sounds silly question)

    I actually do not want to do a sudden update in current but I just got tired of trying multiple ways. I would like to run the simulation over different amplitudes (current pulses of different amplitudes).

    I actually in another simulation did a Verilog-A model of a multiplixer that select each DC current pulse at a time and it seems, this sudden change in current is driving the simulation crazy.

    What do you suggest me?

    Regarding the +diagnose, I was not able to find it but I found on some other blog to run the simulation mode APS  or XPS MS, I did this but the errors or the warnings mentioned were about a sudden change in the value that the simulation is not able to trace.

    I have Version IC6.1.7-64b.78

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to AQoutb

    I wasn't suggesting that you replace the input.scs - I was showing that you run with the current source being a PWL source (so use isource from analogLib, and specify the source type as "pwl", or use ipwl from analogLib - they end up the same).

    In the version you're using, it's this on the Setup->Environment form:

    I expect your multiplexer also has instantaneous changes in the model (or they are too discontinuous). Sudden discontinuities are not physical, and simulators are trying to solve a set of equations and these need to be somewhat physical for there to be a chance of the maths working... (gross over-simplification; you might want to read:

    • The Designer's Guide to SPICE and Spectre
    • The Designer's Guide to Verilog-AMS

    Andrew.

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information