使用OCEAN的measure语句,如何返回一个none值?(附带OCEAN脚本)
录入:edatop.com 阅读:
我用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语句,就可以轻松实现
以上属于自问自答型
呵呵
不错哦。
申明:网友回复良莠不齐,仅供参考。如需专业解答,请学习本站推出的微波射频专业培训课程。
上一篇:Cadence中的config列表,有啥办法可以导出list
下一篇:用virtuoso做layout的时候stretch命令有点问题