目录
// VCS coverage off // VCS coverage on
引言
按照视频的讲解进度,继续学习 VCS的使用。
前几篇文章:
本文主要是 关于 代码覆盖率 。(很重要)
本系列文章建议电脑端查看~~
代码覆盖率
行覆盖率一般要求达到99%以上,否则,可能是设计存在冗余,意味着面积增大,成本增加。
覆盖率类型
代码覆盖率分析流程
实际操作
这里拿我之前写过的一个状态机设计进行实验。源码见下面的博客链接:
FSM实例——按键消抖及状态检测https://blog.csdn.net/qq_43045275/article/details/124394454
仿真文件最后的 $stop 改成 $finish
这里就分享一下我的makefile吧。供参考~~
.PHONY: com cov clean debug
OUTPUT = simv_FSM_EXP
VPD_SW_DEFINE = +define+VPD_TEST
INC_C_DIR = ./RTL/my_printf.c
# code coverage command
CM = -cm line+cond+fsm+branch+tgl
CM_NAME = -cm_name $(OUTPUT)
CM_DIR = -cm_dir ./$(OUTPUT).vdb
# vpdfile name
VPD_NAME = $(OUTPUT).vpd
# compile command
VCS = vcs -full64 -cpp g++-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed \
-simprofile \
-sverilog +v2k -timescale=1ns/1ns \
-debug_access+r \
-Mupdate \
+notimingcheck \
+nospecify \
+vcs+flush+all \
$(VPD_SW_DEFINE) \
-o $(OUTPUT) \
-l compile.log \
$(CM) \
$(CM_NAME) \
$(CM_DIR) \
-cm_hier ./vcs_cov.cfg
# simulation command
SIM = ./$(OUTPUT) \
-l $(OUTPUT).log \
$(CM) $(CM_NAME) $(CM_DIR) \
$(VPD_NAME) \
# start complie
com:
find -name "*.v" >filelist.f
$(VCS) -f filelist.f
# start simulation
sim:
$(SIM)
#mv vcdplus.vpd $(VPD_NAME)
# show the coverage
cov:
dve -full64 -covdir *.vdb &
debug:
dve -full64 -vpd $(OUTPUT).vpd &
# start clean
clean:
rm -rf ./csrc *.daidir *.log *.vpd *.vdb simv* *.key *race.out* *.so.* *profile* *.f
仿真执行完毕后,通过下面的命令查看:
dve -covdir *.vdb &
打开之后就可以分析覆盖率的各项指标:
也可以生成 txt 或 html 格式的文件:
File——>Generate URG Report...——>勾选需要的 Report Format ——>Run
产生完成后可以通过 下面的 Browse Report 打开,或者直接通过火狐浏炼器打开 。
// VCS coverage off // VCS coverage on
比如在设计文件中加入:
或者:
// synopsys translate off 表示该部分的电路不会进行综合。
模块屏蔽/添加
如果在分析时,也不分析某整个模块的情况。可以通过下面方法实现:
在工程文件夹里面创建任一个文件,文件名可以随意取;文件里面加入:
只看某个模块的覆盖率情况,则把上面配置里面的 - 换成 + 即可。