10.06.2016 Views

eldo_user

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Eldo Control Language<br />

Statistical Processing<br />

.define_testbench tb_mc()<br />

.model modres res lot=10% dev=5%<br />

v1 1 0 pwl 0 0 1n 0 2n 3<br />

r1 1 2 modres 1k<br />

c1 2 0 1p<br />

.tran 0 10u<br />

.mc 100<br />

.extract catvect label=rise_time xthres(v(2), 1.5)<br />

.end_define_testbench<br />

.define_task t()<br />

set extract_name = "rise_time"<br />

set extract_res[] = 0<br />

set nbmc = 0<br />

set res = 0<br />

set conv = 0<br />

/* Load the netlist. */<br />

res = _simu_load(name = "tmp/tmp.cir", tb_mc())<br />

if (res.simu_status == 0)<br />

_simu_set_mc_flow()<br />

/* Run nominal. */<br />

res = _simu_run(mode="nom")<br />

if (res.simu_status == 0)<br />

/* Begin Monte-Carlo simulation. */<br />

res = _simu_run(mode="mc 5")<br />

nbmc += 5<br />

while (res.simu_status == 0)<br />

/* Get the results. */<br />

extract_res = _simu_get_extract(extract_name);<br />

/* Display results (+1 to exclude nominal extract). */<br />

print_res(p_nbmc=nbmc,<br />

+ p_extract_res=extract_res[extract_res.imin + 1,<br />

+ extract_res.imax])<br />

/* Stop when it has converged. */<br />

if (mcconv(extract_res,<br />

+ "AVG",<br />

+ "CONFIDENCE") == 1)<br />

break;<br />

endif<br />

/* Prevent infinite loop. */<br />

if (nbmc > 10000)<br />

fprint(stdout, "Failed to converge!\n")<br />

break;<br />

endif<br />

/* Continue Monte-Carlo simulation. */<br />

res = _simu_run(mode="mc 5")<br />

nbmc += 5<br />

endwhile<br />

endif<br />

endif<br />

.end_define_task<br />

.define_task print_res(p_nbmc=10, p_extract_res[] = 0)<br />

set avg_val = avg(p_extract_res)<br />

set std_val = std(p_extract_res)<br />

Eldo® User's Manual, 15.3 1067

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!