example update: sim_status, mc_source and others

This commit is contained in:
Holger Vogt 2018-07-01 21:57:05 +02:00
parent 8ffb3e29da
commit 73f8925c1e
2 changed files with 22 additions and 8 deletions

View File

@ -1,3 +1,4 @@
*ng_script
* Perform Monte Carlo simulation in ngspice
* script for use with 25 stage Ring-Osc. BSIM3
* circuit is in MC_2_circ.sp
@ -5,9 +6,8 @@
* start script by 'ngspice -o MC_2_control.log MC_2_control.sp'
*
.control
save buf $ we just need output vector buf, save memory by more than 10x
let mc_runs = 10 $ number of runs for monte carlo
let run = 1 $ number of the actual run
let mc_runs = 10 $ number of runs for monte carlo
let run = 1 $ number of the actual run
* Where to find the circuit netlist file MC_2_circ.sp
set sourcepath = ( D:\Spice_general\ngspice\examples\Monte_Carlo )
@ -19,14 +19,14 @@
dowhile run <= mc_runs
* without the reset switch there is some strange drift
* towards lower and lower frequencies
reset
set run ="$&run" $ create a variable from the vector
set rndseed = $run $ set the rnd seed value to the loop index
set run = $&run $ create a variable from the vector
setseed $run $ set the rnd seed value to the loop index
if run = 1
source MC_2_circ.sp $ load the circuit once from file, including model data
else
mc_source $ re-load the circuit from internal storage
end
save buf $ we just need output vector buf, save memory by more than 10x
tran 15p 200n 0
write mc_ring{$run}.out buf $ write each sim output to its own rawfile
linearize buf $ lienarize buf to allow fft

View File

@ -1,5 +1,9 @@
Perform Monte Carlo simulation in ngspice
* 25 stage Ring-Osc. BSIM3
* 25 stage Ring-Osc. BSIM3 with statistical variation of various model parameters
* cd into ngspice/examples/Monte_Carlo
* start in interactive mode 'ngspice MC_ring.sp' with several plots for output
* or start in batch mode, controlled by .control section (Control mode)
* with 'ngspice -b -r MC_ring.raw -o MC_ring.log MC_ring.sp'.
vin in out dc 0.5 pulse 0.5 0 0.1n 5n 1 1 1
vdd dd 0 dc 3.3
@ -151,6 +155,15 @@ cout buf ss 0.2pF
reset
end
***** plotting **********************************************************
if $?batchmode
echo
echo Plotting not available in batch mode
echo Write linearized vout0 to vout{$mc_runs} to rawfile $rawfile
echo
write $rawfile {$plot_out}.allv
rusage
quit
else
setplot $plot_out
plot vout0 ylabel 'RO output, original parameters' $ just plot the tran output with nominal parameters
setplot $plot_fft
@ -171,7 +184,7 @@ cout buf ss 0.2pF
* put data into the correct bins
let run = 0
dowhile run < mc_runs
set run = "$&run" $ create a variable from the vector
set run = $&run $ create a variable from the vector
let val = maxffts[{$run}]
let part = 0
* Check if val fits into a bin. If yes, raise bin by 1
@ -199,6 +212,7 @@ cout buf ss 0.2pF
let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6
echo
echo Max. jitter is "$&diff40" MHz
end
rusage
.endc
********************************************************************************