卢骏 · 2020年06月26日

cadence vmanager(七) vsif文件介绍

vsif(verification session input format file),是vmanager启动一个session,必备的一个文件,该文件,指定了待运行的test。vmanager工具,会从该文件中,提取出test以及test的run命令,使用自带的runner去运行这些test的run命令,并且收集run的结果,最后集中显示。

vsif文件中,定义了如下的三个大的字段:

◾session:对此次session的相关设置

◾group:对group的相关设置,一个session可以包括多个group,每个group可以包括多个test

◾test:对test的相关设置

vsif文件中,还支持了如下的语法:

◾标准的C编译指示符,如#include, #define, #ifdef, #ifndef

◾属性获取指示符,如 $ENV, $RUN_ENV, $ATTR, $DIR

在了解vsif文件之前,要先了解一下vmanager的runner。因为理解了runner,有助于我们编写vsif文件。

一、vmanager的runner

vmanager内部,自带一个runner,来运行session。

在vmanager的configuration中,可以配置runner,使用何种模式。runner根据配置,来决定,如何去运行session中的test。
1.png

比如选择SERIAL_LOCAL,session中有10000个test,那么每个test,以串行的方式,在本机上一个一个执行,那效率就低了。

比如选择PARALLEL_LOCAL,session中有10000个test,那么每个test,以并行的方式,在本机上并行执行,效率也很低。

比如选择LSF,session中有10000个test,那么每个test,都会通过bsub提交到lsf中去执行,效率就很高了。

在设置了runner的模式后,我们就要关注runner的执行过程。

runner的执行过程,如下:
2.png

在启动一个session后,runner首先进入到pre-session阶段,此时执行session中pre_session脚本。

接着进入各个group的pre-group阶段,执行pre_group脚本,每个group中,包含了多个test。

group的pre_group脚本执行完毕后,就进入到了各个test的run阶段。此时执行各个test的run脚本。

在group中的各个run,都执行完毕后,进入到post-group阶段,执行post_group脚本。

所有group的post_group脚本执行完毕后,进入到post-session阶段,执行post_session脚本。

执行完post_session脚本后,一个session,就执行结束了。

二、session{}

定义一个session,语法如下:

session  session_name {
 属性 = 属性值;
 }

注意,每个属性值后面,要跟上一个分号。

以下是session的例子:
3.png

将来启动这个session后,session的名字的前缀,就会是session_name。

属性包括如下的几个属性:

◾top_dir :session的顶层目录,session启动后,会在该目录下生成一个以自己session名字命令的文件夹,生成的数据,就放到这个文件夹下

◾drm: 指定runner的模式,如lsf。

◾max_runs_in_parallel: 最大并行运行test的个数

◾pre_session_script: 在开始session之前,运行的脚本

◾post_session_script :在session结束之后,运行的脚本

◾output_mode: 此次session运行的输出模式,有terminal和log_only。如果是terminal,那么会弹出一个终端,显示输出,如果log_only,那么输出直接打印到文件中。

三、group{}

定义一个group,语法如下:

group  group_name {
属性 = 属性值;
}

注意,每个属性值后面,要跟上一个分号。

以下是group的例子:
4.png

一个group,包含多个test,可以在group中,指定test的属性。

属性包括如下的几个属性:

◾sve_name: test运行之前,所需加载的环境变量文件,用来给test的run,指定环境变量。

◾count:指定一个test的run次数,如果需要对test,执行多次,可以设置这个值。

◾code_coverage:code覆盖率收集的开关,如果指定,那么会当作BRUN_CODE_COVERAGE参数,传递给test。

◾dut_name: 指定DUT的名字

◾gui_mode:是否打开交互模式,如果指定,那么会当作BRUN_GUI_MODE参数,传递给test的run参数。

◾hdl_files:指定test所需要的HDL文件,如果指定,那么会当作BRUN_HDL_FILES参数,传递给test。

◾pre_group_script: pre-group阶段的执行脚本

◾pre_run_script:pre-run阶段的执行脚本

◾post_group_scripts: post-group阶段的执行脚本

◾post_run_scripts: post-run阶段的执行脚本

◾run_mode: test的运行模式,batch,interactive,batch_debug,interactive_debug

◾run_script: test运行的脚本

◾scan_script:指定扫描run结果的脚本

◾sv_seed: 指定随机种子,通过BRUN_SV_SEED传递给test。如果指定为random,那么test运行时,会随机产生一个种子,如果指定为一个范围,那么会从这个范围中随机挑选一个值。

◾timeout:run的超时时间,单位是秒。当一个test执行的时间,超过该时间后,就会被kill掉。

◾top_files:指定test的顶层文件,通过BRUN_TOP_FILES传递给test

◾verbosity:指定冗余等级,通过BRUN_VERBOSITY传递给test

四、test{}

定义一个test,格式如下:

test  testgroup_name {
属性 = 属性值; 
}

注意,每个属性值后面,要跟上一个分号。

以下是test的例子:
5.png

test中定义的属性,可以重载group中,对test定义的属性。

有以下的一些属性:

◾depends_on: 依赖的test,当依赖的test执行之后,才执行

◾seed: test的随机种子,通过BRUN_SEED,传递给test的执行

◾run_script: test运行的脚本

其他的一些参数,和group中的指定的test的参数一致。

五、vsif文件中目录获取

在vsif文件中,可以通过内置的变量或者方法,获取到一些目录。

◾$BRUN_CHAIN_DIR,$DIR(chain):  chain的目录,推荐使用$DIR(chain)

◾$BRUN_SESSION_DIR ,$DIR(seesion): session的目录,推荐使用$DIR(seesion)

◾$BRUN_RUN_DIR ,$DIR(run): test run的目录,推荐使用$DIR(run)

六、完整vsif文件例子

以下是一个完整vsif文件的例子:
6.png
session中,包括一个group,名叫vm_test,该group下,包括了3个test,但是因为设置了count为3,因此包括了9个test,每个test执行的命令,由group中的run_script属性指定。指定session为vm_test_session,runner模式为lsf,输出模式为log_only,也就是输出打印到文件中。

更多关于vsif文件的信息,可以查看cadence的官方文档,通过cadence help就可以查到。
7.png

更多相关阅读

cadence vmanager(五) vmanager启动方式
cadence vmanager(六) vmanager的web功能
cadence vmanager(四)vmanager软件使用介绍

原文首发于骏的世界博客
作者:卢骏
更多IC设计相关的文章请关注IC设计极术专栏,每日更新。

推荐阅读
关注数
10974
内容数
1216
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息