代码覆盖率和功能覆盖率

本文转载自:数字IC笔试题(9)——代码覆盖率、功能覆盖率 - 知乎

覆盖率 2 个大方面:代码覆盖率,功能覆盖率。

一、代码覆盖率

代码覆盖率主要包括:

(1)分支覆盖率;

(2)语句覆盖率

(3)翻转覆盖率

(4)条件覆盖率;

(5)状态机覆盖率;

代码覆盖率:

白盒覆盖率,一般仿真工具都有这个自动统计功能(需要使用工具时添加开关,打开相关覆盖率检查选项)。代码覆盖率达到 100% 不代表设计没有问题。

(1)分支覆盖率(Branch coverage

针对 if…else、case 等分支语句,看代码中设计的分支是否都被测试到了。

针对 if(条件1),只要条件 1 取 true 和 false 都执行过,则这个分支就完全覆盖了。

(2)语句覆盖率(Statement Coverage

语句覆盖率上不去时,可以查看未覆盖处的代码是测试用例的疏忽、冗余代码或是保护用途的代码,比如case的default(如果出现此类,一般是case的条件已经全部列出,可以将最后一个条件改为default);

(3)翻转覆盖率(Toggle coverage

包括两态翻转(0/1)和三态翻转(0/1/Z),常用的是两态翻转。对于单比特信号而言,若仿真用例使得该信号从0到1和从1到0的翻转均发生,则认为这里的翻转覆盖率是全面的(100%)。

即使翻转覆盖率达到 100%,分支覆盖率和语句覆盖率也不一定达到 100%。

(4)条件覆盖率(Conditional coverage

条件覆盖率可以看作是对分支覆盖率的补充。每一个分支条件表达式中,所有条件的覆盖。

比如:

if(a&& b)

statement1;

else

statement2;

测试用例:a=1,b = 1 和 a = 0,b = 1

分支覆盖率 100%,两个分支都覆盖了,但是条件覆盖率不是 100%,有判断条件没有被测试到。

(5)状态机覆盖率(FSM coverage

状态机覆盖率主要检查当前状态到下一个状态的跳转是否都跳转过。

如下状态机实现代码中,需要分析其 FSM 覆盖率的分支有哪几个?

A. curr_st 为 1,next_st 为 2;

B. curr_st 为 2,next_st 为 3;

C. curr_st 为 3,next_st 为 0;

D. curr_st 为 0,next_st 为 1;

答案:ABD

解析:

A.curr_st 为 1,next_st 为 2,有这种跳转,对;

B.curr_st 为 2,next_st 为 3,有这种跳转,对;

C.curr_st 为 3,next_st 为 0,没有这种跳转,错;

D. curr_st 为 0,next_st 为 1,有这种跳转,对;

 

二、功能覆盖率

又称黑盒测试覆盖率,只关心功能,不关心具体的代码是如何实现的。如果想要统计功能覆盖率,需要在 SystemVerilog 编写的测试用例中添加覆盖组(需要根据功能写测试变量的覆盖率,工具按照覆盖率统计覆盖率),仿真器基于它来统计功能覆盖率。

实现方式主要分为覆盖点(coverage points)和断言(arrertion)。

三、总结:

代码覆盖率 100% 不代表功能没问题。

(1)功能覆盖率高但是代码覆盖率低

分析未覆盖到的代码,推断仿真是否有遗漏的功能点,代码是否为冗余或不可达代码;

(2)功能覆盖率低但是代码覆盖率高

仿真用例没有关注到一些功能点,需要修改测试用例。

  • 5
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值