首页 > 其他分享 >代码覆盖率和功能覆盖率之间的区别

代码覆盖率和功能覆盖率之间的区别

时间:2022-09-02 07:55:24浏览次数:66  
标签:语句 功能 区别 覆盖率 代码 设计规范 执行

代码覆盖率

代码覆盖率直接来自设计代码。它不是用户指定的。代码覆盖的优点之一是它自动评估设计的源码在仿真/回归期间被执行的程度,从而识别设计源码中在仿真期间未被执行的结构。与功能覆盖率不同,代码覆盖率的主要好处之一是创建结构覆盖模型是一个自动过程。因此,将代码覆盖率集成到现有的仿真流程中很容易,并且不需要更改当前的设计或验证方法:

– 分析是否涵盖了设计结构(即行、变量翻转、assign、分支路径、表达式、状态、状态转换等)

– 但不分析设计的意图:

  • 如果用户指定的busGnt = busReq && (idle || !(reset))

  • 而不是真正的意图busGnt = busReq && (idle && !(reset)) 代码覆盖率并不会捕获这个错误。因此,我们既需要一个健壮的TestBench来找出功能性错误,又需要一种客观地评价TestBench健壮程度的方法。

行覆盖率

行覆盖率是一种代码覆盖率指标,用于识别在仿真过程中执行了哪些代码行。行覆盖率报告具有与代码的每一行相关联的统计,指出该行已执行的总次数。行代码执行次数统计不仅可用于识别从未执行过的代码行,而且在工程师认为需要最小行执行阈值才能实现充分测试时也很有用。

行覆盖率分析通常会发现,由于缺少输入激励,激活一行代码所需的情况并未发生。或者,行覆盖率分析可能会显示代码的数据和控制流阻止它是由于代码中的错误,或在某些 IP 配置下当前不需要的死代码。对于未使用或死代码,可以选择在覆盖率记录和报告步骤中排除或过滤此代码,这样就可以只关注相关代码。

语句(表达式)覆盖率

语句覆盖率是一种代码覆盖率指标,用于识别代码中的哪些语句在仿真期间已被执行。一般来说,语句覆盖率比行覆盖率更有用,因为一条语句可能跨越多行代码,或者多条语句可能出现在单行代码中。

用于语句覆盖率分析的报告将具有与代码的每一行相关联的计数,指示语句已执行的总次数。此语句执行计数值不仅可用于识别从未执行过的代码行,而且在工程师认为需要最小语句执行阈值才能实现充分测试时也很有用。

100% 的语句覆盖率意味着 100% 的行覆盖率。但相反的情况并非如此:一行可能包含多个语句,而一个测试可能无法成功执行所有语句。

条件(分支/决策/路径)覆盖率

条件覆盖率(也称为决策覆盖率)是一种代码覆盖率指标,它报告在控制结构(例如 if、case、while、repeat、forever、for 和 loop 语句)中测试的布尔表达式是否被评估为 true 和 false 。

有限状态机覆盖率

今天的代码覆盖率工具可以识别 RTL 源代码中的有限状态机。因此,这使得自动提取 FSM 代码覆盖率成为可能,例如,进入状态机的每个状态的次数以及 FSM 从一个状态转换到其每个相邻状态的次数。

请注意,代码覆盖率工具不知道哪些状态转换是有效的。它将报告所有未被覆盖的状态转换。必须清除这些未发现的状态转换中,哪些是不关心的。

功能覆盖率

功能覆盖率是检测我们是否已经覆盖了设计规范要求的功能。我们是否涵盖了设计规范要求的所有功能?例如,可能有 100% 的代码覆盖率,但功能覆盖率可能只有 50%。仅涵盖 RTL 代码的结构(代码覆盖率)并不能保证我们在功能上涵盖了 RTL 实际打算设计的内容。在这种情况下,显然不能自动创建功能覆盖矩阵。我们必须仔细研究设计规范并使用“covergroup”、“coverpoint”、“bins”等手动创建功能覆盖矩阵。

所以,如何创建功能覆盖率:

– 用户指定:识别需要进行功能覆盖率检测的设计规范中的功能。这是一个必须根据设计规范手动实现的过程。

– 基于设计规范(正如我们已经看到的断言的“cover”)。

– 检测设计意图的覆盖率。

– 面向控制的覆盖率:

  • 是否执行了读取周期支持的所有可能协议(例如burst、non-burst)?

  • 翻转覆盖率

  • 交叉覆盖率

– 面向数据的覆盖率:

  • 我们是否在所有粒度级别(奇数字节、偶数字节、字、四字、完整缓存行等)访问了缓存行(catch lines,即最小缓存单位)?

 

标签:语句,功能,区别,覆盖率,代码,设计规范,执行
From: https://www.cnblogs.com/fuqiangblog/p/16648455.html

相关文章

  • Spring装配bean之通过 XML代码装配 bean
      在Spring中,对象无需自己查找和创建与其所关联的其他对象。相反,容易负责把需要相互协作的对象引用赋予各个对象。例如,一个订单管理的组件需要信用卡认证组件,但它不需要......
  • JS中==和===的区别
    ==和===的区别使用双等号进行相等判断时,如果两边的类型不一致,则会进行强制类型转化后再进行比较;使用三等号进行相等判断时,如果两边的类型不一致时,不会做强制类型准换,直......
  • 代码源#960. 一个大整数(用DP实现组合计数)
    题目:​ 给出一个很大的整数x,以质因数分解的方式给出,请问有多少对x的因子是互质的。分析:​ 来枚举一下样例,可以发现12的因子有1,2,3,4,6,12。互质的因子对为(1,1),(1,......
  • linux shell中'',""和``的区别
    linuxshell中'',""和``的区别-XuFeng-博客园 https://www.cnblogs.com/Skyar/p/5914942.html今天学习一个bash脚本,看到有一条:bin=`dirname"$0"`(dirnamefilenam......
  • 题02-线性结构1 两个有序链表序列的合并(代码和笔记)
    @目录题目思路补充的代码题目本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:ListMerge(ListL1,ListL2);其中Li......
  • [转]CMake与Make最简单直接的区别
    写程序大体步骤为:1.用编辑器编写源代码,如.c文件。2.用编译器编译代码生成目标文件,如.o。3.用链接器连接目标代码生成可执行文件,如.exe。但如果源文件太多,一个一个编译......
  • 并发测试代码学习
    #!/usr/bin/python3#-*-coding:utf-8-*-importbase64importosimporturllibimportnumpyasnpimportrequests,time,json,threading,randomclassPresstest(o......
  • 低代码平台amis学习 四:一个表单添加多个按钮,不同按钮触发不同请求
    通过上一节的学习,了解到如何在amis表单中发送网络请求,本文继续处理一种场景:一个表单中有多个按钮,点击不同按钮时,可以触发不同的网络请求回想一下,在之前的表单配置中,发送......
  • 同一公司开发的多个软件,可以用同一张代码签名证书吗?
    软件代码需要使用代码签名证书完成数字签名后,才能在系统中顺畅运行。在实际应用中,一家软件公司开发的软件产品不止一款,那么一张代码签名证书只能签名一款软件产品吗?如果同......
  • 华为代码规范
    总体原则 1、清晰第一 2、简洁为美 3、选择合适的风格,与代码原有风格保持一致1 头文件对于C语言来说,头文件的设计体现了大部分的系统设计。 原则1.1头文件中适......