cadence vmanager(七) vsif文件介绍
0赞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。
比如选择SERIAL_LOCAL,session中有10000个test,那么每个test,以串行的方式,在本机上一个一个执行,那效率就低了。
比如选择PARALLEL_LOCAL,session中有10000个test,那么每个test,以并行的方式,在本机上并行执行,效率也很低。
比如选择LSF,session中有10000个test,那么每个test,都会通过bsub提交到lsf中去执行,效率就很高了。
在设置了runner的模式后,我们就要关注runner的执行过程。
runner的执行过程,如下:
在启动一个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的例子:
将来启动这个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的例子:
一个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的例子:
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文件的例子:
session vm_test_session { top_dir : $ENV(SESSION_TOP)/vm_test; drm : <text>lsf</text>; output_mode : log_only; } group vm_test { scan_script : "vm_scan.pl ius.flt" pre_group_script : "make -f $ENV(SOURCE_DIR)/Makefile irun_compile"; run_script : "make -f $ENV(SOURCE_DIR)/Makefile irun_run seed=$BRUN_SV_SEED"; sv_seed : random; count : 3; test test0 { } test test1 { } test test2 { } } |
指定session为vm_test_session,runner模式为lsf,输出模式为log_only,也就是输出打印到文件中。
session中,包括一个group,名叫vm_test,该group下,包括了3个test,但是因为设置了count为3,因此包括了9个test,每个test执行的命令,由group中的run_script属性指定。
更多关于vsif文件的信息,可以查看cadence的官方文档,通过cadence help就可以查到。