微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微波和射频技术 > RFIC设计学习交流 > 求教 ocean脚本的问题

求教 ocean脚本的问题

时间:10-02 整理:3721RD 点击:
本人在用ocean做工艺角的仿真,仿真后 发现 数据输出后只剩下最后一个工艺角的数据 而不是想象中的100多个数据,找不出问题来,不知道毛病在哪里 ,牛人知道一下啊 下面是我的脚本 ,不知道哪里出错了
umc18_mosfet_cornerlist ='( "tt" "ss" "ff" "snfp" "fnsp" )
umc18_bjt_cornerlist ='( "bjt_typ" "bjt_max" "bjt_min")
umc18_mimcap_cornerlist ='( "mim_typ" "mim_max" "mim_min")
umc18_resistor_cornerlist ='( "res_typ" "res_max" "res_min")
umc18_diode = "diode"
foreach(umc18_mosfet_corner umc18_mosfet_cornerlist
case( umc18_mosfet_corner
( "tt" umc18_mosfet = "tt")
( "ff" umc18_mosfet = "ff")
( "ss" umc18_mosfet = "ss")
( "fnsp" umc18_mosfet = "fnsp")
( "snfp" umc18_mosfet = "snfp")
)
foreach(umc18_bjt_corner umc18_bjt_cornerlist
case( umc18_bjt_corner
( "bjt_typ" umc18_bjt="bjt_typ")
( "bjt_max" umc18_bjt="bjt_max")
( "bjt_min" umc18_bjt="bjt_min")
)
foreach(umc18_resistor_corner umc18_resistor_cornerlist
case( umc18_resistor_corner
( "res_typ" umc18_resistor="res_typ")
( "res_max" umc18_resistor="res_max")
( "res_min" umc18_resistor="res_min")
)
foreach(umc18_mimcap_corner umc18_mimcap_cornerlist
case( umc18_mimcap_corner
( "mim_typ" umc18_mimcap="mimcaps_typ")
( "mim_max" umc18_mimcap="mimcaps_max")
( "mim_min" umc18_mimcap="mimcaps_min")
)
sprintf( corner_file_tail,"_%s_%s_%s_%s_%s",umc18_mosfet,umc18_bjt,umc18_mimcap,umc18_resistor,umc18_diode )
corner_file = strcat( "/home/piaosg/corners/hjtc_corner",corner_file_tail )
foreach( tmp '(-27 30 80)

ocnWaveformTool( 'wavescan )
simulator( 'spectre )
design("/home/piaosg/simulation/test4_9_25/spectre/schematic/netlist/netlist")
resultsDir( "/home/piaosg/simulation/test4_9_25/spectre/schematic" )
piaosg_outputfile = outfile( "/home/piaosg/hjtc10/LNA_wk_1009/test4_9_25/simresults/corner.dat" "w")
S11_temp=10
NF_temp=10
S11=10
NF=10
modelFile( corner_file )
analysis('sp ?ports list("/PORT38")?start "200M"?stop "900M")
analysis('pnoise ?start "430M"?stop ""?maxsideband "20"
?p "/net041"?n "/net042"?oprobe ""?iprobe "/PORT38"
?refsideband "0")
analysis('dc ?saveOppoint t)
analysis('pss ?fund "430M"?harms "20"?errpreset "moderate")
desVar("cgs" 400f )
desVar("cp" 677f )
desVar("l" 81.67n )
desVar("c" 4.44p )
desVar("frf" 430M )
desVar("prf" -10 )
desVar("vdc_supply" 1.8 )
envOption(
'firstRunt
)
temp( tmp )
run()
S11_temp=ymin(db20(sp(1 1 ?result "sp")))
selectResult("pnoise")
NF_temp = ymin(getData("NF"))
S11=min(S11_temp S11)
NF=min(NF_temp NF)
fprintf( piaosg_outputfile,"%s_%s_%s_%s_%s",umc18_mosfet,umc18_bjt,umc18_mimcap,umc18_resistor,umc18_diode )
fprintf(piaosg_outputfile "%L "tmp)
fprintf(piaosg_outputfile "%L "S11)
fprintf(piaosg_outputfile"%L "NF)
fprintf(piaosg_outputfile "\n")
close(piaosg_outputfile)
)
S11\ dB20 = db(sp(1 1 ?result "sp"))
plot( S11\ dB20 ?expr '( "S11 dB20" ) )
noise\ figure = getData("NF" ?result "pnoise")
plot( noise\ figure ?expr '( "noise figure" ) )

我想是不是数据输出的语法要包含在每次的循环中呢,嘿嘿,我也不知道是不是要这样

2楼是对的,输出要包含在循环里。现在的语句每一次的结果都有print出来的,只是被下一个覆盖了,所以只剩最后一个case了。

那我在最下边加5个括号就额可以解决吗?

resultsDir( "/home/piaosg/simulation/test4_9_25/spectre/schematic" )
所有的数据读放到这个文件夹下了,前面的仿真结果被后面的覆盖掉了

那为什么还会有最后一个仿真结果存到了呢?

那我把那行去掉吗?去掉后仿真结果存到哪里去了, 还能计算仿真结果了么

?

不直接写出来,要么就报错,也有可能能够run不过就是基于前面的环境了
也有可能是系统变量本来就有
最好是,explicit!

2楼正解。每个run就要变一次resultsDir路径。

求教了,

学习了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top