代码覆盖率是什么?如何查看?
覆盖率分为代码覆盖率和功能覆盖率,代码覆盖率常用来作为测试好坏的指标,包含:行覆盖率、条件覆盖率、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)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- UiAutomator源码学习(3)-- UiObject
- RTSP协议视频流媒体播放器EasyPlayer-RTSP-OCX接口文档API接口函数定义
- Python逐行写入
- C++ this 指针
- C++ push方法与push_back方法
- 别人变强靠天赋,而我,靠思维导图
- Spring Boot 五种热部署方式
- 二叉树最小深度
- 一日一技:限定Python函数只能被特定函数调用
- 四种ABAP单元测试隔离(test isolation)技术
- Python使用对象方式获取字典的值
- Hive整合HBase实现数据同步
- [数据结构与算法] 盘点工作中常用的算法
- MyBatis_resultMap 的关联方式实现多表查询(多对一)
- MyBatis_resultMap的N+1方式实现多表查询(多对 一)