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。

比如选择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中,包括一个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就可以查到。

此条目发表在IC分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。