模拟技术
这里这次我们给大家介绍一个Analog design中的仿真利器,Ocean Script。
1. Introduction.
OCEAN 的全名是 Open Command Environment for Analysis (OCEAN)。它其实是一种SKILL语言,或者说是子集。它可以自动配置Cadence中的仿真环境。
一般的Analog Designer都会用到ADE(Analog Design Environment)来对我们的电路进行仿真。然而在面对PVT各种变化组合大规模的仿真时,ADE进行设置往往会比较麻烦。这时,我们就可以使用Ocean Script来进行仿真的设置和控制。随着Cadence逐年进化,现在的ADE-XL功能越来越强大,也可以支持单个文件PVT等参数大规模的仿真设置。但作者君还是认为,应用熟练的Ocean Script要比ADE-XL的设置有效率许多。更更重要的是,Ocean允许从命令行执行仿真并从头到尾进行控制。这是一种No GUI的逼格和情怀!
具体说来,Ocean的主要功能如下图所示:
简单来说,Ocean主要有这两大功能:
参数分析:包括PVT的变化,此外还有其他一些仿真参数变量,比如设置的时钟频率,管子尺寸等等。
处理仿真数据:利用Ocean,我们可以只保存感兴趣的data,并将其直接存储在某个或批量文件里,即节省了储存空间,也便于仿真后的查阅。
2. Generating an Ocean Script Using ADE.
作为一种Script语言,当然你可以随便打开一个文本编辑器,然后从头开始编写。但我们一般并不这么做。作者君比较喜欢偷懒的方式,从ADE中导出Script。在ADE-L环境里,选择session-> Save Ocean Script;而在ADE-XL中,则是 File-> Save Script。保存下来的 .ocn文件,就是我们所要的Script啦。
3. Examples of some Ocean Scripts.
上图是一个简单的Ocean例子,请原谅我这拙劣的打码技巧。
我们可以看到,Ocean中的语句是和ADE GUI界面中的一一对应的。
1)simulator( 'spectre)是指该仿真所采用的仿真器。
2)design( “your design netlist”) 是该仿真的netlist地址。
3)resultsDir( “results Dir”) 显示了储存结果的路径。
4)modelFile( “your model files”) 表明采用的model。
5)analysis( 'dc ? … ) 是仿真类型,从左图可见这个design里,我们进行dc和tran的仿真。
6)desVar( “vdd” 1.2) 是仿真中所设的变量。
7)temp(27) 是温度参数。
8)run() 是和GUI界面中那个绿色的run按钮一样。
9)plot() 是显示结果,这里只是简单的画出波形。还有许多查阅结果的command,可以参考用户手册。
这些其实大家了解一下就行了,介绍一个最最常用也是最最关键的一个语句:foreach
比如我们想仿真不同的负载电容Cload,代码如下:
Cload = list( 2p 4p 6p 8p ) ;不同电容值
foreach( val Cload
desVar( "Cload" val )
a=resultsDir( sprintf( nil "./Cload=%g" val ) ) ;每个Cload保存成单独文件
printf( "%L", a )
run( )
)
foreach( val Cload
openResults( sprintf( nil "./Cload=%g" val ) ) ;open simulation results
selectResults( 'ac ) ; plot results.
plot( vdb( "vout" ) )
)
仿真中的每一个变量,如model,temp,vdd等等,都可以采用上面所展示的方法进行赋值和循环。这样,我们很容易就可以进行一系列庞大的仿真。
当然,这些PVT的仿真其实用ADE-XL也可以做到。但是,Ocean还可以进行不同文件的仿真,示例代码如下:
simulator('spectre)
design(...)
analysis('dc ...)
foreach(stimFile '("file1.scs" "file2.scs" "file3.scs") ;不同的仿真文件netlist
stimulusFile(stimFile)
run()
printf(...) ;显示结果
)
基本上我常用的Ocean Script仿真方式就这些了,采用各种层层的for循环语句嵌套,可以产生庞大的仿真文件。于是乎,上吧,少年,用庞大的simulation去占领整个server的内存和硬盘吧!!
4. Executing an Ocean Script.
运行Ocean一般有两种方式,一种是在CIW的command line里输入:
load “yourscript.ocn”
另外一种是在Linux的terminal里输入ocean后,会进入Ocean的shell,然后再输入:
load “yourscript.ocn”
就这样,我们这些庞大的jobs就开始运行了。怎么样,赶快去试试吧!
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !