代码覆盖率是什么?如何查看?

时间:2022-07-22
本文章向大家介绍代码覆盖率是什么?如何查看?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

覆盖率分为代码覆盖率和功能覆盖率,代码覆盖率常用来作为测试好坏的指标,包含:行覆盖率、条件覆盖率、fsm状态覆盖率、翻转覆盖率和分支(branch)覆盖率5种。

行覆盖率

又称为语句覆盖,用于度量被测量代码中的每个“可执行语句”是否被执行到了,“可执行语句”不会包括代码注释、空行等。

翻转覆盖率

翻转覆盖率的检测检查0-1,1-0跳变,确保每个节点都有0-1,1-0跳变,其检查的对象有:寄存器 、线网变量、 存储单元(需要在编译时打开+memcbk选项)

需要注意的是:x-1和x-0跳转不会做统计。此外,翻转覆盖率消耗更多的资源。

条件覆盖率

条件覆盖率会统计未覆盖到的条件。

状态覆盖率

会查看所有的状态是否被覆盖到,但所有的状态都覆盖到不代表状态之间的跳转覆盖了,还要看各个状态之间的跳转是否满足。

路径覆盖率

代码中一条令下有多个if语句时相当于&,这样的路径才能进一步往后走,if越多路径越长,此时需要判断所有路径都被覆盖到。

覆盖率的查看需要在编译(compile)和仿真(simulation)时设置开关选项,设置的开关选项核心为两个:

-cm <file_type>: -cm <file_type>

用于指定要统计的覆盖率类型,以下列指令为例:-cm line+tgl+fsm+branch+cond 添加该指令后,会统计指定类型的覆盖率信息。

-cm_dir <file_dir> -cm_dir <file_dir>

用于指定转储生成的统计文件的目录,以下列指令为例:-cm_dir ./{OUTPUT}.vdb目录,该目录中存放统计信息文件。如果不添加该指令的话,默认生成的保存覆盖率文件的目录为simv.vdb 在统计时需要的指令为:

dve -covdir simv.vdb &

接下来以一个代码工程为例(源代码后台回复:Coverage获取)进行演示说明:

首先是编译:

vcs ../tb/fsm_top.v ..tb/hello.c ../rtl/fsm_moore.v -debug_all -cm line+tgl+fsm+cond+branch -timescale=1ns/1ns

然后是仿真:

./simv -cm line+tgl+fsm+cond+branch

最后查看覆盖率:

dve -covdir simv.vdb &

演 示

(源代码获取方式,后台回复:Coverage