Questions using Monte Carlo with Ocean

N

NigelD

Guest
Hi,

I have a couple questions in trying to do Monte Carlo analysis:

To begin I'm using IC 5.10.41, and MMSIM 6.1

1. How does one get the entire voltage waveform from a transient
analysis for *a particular monte carlo iteration*? I've tried:

value(VT(<netname here>) <iteration number here>) - this doesn't work
and gives me the value at one time across all MC iterations.
value(value(VT(<netname here>) ) <iteration number here>) - also
doesn't work and results in an error

2. I'm a bit confused about how the "Mismatch" analysis works. My
experience is that with the "Mismatch Only" option, all devices get
uniquely assigned parameters values *once at the beginning* and these
remain the same across all Monte Carlo iterations. This seems rather
strange to me. This means that if I want to analyze mismatch for a
simple inverter, I'd have to have N inverters all on the same
schematic and only do 1 MC iteration. Is it not possible to do 1
inverter on the schematic and N iterations to satisfy this? If so, how
do I achieve this?

Thanks!
Nigel.
 
Nigel,

Answers interspersed:

NigelD wrote, on 06/19/08 14:19:
Hi,

I have a couple questions in trying to do Monte Carlo analysis:

To begin I'm using IC 5.10.41, and MMSIM 6.1

1. How does one get the entire voltage waveform from a transient
analysis for *a particular monte carlo iteration*? I've tried:

value(VT(<netname here>) <iteration number here>) - this doesn't work
and gives me the value at one time across all MC iterations.
value(value(VT(<netname here>) ) <iteration number here>) - also
doesn't work and results in an error
You need to use:

