+ Post New Thread
Results 1 to 9 of 9
  1. #1
    Newbie level 4
    Points: 42, Level: 1

    Join Date
    Feb 2016
    Posts
    7
    Helped
    0 / 0
    Points
    42
    Level
    1

    no convergence in dc sweep curves error

    Hi, I'm trying to simulate a ring oscillator with variation block on its parameters in hspice, but I get " no convergence in dc sweep curves" errors, I tried some convergence solutions, but no success. These are the codes & results:
    Code:
    V1 vdd 0 0.9V
    V2 vss 0 0V
    
    .PARAM bias=1m
     MN11 vss 15 11 vss N1 L=120n W=280n x=-7000u y=2000u
     MP11 vdd 15 11 vdd P1 L=120n W=980n x=-7000u y=6000u
     MN12 vss 11 12 vss N1 L=120n W=280n x=-5500u y=2000u
     MP12 vdd 11 12 vdd P1 L=120n W=980n x=-5500u y=6000u
     MN13 vss 12 13 vss N1 L=120n W=280n x=-4000u y=2000u
     MP13 vdd 12 13 vdd P1 L=120n W=980n x=-4000u y=6000u
     MN14 vss 13 14 vss N1 L=120n W=280n x=-2500u y=2000u
     MP14 vdd 13 14 vdd P1 L=120n W=980n x=-2500u y=6000u
     MN15 vss 14 15 vss N1 L=120n W=280n x=-1000u y=2000u
     MP15 vdd 14 15 vdd P1 L=120n W=980n x=-1000u y=6000u
    
    
    .MODEL  N1  NMOS  LEVEL = 54
    .MODEL  P1  PMOS  LEVEL = 54
    
    
    .Variation
      .Global_Variation
      Parameter var=N() Y='180 + 8.02 * var' Z='17.5 + 0.37 * var'
      Nmos N1
     + VTH0=Perturb('Y')
      Pmos P1
     + VTH0=Perturb('Y')
    .End_Global_Variation
    .Local_Variation
      Parameter var=N() T='11.46 * var' U='0.54 * var'
      Nmos N1
     + VTH0=Perturb('T')
      Pmos P1
    + VTH0=Perturb('T')
    .End_Local_Variation
    
    .End_Variation
    
    .op
    
    .dc bias 1m 1m 1m monte=10
    .print I(MN11) I(MN12)
    .measure dc I11 find I(MN11) at=1m
    .measure dc I12 find I(MN12) at=1m
    
    .END
    The errors:
    Code:
     sweep: monte_carlo     monte_carlo1     begin, #sweeps =  10
     output: ring40.ms0
     sweep: dc dc1    begin, #sweeps=   1 cpu clock=  6.41E+00
     dcop: begin pseudo transient
     dcop: ...failed with iteration exhausted
     dcop: end pseudo transient
     dcop: gshunt =      0.1000000E-03
     dcop: gshunt =      0.5050000E-03
     dcop: gshunt =      0.7277500E-03
     dcop: gshunt =      0.8502625E-03
     dcop: gshunt =      0.9176444E-03
     dcop: gshunt =      0.9547044E-03
     dcop: gshunt =      0.9750874E-03
     dcop: gshunt =      0.9862981E-03
     dcop: gshunt =      0.9924639E-03
     dcop: gshunt =      0.9958552E-03
     dcop: gshunt =      0.9977203E-03
     dcop: gshunt =      0.9987462E-03
     dcop: gshunt =      0.9993104E-03
     dcop: gshunt =      0.9996207E-03
     dcop: gshunt =      0.9997914E-03
     dcop: gshunt =      0.9998853E-03
     dcop: gshunt =      0.9999369E-03
     dcop: gshunt =      0.9999653E-03
     dcop: gshunt =      0.9999809E-03
     dcop: gshunt =      0.9999895E-03
     dcop: gshunt =      0.9999942E-03
     dcop: gshunt =      0.9999968E-03
     dcop: gshunt =      0.9999983E-03
     dcop: gshunt =      0.9999990E-03
     dcop: gshunt =      0.9999995E-03
     dcop: gshunt =      0.9999997E-03
     dcop: gshunt =      0.9999998E-03
     dcop: gshunt =      0.9999999E-03
     **error** no convergence in dc sweep curves at  1.00000E-03
     sweep: dc dc1    end,  cpu clock=  1.27E+01 peak memory=        52 mb
     output: ring40.ms0
     sweep: dc dc2    begin, #sweeps=   1 cpu clock=  1.27E+01
     dcop: begin pseudo transient
     dcop: ...failed with iteration exhausted
     dcop: end pseudo transient
     dcop: gshunt =      0.1000000E-03
     dcop: gshunt =      0.5050000E-03
     dcop: gshunt =      0.7277500E-03
     dcop: gshunt =      0.8502625E-03
     dcop: gshunt =      0.9176444E-03
     dcop: gshunt =      0.9547044E-03
     dcop: gshunt =      0.9750874E-03
     dcop: gshunt =      0.9862981E-03
     dcop: gshunt =      0.9924639E-03
     dcop: gshunt =      0.9958552E-03
     dcop: gshunt =      0.9977203E-03
     dcop: gshunt =      0.9987462E-03
     dcop: gshunt =      0.9993104E-03
     dcop: gshunt =      0.9996207E-03
     dcop: gshunt =      0.9997914E-03
     dcop: gshunt =      0.9998853E-03
     dcop: gshunt =      0.9999369E-03
     dcop: gshunt =      0.9999653E-03
     dcop: gshunt =      0.9999809E-03
     dcop: gshunt =      0.9999895E-03
     dcop: gshunt =      0.9999942E-03
     dcop: gshunt =      0.9999968E-03
     dcop: gshunt =      0.9999983E-03
     dcop: gshunt =      0.9999990E-03
     dcop: gshunt =      0.9999995E-03
     dcop: gshunt =      0.9999997E-03
     dcop: gshunt =      0.9999998E-03
     dcop: gshunt =      0.9999999E-03
     **error** no convergence in dc sweep curves at  1.00000E-03

    •   AltAdvertisment

        
       

  2. #2
    Super Moderator
    Points: 51,484, Level: 55
    Achievements:
    7 years registered
    erikl's Avatar
    Join Date
    Sep 2008
    Location
    Germany
    Posts
    8,064
    Helped
    2642 / 2642
    Points
    51,484
    Level
    55

    Re: no convergence in dc sweep curves error

    Just guessing:

    1. I don't see where bias is connected to

    2. Your bias sweep
    Code:
    .dc bias 1m 1m 1m ...
    means to step bias from 1mV to 1mV with steps of 1mV ???



  3. #3
    Super Moderator
    Points: 50,445, Level: 54

    Join Date
    Apr 2011
    Location
    Minneapolis, Minnesota, USA
    Posts
    12,407
    Helped
    2464 / 2464
    Points
    50,445
    Level
    54

    Re: no convergence in dc sweep curves error

    Sometimes it helps to install high ohm resistors across troublesome nodes, or from a node to ground, etc. The high-ohm resistors permit a little current flow to exist, instead of no current flow.

    I believe the simulator has a more drastic decision to turn On a component that is completely Off, compared to when that component is already On a little bit. So the harder decisions require more iterations to reach convergence.



  4. #4
    Newbie level 4
    Points: 42, Level: 1

    Join Date
    Feb 2016
    Posts
    7
    Helped
    0 / 0
    Points
    42
    Level
    1

    Re: no convergence in dc sweep curves error

    Thanks erikl.
    1.I tried to do what is said in hspice reference. Chapter Monte Carlo statistical simulation.
    2.I tried with other values, but no success.

    - - - Updated - - -

    The goal of my simulations is that I want to measure leakage current of a ring oscillator with variation on Vth, in 45 nm node technology. variation is a gaussian distribution with a mean and sigma, ( T & Y in the code). I do a monte carlo simulation as is mentioned in the code. In this code I want to try for measuring current. If the result will be correct, then I try for leakage current. So the result must be a distribution of leakage currents.
    In the meantime I have another question: I want to measure leakage current, I searched & found these 3 threads, I wonder which one is applicable for my case?

    https://www.edaboard.com/thread75617.html
    or
    https://www.edaboard.com/thread161766.html
    or
    https://www.edaboard.com/thread320119.html



    •   AltAdvertisment

        
       

  5. #5
    Super Moderator
    Points: 51,484, Level: 55
    Achievements:
    7 years registered
    erikl's Avatar
    Join Date
    Sep 2008
    Location
    Germany
    Posts
    8,064
    Helped
    2642 / 2642
    Points
    51,484
    Level
    55

    Re: no convergence in dc sweep curves error

    Quote Originally Posted by liz16 View Post
    In the meantime I have another question: I want to measure leakage current, I searched & found these 3 threads, I wonder which one is applicable for my case?

    https://www.edaboard.com/thread75617.html
    or
    https://www.edaboard.com/thread161766.html
    or
    https://www.edaboard.com/thread320119.html
    The last one, i.e. its last post



  6. #6
    Newbie level 4
    Points: 42, Level: 1

    Join Date
    Feb 2016
    Posts
    7
    Helped
    0 / 0
    Points
    42
    Level
    1

    Re: no convergence in dc sweep curves error

    Hi, I changed the code a bit:

    Code:
    *40ring
    V1 vdd 0 0.9V
    V2 vss 0 0V
    
    .PARAM bias=1m
    MN11 vss 15 11 vss N1 L=120n W=280n x=-7000u y=2000u
    MP11 vdd 15 11 vdd P1 L=120n W=980n x=-7000u y=6000u
    MN12 vss 11 12 vss N1 L=120n W=280n x=-5500u y=2000u
    MP12 vdd 11 12 vdd P1 L=120n W=980n x=-5500u y=6000u
    MN13 vss 12 13 vss N1 L=120n W=280n x=-4000u y=2000u
    MP13 vdd 12 13 vdd P1 L=120n W=980n x=-4000u y=6000u
    MN14 vss 13 14 vss N1 L=120n W=280n x=-2500u y=2000u
    MP14 vdd 13 14 vdd P1 L=120n W=980n x=-2500u y=6000u
    MN15 vss 14 15 vss N1 L=120n W=280n x=-1000u y=2000u
    MP15 vdd 14 15 vdd P1 L=120n W=980n x=-1000u y=6000u
    .ic v(11)=0.0003
    
    
    
    .MODEL  N1  NMOS  LEVEL = 54
    
    
    .MODEL  P1  PMOS  LEVEL = 54
    
    
    
    .Variation
      .Global_Variation
          Parameter var=N() Y='180 + 8.02 * var' Z='17.5 + 0.37 * var'
          Nmos N1
      + VTH0=Perturb('Y')
          Pmos P1
      + VTH0=Perturb('Y')
      .End_Global_Variation
      .Local_Variation
          Parameter var=N() T='11.46 * var' U='0.54 * var'
          Nmos N1
      + VTH0=Perturb('T')
          Pmos P1
      + VTH0=Perturb('T')
      .End_Local_Variation
    
    .End_Variation
    
    
    .dc bias 1 1 1 monte=10
    .print I(MN11) I(MP11)
    .print I(MN12) I(MP12)
    .print I(MN13) I(MP13)
    .print I(MN14) I(MP14)
    .print I(MN15) I(MP15)
    
    .END
    and Hspice tried one of its methods, I think it was successful. This is the result:

    Code dot - [expand]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    
    MONTE CARLO DEFINITIONS
     
     
    Random number generator is MOA            , and seed =      1, stream =   1
     
     Only variation block is active, to enable agauss format variation, set option sampling_method = SRS.
     
    Global variations:    model               parameter
                          n1                  vth0            
                          p1                  vth0            
     
    Local variations:     model               parameter
                          n1                  vth0            
                          p1                  vth0            
     **info** set option symb=1 internally to help for convergence.
     *****************************************************************
     ******  option summary
     ******
     runlvl  = 3         bypass  = 2         
     **warning**(n1:mn11)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp11)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn12)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp12)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn13)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp13)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn14)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp14)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn15)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp15)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning** the perturbation  180.00     on the first sample is not zero.
     **warning** the perturbation  180.00     on the first sample is not zero.
     **warning**(n1:mn11)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn12)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn13)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn14)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn15)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp11)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp12)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp13)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp14)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp15)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     ** Warning ** Convergence problem in the first
                   dc sweep value, Pseudo tran is tried.
     
     **info** number of iteration exceeds min(7000, 20*itl1)=  4000 in pseudo
     tran process (converge=1 process). Usually this happens when the
     models are discontinous, or there are uninitialized bi-stable cells
     (flip-flop) in the circuit. By setting options dcon=-1 and converge=-1
     you can disable auto convergence process. Retry the run, non-convergence
     diagnostics will provide useful information about the nodes and devices
     which can be used to work around the non-convergence problems.
      *** final try failed *** 
     ** Warning ** Convergence problem in the first
                 dc sweep value, gmath ramping is tried.
     
     
     [COLOR="#FF0000"]**info** op convergence successful with gmath ramping method[/COLOR]
     
     ******  
     *40ring
     
      ******  dc transfer curves tnom=  25.000 temp=  25.000 *****
     
       *** monte carlo  index =            1 ***
     
    x
     
          bias      current      current    
                       mn11         mp11    
        1.00000    -6.236e-28    106.8910m  
    y
    -----------------------------------------------
    x
     
          bias      current      current    
                       mn12         mp12    
        1.00000       0.         111.9755m  
    y
    -----------------------------------------------
    x
     
          bias      current      current    
                       mn13         mp13    
        1.00000    -6.762e-28    112.2295m  
    y
    -----------------------------------------------
    x
     
          bias      current      current    
                       mn14         mp14    
        1.00000    -7.038e-28    111.7191m  
    y
    -----------------------------------------------
    x
     
          bias      current      current    
                       mn15         mp15    
        1.00000    -6.348e-28    167.3795m  
    y
    -----------------------------------------------
     **warning**(n1:mn11)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp11)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn12)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp12)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn13)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp13)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn14)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp14)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn15)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp15)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn11)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn12)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn13)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn14)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(n1:mn15)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp11)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp12)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp13)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp14)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp15)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     ** Warning ** Convergence problem in the first
                   dc sweep value, Pseudo tran is tried.
     
     **info** number of iteration exceeds min(7000, 20*itl1)=  4000 in pseudo
     tran process (converge=1 process). Usually this happens when the
     models are discontinous, or there are uninitialized bi-stable cells
     (flip-flop) in the circuit. By setting options dcon=-1 and converge=-1
     you can disable auto convergence process. Retry the run, non-convergence
     diagnostics will provide useful information about the nodes and devices
     which can be used to work around the non-convergence problems.
      *** final try failed *** 
     ** Warning ** Convergence problem in the first
                 dc sweep value, gmath ramping is tried.
     
    [COLOR="#FF0000"]
     **info** op convergence successful with gmath ramping method[/COLOR]
     
     
       *** monte carlo  index =            2 ***
     
    x
     
          bias      current      current    
                       mn11         mp11    
        1.00000    -6.861e-28    210.2369m  
    y
    -----------------------------------------------
    x
     
          bias      current      current    
                       mn12         mp12    
        1.00000       0.         119.6979m  
    y
    -----------------------------------------------
    x
     
          bias      current      current    
                       mn13         mp13    
        1.00000    -6.486e-28    210.2991m  
    y
    -----------------------------------------------
    x
     
          bias      current      current    
                       mn14         mp14    
        1.00000    -6.762e-28    170.7002m  
    y
    -----------------------------------------------
    x
     
          bias      current      current    
                       mn15         mp15    
        1.00000    -7.038e-28    205.4880m  
    y

    Are the result correct? Can I rely on them?
    In the meantime, it was said in the hspice reference, that for measuring op values such as current, voltage,... in monte carlo simulation, we must use .MEASURE command. I tried with this command, but no success:

    Code:
    .Variation
      .Global_Variation
          Parameter var=N() Y='180 + 8.02 * var' Z='17.5 + 0.37 * var'
          Nmos N1
      + VTH0=Perturb('Y')
          Pmos P1
      + VTH0=Perturb('Y')
      .End_Global_Variation
      .Local_Variation
          Parameter var=N() T='11.46 * var' U='0.54 * var'
          Nmos N1
      + VTH0=Perturb('T')
          Pmos P1
      + VTH0=Perturb('T')
      .End_Local_Variation
    
    .End_Variation
    
    
    .dc bias 1 1 1 monte=10
    .measure dc I11 find I(MN11) at=1m
    .measure dc I12 find I(MP12) at=1m
    
    .END
    result of .MEASURE command:

    Code dot - [expand]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    **warning**(p1:mp11)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp12)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp13)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp14)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp15)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     ** Warning ** Convergence problem in the first
                   dc sweep value, Pseudo tran is tried.
     
     **info** number of iteration exceeds min(7000, 20*itl1)=  4000 in pseudo
     tran process (converge=1 process). Usually this happens when the
     models are discontinous, or there are uninitialized bi-stable cells
     (flip-flop) in the circuit. By setting options dcon=-1 and converge=-1
     you can disable auto convergence process. Retry the run, non-convergence
     diagnostics will provide useful information about the nodes and devices
     which can be used to work around the non-convergence problems.
      *** final try failed *** 
     ** Warning ** Convergence problem in the first
                 dc sweep value, gmath ramping is tried.
     
     
     **info** op convergence successful with gmath ramping method
     
     
       *** monte carlo  index =            8 ***
     
    [COLOR="#FF0000"]   i11= failed
       i12= failed[/COLOR]
     **warning**(n1:mn11)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.
     **warning**(p1:mp11)Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.

    With using .Measure command, hspice will tell us the sigma & mean & other statistical information of output like:

    Code:
     **info** op convergence successful with gmath ramping method
    
    
       *** monte carlo  index =           10 ***
    
       i11= failed
       i12= failed
    
       meas_variable = i11
       mean  =   0.       varian =   0.     
       sigma =   0.       avgdev =   0.     
       max   =   0.       min    =   0.     
        1-sigma =   0.      median =   0.     
    
       meas_variable = i12
       mean  =   0.       varian =   0.     
       sigma =   0.       avgdev =   0.     
       max   =   0.       min    =   0.     
        1-sigma =   0.      median =   0.     
    
              ***** job concluded
    That in my case, as is shown, all are 0.

    I'm confused about this
    Last edited by BradtheRad; 7th February 2016 at 07:03. Reason: corrected code formatting



  7. #7
    Advanced Member level 5
    Points: 38,224, Level: 47

    Join Date
    Mar 2008
    Location
    USA
    Posts
    6,181
    Helped
    1792 / 1792
    Points
    38,224
    Level
    47

    Re: no convergence in dc sweep curves error

    You do know that the whole point of an oscillator is that
    it has no stable DC solution, right? And that to simulate
    such critters, you often need to use some methods like
    an asserted initial condition that is released, or a kick-start,
    and time domain or quasi-AC, time domain based schemes
    like PSS?

    Now some oscillators, especially ones with low gain, can be
    made to give a DC solution. But this is simulator being lazy,
    pretty much, and you can't count on a natural free running
    oscillator to give the same result if anything minor changes.



    •   AltAdvertisment

        
       

  8. #8
    Newbie level 4
    Points: 42, Level: 1

    Join Date
    Feb 2016
    Posts
    7
    Helped
    0 / 0
    Points
    42
    Level
    1

    Re: no convergence in dc sweep curves error

    So, what do I have to do?can you explain more?

    I know that it doesn't have a stable dc status, I add the initial condition 0.003 to that. I know that in the monte carlo simulation, we have to do DC/AC/TRAN simulation. For getting operating point, we need to define a PARAM like that bias and then .dc bias command to measure the operating point. The following is hspice example (it's located in demo/hspice/variability/opampmc.sp folder that hspice is installed):

    Code:
    .GLOBAL gnda vdda
    .PARAM vdd=2.5 vin=vdd/2 k=2
    
    .subckt opamp gnda inn inp out vdda nmosbulk pmosbulk
    mn1 net031 inn net044 nmosbulk snps20N L='k*0.5u' W='k*3.5u' M=4
    mn2 net18 inp net044 nmosbulk snps20N L='k*0.5u' W='k*3.5u' M=4
    mp3 net031 net031 vdda pmosbulk snps20P L='k*0.5u' W='k*4.5u' M=4
    mp4 net18 net031 vdda pmosbulk snps20P L='k*0.5u' W='k*4.5u' M=4
    mp5 out net18 vdda pmosbulk snps20P L=400e-9 W=10e-6 M=3
    mn8 net0148 net0148 gnda nmosbulk snps20N L=3e-6 W=18e-6 M=5
    mn7 net044 net0148 gnda nmosbulk snps20N L=3e-6 W=18e-6 M=2
    mn6 out net0148 gnda nmosbulk snps20N L=3e-6 W=18e-6 M=12
    ccomp out net058 900e-15
    rcomp net18 net058 7e3
    r0 net0148 vdda 1e6
    
    .ends opamp
    
    c0 in_neg 0 1m
    c1 out 0 5e-12
    r1 0 out 1e6
    r0 in_neg out 10e6
    xi82 gnda in_neg in_pos out vdda gnda vdda opamp
    v2 0 gnda DC=0
    v1 in_pos 0 DC=vin AC 1
    v0 vdda 0 DC=vdd
    
    .variation
      .global_variation
         nmos snps20N vth0=0.07 u0=10 %
         pmos snps20P vth0=0.08 u0=8 %
      .end_global_variation
      .local_variation
         nmos snps20N vth0='1.234e-9/sqrt(get_E(W)*get_E(L)*get_E(M))' 
    +                 u0='2.345e-6/sqrt(get_E(W)*get_E(L)*get_E(M))' %
         pmos snps20P vth0='1.234e-9/sqrt(get_E(W)*get_E(L)*get_E(M))' 
    +                 u0='2.345e-6/sqrt(get_E(W)*get_E(L)*get_E(M))' %
         .element_variation
             R r=10 %
         .end_element_variation
      .end_local_variation
    .end_variation
    
    .dc k start=1 stop=4 step=1 monte=1000
    
    .meas DC systoffset1 find V(in_pos,in_neg) at=1
    .meas DC systoffset2 find V(in_pos,in_neg) at=2
    .meas DC systoffset3 find V(in_pos,in_neg) at=3
    .meas DC systoffset4 find V(in_pos,in_neg) at=4
    
    .TEMP 25
    .option nomod dcon=1
    .option post
    .END
    As you can see it does the same for opamp. What's my mistake in my code?

    1) my converge problem solved. My mistake was with the units on variation, I had to add E-009 to variation.
    but now I have a problem:

    2) When I use Print command to get current value, it works & give me back the currents of every transistor in each of monte carlo iteration. But I want to use .Measure command to get these values, because they give me the sigma ,& etc like the hspice example above. But no success, what should I do?

    3) In my netlist, as you can see, I have a guassian distribution with u=180mv and sigma=8.02mv on vth. But in the model card or library that we include in the netlist, there is a value for vth=0.25. I mean itself has a u value=0.25 If i'm correct.So Is my variation command true?
    Code:
     Parameter var=N() Y='180E-009 + 8.02E-009 * var' 
          Nmos N1
      + VTH0=Perturb('Y')
          Pmos P1
      + VTH0=Perturb('Y')
    Because I'm applying a new u to the circuit. I saw in the hspice example that it just apply the sigma, not u:
    Code:
         nmos snps20N vth0='1.234e-9/sqrt(get_E(W)*get_E(L)*get_E(M))'
    So is my command true, or I have to omit the u value & just consider the sigma as below:
    Code:
     Parameter var=N() Y='8.02E-009 * var' 
          Nmos N1
      + VTH0=Perturb('Y')
          Pmos P1
      + VTH0=Perturb('Y')



  9. #9
    Advanced Member level 5
    Points: 38,224, Level: 47

    Join Date
    Mar 2008
    Location
    USA
    Posts
    6,181
    Helped
    1792 / 1792
    Points
    38,224
    Level
    47

    Re: no convergence in dc sweep curves error

    You say your .MEAS is not working. Are there simulator
    errors / warnings about ignoring them, or any clue about
    syntax? I use SmartSpice and the syntax here looks a bit
    different than what I have seen (and that syntax is always
    a bit of a struggle, when I'm not reusing a known-good
    snippet).

    Having suffered under a Monte Carlo obsessed regime at
    one point in my career, and all of the brittleness that
    large PVT MC loops expose at the most inopportune time
    (like, crashing over and over as you try to hit your design
    review date) I favor the notion of building run file per
    PVTM-point and getting a data file apiece, and parsing /
    aggregating the results outside the simulator. A good
    data file would also include the conditions, so you know
    what's what. Some sort of generator script can make
    the few changes per file and another could read back
    in an orderly way for some postprocessing. An advantage
    here is that (if you have the license keys) you can run
    as many jobs in parallel as you have hardware and most
    significantly, bombing one iteration doesn't kill the rest
    that are waiting their turn.



--[[ ]]--