liz16
Newbie level 4
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:
The errors:
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