使用OCEAN的measure语句,如何返回一个none值?(附带OCEAN脚本)
时间:10-02
整理:3721RD
点击:
我用OCEAN在做仿真的时候,遇到下面的问题
详细描述如下:
打算输出Au,Fu,PM,GM
但是,在有些情况下GM是测量不出来的。
这时候,仿真器报错:
*Error* Computation of gain margin failed for expression "VF("/VOUT_ac")". Phase does not cross -180 degrees
然后停止运行
我想实现,当GM测量不出来的时候,给GM赋值为“none”
请教版上的大人,如何实现上述想法?
附上我的OCEAN脚本:
simulator( 'spectre )
design("/sim_results/sim_EA_ac/spectre/schematic/netlist/netlist")
resultsDir("/sim_results/sim_EA_ac/spectre/schematic" "a" )
p=outfile("/a.txt" "w")
i=0
modelFile(
'("/tsmc18mm/1P5M/tsmc18/../models/spectre/cmn018_assp_v1d1.scs" "tt")
)
CL2='(1u 0.47u 0.1u)
RL2='(13.3 1200 12000)
R30m2='(30m 0.0001)
foreach(CL CL2
foreach(RL RL2
foreach(R30m R30m2
i++
analysis('ac ?start "0.01"?stop "1G")
desVar("RL" RL)
desVar("R30m" R30m)
desVar("DM3" "dd2")
desVar("DM2" "dd2")
desVar("dd2" 1.2)
desVar("dd" 3.3)
desVar("CL" CL)
desVar("DM0" "dd2")
desVar("DM1" 0)
temp( 27 )
run()
Au = value(dB20(VF("/VOUT_ac")) 0.01 ?histoDisplay nil ?noOfHistoBins 1)
Fu = cross(dB20(VF("/VOUT_ac")) 0 1 "falling" nil nil)
PM = phaseMargin(VF("/VOUT_ac"))
GM = gainMargin(VF("/VOUT_ac"))
fprintf(p, "%5.1f\n%5.2f\n%5.2f\n%5.2f\n\n" Au Fu/1000 PM GM)
)
)
)
close(p)
呵呵
自己搞定了!
增加一个if语句
if(GM==nil then
fprintf(p, "%5.1f\n%5.2f\n%5.2f\nnone\n\n" Au Fu/1000 PM )
else
fprintf(p, "%5.1f\n%5.2f\n%5.2f\n%5.2f\n\n" Au Fu/1000 PM GM)
)
查了ocean的manual,说,如果measure语句计算失败的话,会附上nil的值。
所以通过上面的if语句,就可以轻松实现
以上属于自问自答型
呵呵
不错哦。