目录
// 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 打开,或者直接通过火狐浏炼器打开 。
比如在设计文件中加入:
或者:
// synopsys translate off 表示该部分的电路不会进行综合。
如果在分析时,也不分析某整个模块的情况。可以通过下面方法实现:
在工程文件夹里面创建任一个文件,文件名可以随意取;文件里面加入:
只看某个模块的覆盖率情况,则把上面配置里面的 - 换成 + 即可。