详细示范简单VCS的Makefile怎么写

VCS在统计代码覆盖率的过程中,我们通常在编译和仿真命令上添加对应的开关选项,生成一个 .vdb文件记录覆盖率的情况。再使用dve打开该文件查看。下面介绍一些选项。
编译命令的格式:vcs sourcefile [compile_time_option] (编译选项用来控制编译过程)
执行仿真命令格式:./simv [run_time_option]
-cm :打开对应类型的覆盖率,例如 -cm cond+tgl+lin+fsm+path为统计上述所有覆盖率。可根据需要增减。
-cm_name:设置记录有覆盖率信息文件的名字。
-cm_dir:指定生成文件的目录。
-cm_dir ./ ${OUTPUT}.vdb

是指定 .vdb 文件生成路径为 ./ 。
./ 代表在当前目录下生成.因为OUTPUT = cov_test,所以最后在当前目录生成了 cov_test.vdb文件。
以上三个选项编译仿真过程都要加上。下面的选项在编译过程加上。

-cm_log + filename.log:.log文件记录仿真过程中统计覆盖率的信息。用的比较少。
-cm_nocasedef: 在统计case语句的条件覆盖率时,不考虑default条件未达到的情况。
-cm_hier vcs_cov.cfg:通过.cfg文件(名字随便取)选择要查看覆盖率的模块/文件。

“+”代表查看,“-”代表不查看。
tree代表查看某个模块调用的子模块。

在文件内部,可以使用特殊注释来打开和关闭代码覆盖率的统计:

//VCS coverage on 统计代码覆盖率

//VCS coverage off 不统计代码覆盖率

在上述注释之间的内容,统计覆盖率。其余地方不统计。

修改VCS入门教程()中的makefile,新增统计代码覆盖率的内容
.PHONY:com sim debug cov clean

OUTPUT = cov_test
ALL_DEFINE = +define+DUMP_VPD

#code coverage command
CM = -cm line+cond+fsm+branch+tgl
CM_NAME = -cm_name ${OUTPUT}
CM_DIR = -cm_dir ./${OUTPUT}.vdb
//-cm :打开对应类型的覆盖率,例如 -cm cond+tgl+lin+fsm+path为统计上述所有覆盖率。可根据需要增减。
//-cm_name:设置记录有覆盖率信息文件的名字。
//-cm_dir:指定生成文件的目录。实际上 -cm_name 是为了给 .vdb 文件命名,
//-cm_dir ./ ${OUTPUT}.vdb 是指定 .vdb 文件生成路径为 ./ 。   ./ 代表在当前目录下生成.因为OUTPUT = cov_test,所以最后在当前目录生成了 cov_test.vdb文件。


VPD_NAME = +vpdfile+${OUTPUT}.vpd

VCS = vcs -sverilog         //-sverilog 打开对Systemverilog的支持,编译Systemverilog文件时使用。
     +v2k                   //+v2k是使VCS兼容verilog 2001以前的标准。
     -timescale=1ns/1ns     //-timescale=1ns/1ns 设置仿真精度
	  -o ${OUTPUT}		 // -o simv_file 编译默认产生的可执行文件为simv,可以使用 -o 更改可执行文件名。		
	  -l compile.log	 //使用-l run.log 记录终端上产生的信息。
	  ${VPD_NAME}				\
	  ${ALL_DEFINE}				\
	  ${CM}					\
	  ${CM_NAME}				\
	  ${CM_DIR}				\
	  -debug_pp 		//-debug_all用于产生debug所需的文件。将 -debug_all 选项 更改为 -debug_pp。打开生成 VPD 文件的功能,关掉UCLI的功能,节约编译时间。		\
	  -Mupdate              // -Mupdate 源文件有修改时,只重新编译有改动的.v文件,节约编译时间。
// -R 编译后立即运行,即编译完成后立即执行 ./simv
//-l readme.log 用于将编译产生的信息放在log文件内。


SIM = ./${OUTPUT} ${VPD_NAME} 			\
	  ${CM}					\
	  ${CM_NAME}				\
	  ${CM_DIR}				\
      -l ${OUTPUT}.log  
//-cm_log + filename.log: .log文件记录仿真过程中统计覆盖率的信息。用的比较少。
//-cm_nocasedef:           在统计case语句的条件覆盖率时,不考虑default条件未达到的情况。
//-cm_hier vcs_cov.cfg:   通过.cfg文件(名字随便取)选择要查看覆盖率的模块/文件。

com://编译
	${VCS} -f filelist.f  //使用-f verilog_file.f 选项,即可将.f文件里的源码全部编译。

sim://仿真
	${SIM}

#show the coverage
cov:
	dve -covdir *.vdb &

debug:
	dve -vpd ${OUTPUT}.vpd &
	
clean:
	rm -rf ./csrc *.daidir *.log simv* *.key *.vpd ./DVEfiles ${OUTPUT} *.vdb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在哪我是谁啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值