value(VT("/myOut") 'iteration <iterationNumberHere>)

2. I'm a bit confused about how the "Mismatch" analysis works. My
experience is that with the "Mismatch Only" option, all devices get
uniquely assigned parameters values *once at the beginning* and these
remain the same across all Monte Carlo iterations. This seems rather
strange to me. This means that if I want to analyze mismatch for a
simple inverter, I'd have to have N inverters all on the same
schematic and only do 1 MC iteration. Is it not possible to do 1
inverter on the schematic and N iterations to satisfy this? If so, how
do I achieve this?

Thanks!
Nigel.
No, that's not what happens. Not sure why you think it is? You might want to
take a look at:

http://www.designers-guide.org/Modeling/montecarlo.pdf

For example, if I use this netlist:

// monte example
parameters rval=948 mytemp=27

//opts options temp=mytemp

statistics {
process {
vary rval dist=gauss std=53
vary mytemp dist=unif N=50
}
mismatch {
vary rval dist=gauss std=53
}
}

inline subckt myres (a b)
myres (a b) resistor r=rval tc1=0.1
ends myres

subckt block (2 1)
r1 (2 1) myres
r2 (1 0) myres
//r1 (2 1) resistor r=rval
//r2 (1 0) resistor r=rval
ends block

b1 (2 1) block
//r2 (1 0) resistor r=948
v1 (2 0) vsource dc=2.4

mc montecarlo donominal=no variations=mismatch numruns=200 \
scalarfile="mcdata" paramfile="mcparam" sampling=lhs {
dcOp dc
element info what=inst where=rawfile
export midval=oceanEval("v(\"1\" ?result 'dcOp)")
export r1val=oceanEval("pv(\"b1.r1\" \"r\" ?result 'instance)")
export r2val=oceanEval("pv(\"b1.r2\" \"r\" ?result 'instance)")
}

I get in the mcdata file:

1.19905 966.209 964.679
1.23603 897.304 952.852
1.21993 990.531 1023.99
1.18879 1041.51 1022.23
1.20323 939.099 944.164
1.21473 904.81 927.304
1.22939 921.2 967.454
1.24467 885.973 954.484
1.17017 980.134 932.593
1.22026 905.35 936.439
1.1637 865.762 814.918
1.21057 944.167 960.943


etc. So you can see the resistor values are changing between iterations, and
between the two resistors. I'm only doing mismatch here.

Regards,

Andrew.
 
On Jun 19, 1:22 pm, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm>
wrote:
Nigel,

Answers interspersed:

NigelD wrote, on 06/19/08 14:19:

Hi,

I have a couple questions in trying to do Monte Carlo analysis:

To begin I'm using IC 5.10.41, and MMSIM 6.1

1. How does one get the entire voltage waveform from a transient
analysis for *a particular monte carlo iteration*? I've tried:

value(VT(<netname here>) <iteration number here>) - this doesn't work
and gives me the value at one time across all MC iterations.
value(value(VT(<netname here>) ) <iteration number here>) - also
doesn't work and results in an error

You need to use:

value(VT("/myOut") 'iteration <iterationNumberHere>)



2. I'm a bit confused about how the "Mismatch" analysis works. My
experience is that with the "Mismatch Only" option, all devices get
uniquely assigned parameters values *once at the beginning* and these
remain the same across all Monte Carlo iterations. This seems rather
strange to me. This means that if I want to analyze mismatch for a
simple inverter, I'd have to have N inverters all on the same
schematic and only do 1 MC iteration. Is it not possible to do 1
inverter on the schematic and N iterations to satisfy this? If so, how
do I achieve this?

Thanks!
Nigel.

No, that's not what happens. Not sure why you think it is? You might want to
take a look at:

http://www.designers-guide.org/Modeling/montecarlo.pdf

For example, if I use this netlist:

// monte example
parameters rval=948 mytemp=27

//opts options temp=mytemp

statistics {
process {
vary rval dist=gauss std=53
vary mytemp dist=unif N=50
}
mismatch {
vary rval dist=gauss std=53
}

}

inline subckt myres (a b)
myres (a b) resistor r=rval tc1=0.1
ends myres

subckt block (2 1)
r1 (2 1) myres
r2 (1 0) myres
//r1 (2 1) resistor r=rval
//r2 (1 0) resistor r=rval
ends block

b1 (2 1) block
//r2 (1 0) resistor r=948
v1 (2 0) vsource dc=2.4

mc montecarlo donominal=no variations=mismatch numruns=200 \
scalarfile="mcdata" paramfile="mcparam" sampling=lhs {
dcOp dc
element info what=inst where=rawfile
export midval=oceanEval("v(\"1\" ?result 'dcOp)")
export r1val=oceanEval("pv(\"b1.r1\" \"r\" ?result 'instance)")
export r2val=oceanEval("pv(\"b1.r2\" \"r\" ?result 'instance)")

}

I get in the mcdata file:

1.19905 966.209 964.679
1.23603 897.304 952.852
1.21993 990.531 1023.99
1.18879 1041.51 1022.23
1.20323 939.099 944.164
1.21473 904.81 927.304
1.22939 921.2 967.454
1.24467 885.973 954.484
1.17017 980.134 932.593
1.22026 905.35 936.439
1.1637 865.762 814.918
1.21057 944.167 960.943

etc. So you can see the resistor values are changing between iterations, and
between the two resistors. I'm only doing mismatch here.

Regards,

Andrew.
Thanks!
 
On Jun 19, 1:22 pm, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm>
wrote:
Nigel,

Answers interspersed:

NigelDwrote, on 06/19/08 14:19:

Hi,

I have a couple questions in trying to do Monte Carlo analysis:

To begin I'm using IC 5.10.41, and MMSIM 6.1

1. How does one get the entire voltage waveform from a transient
analysis for *a particular monte carlo iteration*? I've tried:

value(VT(<netname here>) <iteration number here>) - this doesn't work
and gives me the value at one time across all MC iterations.
value(value(VT(<netname here>) ) <iteration number here>) - also
doesn't work and results in an error

You need to use:

value(VT("/myOut") 'iteration <iterationNumberHere>)



2. I'm a bit confused about how the "Mismatch" analysis works. My
experience is that with the "Mismatch Only" option, all devices get
uniquely assigned parameters values *once at the beginning* and these
remain the same across all Monte Carlo iterations. This seems rather
strange to me. This means that if I want to analyze mismatch for a
simple inverter, I'd have to have N inverters all on the same
schematic and only do 1 MC iteration. Is it not possible to do 1
inverter on the schematic and N iterations to satisfy this? If so, how
do I achieve this?

Thanks!
Nigel.

No, that's not what happens. Not sure why you think it is? You might want to
take a look at:

http://www.designers-guide.org/Modeling/montecarlo.pdf

For example, if I use this netlist:

// monte example
parameters rval=948 mytemp=27

//opts options temp=mytemp

statistics {
     process {
         vary rval dist=gauss std=53
         vary mytemp dist=unif N=50
     }
     mismatch {
         vary rval dist=gauss std=53
     }

}

inline subckt myres (a b)
myres (a b) resistor r=rval tc1=0.1
ends myres

subckt block (2 1)
r1 (2 1) myres
r2 (1 0) myres
//r1 (2 1) resistor r=rval
//r2 (1 0) resistor r=rval
ends block

b1 (2 1) block
//r2 (1 0) resistor r=948
v1 (2 0) vsource dc=2.4

mc montecarlo donominal=no variations=mismatch numruns=200 \
  scalarfile="mcdata" paramfile="mcparam" sampling=lhs {
   dcOp dc
   element info what=inst where=rawfile
   export midval=oceanEval("v(\"1\" ?result 'dcOp)")
   export r1val=oceanEval("pv(\"b1.r1\" \"r\" ?result 'instance)")
   export r2val=oceanEval("pv(\"b1.r2\" \"r\" ?result 'instance)")

}

I get in the mcdata file:

1.19905 966.209 964.679
1.23603 897.304 952.852
1.21993 990.531 1023.99
1.18879 1041.51 1022.23
1.20323 939.099 944.164
1.21473 904.81 927.304
1.22939 921.2 967.454
1.24467 885.973 954.484
1.17017 980.134 932.593
1.22026 905.35 936.439
1.1637 865.762 814.918
1.21057 944.167 960.943

etc. So you can see the resistor values are changing between iterations, and
between the two resistors. I'm only doing mismatch here.

Regards,

Andrew.
Hi Andrew,

I still have the same issues with Mismatch analysis in Monte Carlo -
when I look at my mcdata file when doing "Mismatch Only", I see only
one column (for my output variable) and all the values in that column
are identical. So it's obvious that the way I'm doing it, mismatch is
not being applied. I've verified that there is indeed a mismatch
section within the statistics section of the models. All the
transistor models are inline subcircuits, just as the example in the
document you linked to. Unfortunately I cannot post anything from the
process file due to an NDA, but are there other ways of debugging
this?

Thanks,
Nigel.
 

Welcome to EDABoard.com

Sponsor

Back
Top