P
Pierre Paoli
Guest
Hello,
I would need some support regarding the use of spectre or spectremdl to launch some montecarlo simu in batch mode.
I have done it in a graphical mode using adexl and i have what I want, however, now next step is to do it in batch.
I see 3 ways of doing :
1/with spectremdl => would be my top choice because I am suppose to get the results (yield/sigma...) in a result_file and I can better split the control (input.mdl) and the operation files (input.scs)
2/with spectre => back-up option
3/with ocean => the setting for the cadence files and the syntaxe are too complicated to some automatization use
I am using :
....> which spectre
/home/.../cadence/MMSIM10_11/tools/bin/spectre
....> spectre -W
sub-version 10.1.1.181.isr12
Method 1 : spectremdl
I don't know how I can fix the below errors. Could you please help me ?
I launch :
spectremdl -batch input.mdl -design input.scs -measure mc_results_file/results_file +log mc_log_file.log
I have the errors :
Error found by spectre.
ERROR: line 11, column 2: syntax error before or at: <eof>
unrecognised statement
ERROR (MDL-6): Failed to parse MDL control file, `input.mdl'.
I have the following files :
###################################
input.mdl :
/* mdl measurement file */
alias measurement tran_meas {
run tran
export real test = 1000
}
run montecarlo (numruns=50, variations='mismatch, scalarfile="mc_results.dat", donominal='no) {
run tran_meas
}
####################################
input.scs :
subckt inv A1 YN vdd vnw vpw vss
....
M5 (YN A1 vdd vnw) psvtlp w=wp*10e5 l=lp*10e5 nfing=pfolds mult=1 \
srcefirst=1 mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1
....
M1 (saout_b saout vss vpw) nsvtlp w=wndiff l=lndiff nfing=1 mult=1 \
srcefirst=1 mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1
include "./_graphical_stimuli.scs"
ic aout=1 aout_b=0
simulatorOptions options reltol=1e-3 vabstol=1e-6 iabstol=1e-12 temp=70.0 \
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=20n 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 aeni aout aout_b
saveOptions options save=allpub subcktprobelvl=2
method 2 : spectre
I display the input.scs from the adexl window. So I expect the input.scs file should work.
At this time, I have the line :
export aout_b_max=oceanEval("ymax(v(\"/aout_b\" ?result \"tran\"))")
which corresponds to the graphical setting I did (meaning the yield, sigma... of the montecarlo runs will be based on a comparison of this aout_b_max and a spec value (not specified in the input.scs)).
I decide to use this input.scs to launch the montecarlo simu : spectre input.scs +log mc_log_file.log
I launch : spectre input.scs +log mc_log_file.log
And surprise, surprise, I have the above export in error :
*Error* _ymaxMethod: can't handle _ymaxMethod(nil)
Error found by spectre during Monte Carlo analysis `mc1'.
ERROR (SPECTRE-8003): subckts: Error evaluating ocean expression
`aout_b_max=ymax(v("/aout_b" ?result "tran"))'.
Unsuccessfully evaluated export statements (based on return code).
Analysis `mc1' was terminated prematurely due to an error.
In graphical mode, the montecarlo runs occur very well using this input.scs, how it comes in batch mode I have this issue ?
The input.scs file I am using :
// Generated for: spectre
// Design library name: Test
simulator lang=spectre
global 0
include "corners_SS.scs"
parameters lndiff=...
subckt ncx ncx
ends ncx
// End of subcircuit definition.
subckt inv A1 YN vdd vnw vpw vss
parameters wp=xxx lp=xxx pfolds=1 wn=xxx ln=xxx nfolds=1
M5 (YN A1 vdd vnw) psvtlp w=wp*10e5 l=lp*10e5 nfing=pfolds mult=1 \
srcefirst=1 mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1
....
I0 (aout net33 vdd vnw vpw vss) inv wp=xxx lp=xxx pfolds=1 wn=xxx \
ln=xxx nfolds=1
....
Rright (vdd aout) resistor r=Rright
Rleft (vdd aout_b) resistor r=Rleft
M0 (aout aout_b vss vpw) nsvtlp w=wndiff l=lndiff nfing=1 mult=1 \
srcefirst=1 mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1
....
include "./_graphical_stimuli.scs"
ic aout=1 aout_b=0
simulatorOptions options reltol=1e-3 vabstol=1e-6 iabstol=1e-12 temp=70.0 \
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
mc1 montecarlo numruns=1 seed=12345 variations=mismatch sampling=standard \
donominal=yes scalarfile="../monteCarlo/mcdata" \
paramfile="../monteCarlo/mcparam" savemismatchparams=yes \
mismatchparamfile="../monteCarlo/mismatchparam" \
mismatchscalarfile="../monteCarlo/mismatchdata" \
dumpdependency=mismatch \
dependencymapfile="../monteCarlo/mismatchdependency" \
savefamilyplots=yes savedatainseparatedir=yes {
tran tran stop=20n 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
export aout_b_max=oceanEval("ymax(v(\"/aout_b\" ?result \"tran\"))")
}
mcOptions options genmcdep=yes
saveOptions options save=allpub subcktprobelvl=2
Finally, my top goal would be to get in a result file the yield/sigma/mean values.
Special thanks for any help !!
P.
I would need some support regarding the use of spectre or spectremdl to launch some montecarlo simu in batch mode.
I have done it in a graphical mode using adexl and i have what I want, however, now next step is to do it in batch.
I see 3 ways of doing :
1/with spectremdl => would be my top choice because I am suppose to get the results (yield/sigma...) in a result_file and I can better split the control (input.mdl) and the operation files (input.scs)
2/with spectre => back-up option
3/with ocean => the setting for the cadence files and the syntaxe are too complicated to some automatization use
I am using :
....> which spectre
/home/.../cadence/MMSIM10_11/tools/bin/spectre
....> spectre -W
sub-version 10.1.1.181.isr12
Method 1 : spectremdl
I don't know how I can fix the below errors. Could you please help me ?
I launch :
spectremdl -batch input.mdl -design input.scs -measure mc_results_file/results_file +log mc_log_file.log
I have the errors :
Error found by spectre.
ERROR: line 11, column 2: syntax error before or at: <eof>
unrecognised statement
ERROR (MDL-6): Failed to parse MDL control file, `input.mdl'.
I have the following files :
###################################
input.mdl :
/* mdl measurement file */
alias measurement tran_meas {
run tran
export real test = 1000
}
run montecarlo (numruns=50, variations='mismatch, scalarfile="mc_results.dat", donominal='no) {
run tran_meas
}
####################################
input.scs :
subckt inv A1 YN vdd vnw vpw vss
....
M5 (YN A1 vdd vnw) psvtlp w=wp*10e5 l=lp*10e5 nfing=pfolds mult=1 \
srcefirst=1 mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1
....
M1 (saout_b saout vss vpw) nsvtlp w=wndiff l=lndiff nfing=1 mult=1 \
srcefirst=1 mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1
include "./_graphical_stimuli.scs"
ic aout=1 aout_b=0
simulatorOptions options reltol=1e-3 vabstol=1e-6 iabstol=1e-12 temp=70.0 \
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=20n 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 aeni aout aout_b
saveOptions options save=allpub subcktprobelvl=2
method 2 : spectre
I display the input.scs from the adexl window. So I expect the input.scs file should work.
At this time, I have the line :
export aout_b_max=oceanEval("ymax(v(\"/aout_b\" ?result \"tran\"))")
which corresponds to the graphical setting I did (meaning the yield, sigma... of the montecarlo runs will be based on a comparison of this aout_b_max and a spec value (not specified in the input.scs)).
I decide to use this input.scs to launch the montecarlo simu : spectre input.scs +log mc_log_file.log
I launch : spectre input.scs +log mc_log_file.log
And surprise, surprise, I have the above export in error :
*Error* _ymaxMethod: can't handle _ymaxMethod(nil)
Error found by spectre during Monte Carlo analysis `mc1'.
ERROR (SPECTRE-8003): subckts: Error evaluating ocean expression
`aout_b_max=ymax(v("/aout_b" ?result "tran"))'.
Unsuccessfully evaluated export statements (based on return code).
Analysis `mc1' was terminated prematurely due to an error.
In graphical mode, the montecarlo runs occur very well using this input.scs, how it comes in batch mode I have this issue ?
The input.scs file I am using :
// Generated for: spectre
// Design library name: Test
simulator lang=spectre
global 0
include "corners_SS.scs"
parameters lndiff=...
subckt ncx ncx
ends ncx
// End of subcircuit definition.
subckt inv A1 YN vdd vnw vpw vss
parameters wp=xxx lp=xxx pfolds=1 wn=xxx ln=xxx nfolds=1
M5 (YN A1 vdd vnw) psvtlp w=wp*10e5 l=lp*10e5 nfing=pfolds mult=1 \
srcefirst=1 mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1
....
I0 (aout net33 vdd vnw vpw vss) inv wp=xxx lp=xxx pfolds=1 wn=xxx \
ln=xxx nfolds=1
....
Rright (vdd aout) resistor r=Rright
Rleft (vdd aout_b) resistor r=Rleft
M0 (aout aout_b vss vpw) nsvtlp w=wndiff l=lndiff nfing=1 mult=1 \
srcefirst=1 mismatch=1 lpe=0 numcos=1 numcod=1 ngcon=1
....
include "./_graphical_stimuli.scs"
ic aout=1 aout_b=0
simulatorOptions options reltol=1e-3 vabstol=1e-6 iabstol=1e-12 temp=70.0 \
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
mc1 montecarlo numruns=1 seed=12345 variations=mismatch sampling=standard \
donominal=yes scalarfile="../monteCarlo/mcdata" \
paramfile="../monteCarlo/mcparam" savemismatchparams=yes \
mismatchparamfile="../monteCarlo/mismatchparam" \
mismatchscalarfile="../monteCarlo/mismatchdata" \
dumpdependency=mismatch \
dependencymapfile="../monteCarlo/mismatchdependency" \
savefamilyplots=yes savedatainseparatedir=yes {
tran tran stop=20n 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
export aout_b_max=oceanEval("ymax(v(\"/aout_b\" ?result \"tran\"))")
}
mcOptions options genmcdep=yes
saveOptions options save=allpub subcktprobelvl=2
Finally, my top goal would be to get in a result file the yield/sigma/mean values.
Special thanks for any help !!
P.