SystemVerilog学习 (11)——覆盖率
目录
一、概述
二、覆盖率的种类
1、概述
2、分类
三、代码覆盖率
四、功能覆盖率
五、从功能描述到覆盖率
一、概述
“验证如果没有量化,那么就意味着没有尽头。” 伴随着复杂SoC系统的验证难度系数成倍增加,无论是定向测试还是随机测试,我们在验证的过程中终究需要回答两个问题:
- 是否所有设计的功能在验证计划中都已经验证?
- 代码中的某些部分是否从未执行过。
覆盖率就是用来帮助我们在仿真中回答以上问题的指标。如今,覆盖率已经被广泛采用,作为衡量验证过程中的重要数据。
只有满足以下三个条件,才可以在仿真中实现高质量的验证:
- 测试平台必须产生合适的激励来触发一个设计错误;
- 测试平台仍然需要产生合适的激励使得被触发的错误可以进一步传导到输出端口;
- 测试平台需要包含一个监测器(monitor)用来监测被激活的设计错误,以及在它传播的某个节点(内部或者外部)可以捕捉到它。
二、覆盖率的种类
1、概述
没有任何一种单一的覆盖率可以完备地去衡量验证过程。
即使我们可以达到100%的代码覆盖率,但这并不意味着100% 的功能覆盖率。原因在于代码覆盖率并不是用来衡量设计内部的功能运转,或者模块之间的互动,或者功能时序的触发等。
类似地,我们即便达到了100%功能覆盖率,也可能只达到了 90%的代码覆盖率。原因可能在于我们疏漏了去测试某些功能,或者一些实现的功能并没有被描述。
从上述关于代码覆盖率和功能覆盖率简单的论述就可以证明,如果想要得到全面的验证精度,我们就需要多个覆盖率种类的指标。
2、分类
最常见的划分覆盖率的两种方法
- 按照覆盖率生成的方法,即隐性生成还是显性生成。
- 按照覆盖率溯源,即它们从功能描述而来还是从设计实现而来。
例如功能覆盖率是显性的需要人为定义的覆盖率,而代码覆盖率则是隐性覆盖率这是因为仿真工具可以自动从RTL代码来生成。

如果将上述两个分类的方式进行组合,那么可以将代码覆盖率、 断言覆盖率以及功能覆盖率分别置入到不同的象限。但是需要注意,目前有一个象限仍然处于研究阶段,没有隐性的可以从功能描述生成某种覆盖率的方法,这也是为 什么功能覆盖率依然需要人为定义的原因。
接下来我们将认识主要的两种覆盖率
- 代码覆盖率(隐性覆盖率)
- 功能覆盖率(显性覆盖率)
三、代码覆盖率
衡量验证进展的最简易的方式是使用代码覆盖率。这种方式衡量的是多少行代码已经被执行过(行覆盖率),在穿过代码和表达式的路径中有哪些已经被执行过(路径覆盖率)。哪些单比特变量的值为0或1(翻转覆盖率),以及状态机中哪些状态和状态转换已经被访问过(有限状态机覆盖率)。不用添加任何额外的 HDL代码,工具会通过分析源代码和增加隐藏代码来自动帮你完成代码覆盖率的统计。当运行完所有测试代码覆盖率工具便会创建相应的数据库。
许多仿真器都带有代码覆盖率工具。后续处理工具会把数据库转换成可读格式。最终的结果用于衡量你执行了设计中的多少代码。注意,你的主要关注点应该放在对设计代码的分析上,而不是测试平台。未经测试的设计代码里可能会隐藏硬件漏洞,也可能仅仅就是冗余的代码。
代码覆盖率衡量的是测试对于设计规范的“实现”究竟测试得多彻底,而非针对验证计划。原因很简单.你的测试达到了100%的覆盖率,并不意味着你的工作已经完成。如果你的代码有漏洞但是测试没找到怎么办?或者情况更差一些,如果你的代码实现中遗漏了某个必要的特性怎么办?所以单有代码覆盖率还远远不够。
四、功能覆盖率
验证的目的就是确保设计在实际环境中的行为正确,实际环境可以是MP3播放器、路由器或移动电话。设计规范里详细说明了设备应该如何运行,而验证计划里则列出了相应的功能应该如何激励、验证和测量。当你收集测量数据希望找出哪些功能已被覆盖时,你其实就是在计算"设计”的覆盖率。例如,对D触发器的验证计划除了涉及触发器的数据存储外,还应该检查触发器如何被复位到某个已知状态。在你的测试对这两种设计特性全部进行验证之前、你就不能达到100%的功能覆盖率。
功能覆盖率是和设计意图紧密相连的,有时也被称为“规范覆盖率”,而代码覆盖率则是衡量设计的实现情况。设想某个代码块在设计中被漏掉的情况。代码覆盖率不能发现这个错误,但功能覆盖率可以。
五、从功能描述到覆盖率
要实现功能覆盖率的收敛,就需要按照以下步骤考虑:
- 哪些功能需要测试
- 明白在什么条件下需要测试对应的功能
- 为了测试这些功能,需要提供什么样的测试平台组件以便提供激励和监测
- 测试平台如何检查这些功能正常工作
由于功能覆盖率不是自动的过程,因此它需要将功能描述同设计实现对应起来。
相关文章:
SystemVerilog学习 (11)——覆盖率
目录 一、概述 二、覆盖率的种类 1、概述 2、分类 三、代码覆盖率 四、功能覆盖率 五、从功能描述到覆盖率 一、概述 “验证如果没有量化,那么就意味着没有尽头。” 伴随着复杂SoC系统的验证难度系数成倍增加,无论是定向测试还是随机测试ÿ…...
jQuery,解决命名冲突的问题
使用noConflict(true),把$和jQuery名字都给别人 <body><script>var $ zanvar jQuery lan</script><script src"./jquery.js"></script><script>console.log(jQuery, 11111); // 打印jquery函数console.log($, 222…...
为什么C++标准库中atomic shared_ptr不是lockfree实现?
为什么C标准库中atomic shared_ptr不是lockfree实现? 把 shared_ptr 做成 lock_free,应该是没有技术上的可行性。shared_ptr 比一个指针要大不少:最近很多小伙伴找我,说想要一些C的资料,然后我根据自己从业十年经验&am…...
Python基础入门例程58-NP58 找到HR(循环语句)
最近的博文: Python基础入门例程57-NP57 格式化清单(循环语句)-CSDN博客 Python基础入门例程56-NP56 列表解析(循环语句)-CSDN博客 Python基础入门例程55-NP55 2的次方数(循环语句)-CSDN博客 目录 最近的博文: 描述...
航天联志Aisino-AISINO26081R服务器通过调BIOS用U盘重新做系统(windows系统通用)
产品名称:航天联志Aisino系列服务器 产品型号:AISINO26081R CPU架构:Intel 的CPU,所以支持Windows Server all 和Linux系统(重装完系统可以用某60驱动管家更新所有硬件驱动) 操作系统:本次我安装的服务器系统为Serv…...
windows 10 更新永久关闭
1 winR 输入:services.msc 编辑: 关闭:...
循环优先级仲裁~位屏蔽仲裁算法
参考了FPGA奇哥(下列视频中UP主)的讲解。 应该可以对多路读写DDR3进行操作,仅仲裁,不涉及DMA和Uibuf等。 2023年11月所写,暂未进行测试,日后补上。 第二天已完成测试,功能可行。 深入FPGA底层…...
千年版本修改小技巧
千年门派创建后消失的原因 门派在游戏里创建后重启服务器消失其实就差一个单词name,只要将这个单词加在 guild文件夹里的 createguild.sdb文件里的第一行第一个就可以。可以先将createguild.sdb的内容清空 然后复制以下内容到 createguild.sdb 最后保存下就可以了n…...
教学过程中可以实施哪些考核评价方式?
教学过程中可以实施哪些考核评价方式? 实践技能与理论知识考试结合:旨在综合考察学生对理论知识的掌握程度及其在实践中的运用能力。 模拟仿真与现场考试结合:通过模拟真实场景或者实际操作环境,考察学生在实际情境中解决问题的能…...
MyBatis查询数据库(全是精髓)
1. 什么是MyBatis? 简单说,MyBatis就是一个完成程序与数据库交互的工具,也就是更简单的操作和读取数据库的工具。 2. 怎么学习Mybatis Mybatis学习只分为两部分: 配置MyBatis开发环境使用MyBatis模式和语法操作数据库 3. 第一…...
elementPlus+vue3引入icon图标
安装包管理,推荐使用 yarn npm包有时候会有包冲突,在项目的根目录下执行,在终端下 # Yarn $ yarn add element-plus/icons-vue在main.js或main.ts中进行全局注册,导入所有图标 import * as ElementPlusIconsVue from element-plu…...
Spring框架中的bean管理(XML和注解及属性的注入)
Spring框架中IOC就是将创建对象的权力反转给Spring框架,我们无需自己创建对象,直接在Spring框架的容器中获取即可。 bean中配置的就是需要让Spring管理的类。 XML的bean管理 先写个“HelloWorld”: <bean id"User" class"com.ffyc.…...
MySQL 存储过程提高数据库效率和可维护性
MySQL 存储过程是一种强大的数据库功能,它允许你在数据库中存储和执行一组SQL语句,类似于编程中的函数。存储过程可以大幅提高数据库的性能、安全性和可维护性。本文将详细介绍MySQL存储过程的使用。 什么是MySQL存储过程? MySQL存储过程是一…...
JAXB的XmlElement注解
依赖 如果基于JAX-WS开发,可以在maven工程的pom.xml文件中增加如下依赖,会将依赖的JAXB库也下载下来: <dependency><groupId>jakarta.xml.ws</groupId><artifactId>jakarta.xml.ws-api</artifactId><vers…...
竞赛选题 深度学习驾驶行为状态检测系统(疲劳 抽烟 喝水 玩手机) - opencv python
文章目录 1 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的驾…...
59 权限提升-Win溢出漏洞及ATSCPS提权
目录 知识点必备:windows权限认识(用户及用户组)0x01 普通权限0x02特殊权限 演示案例:基于WEB环境下的权限提升-阿里云靶机基于本地环境下的权限提升-系统溢出漏洞基于本地环境下的权限提升-AT&SC&PS命令 案例给到的思路点总结如下:涉及资源: 这个章节会讲到…...
【新闻稿】Solv 与 zCloak 联合开发跨境贸易场景下可编程数字凭证项目,获得新加坡、加纳两国央行支持...
关于昨天 Solv 携手 zCloak 与新加坡和加纳两个央行合作的 Project DESFT,很多朋友都发来恭喜和祝福,并希望了解详情。这个事我们秘密努力了半年多,终于有一个阶段性的成果。这里我转载中文版官宣新闻稿,欢迎大家关注。等我忙过这…...
requests库进行爬虫ip请求时遇到的错误解决方法
问题背景 在使用requests库进行HTTP请求时,用户遇到了一个AuthenticationRequired(身份验证必须)的错误。然而,当使用urllib.request.urlopen执行相同的操作时,却能够成功。同时,用户提供了自己的系统信息…...
目标检测—YOLO系列(二 ) 全面解读论文与复现代码YOLOv1 PyTorch
精读论文 前言 从这篇开始,我们将进入YOLO的学习。YOLO是目前比较流行的目标检测算法,速度快且结构简单,其他的目标检测算法如RCNN系列,以后有时间的话再介绍。 本文主要介绍的是YOLOV1,这是由以Joseph Redmon为首的…...
Redis维护缓存的方案选择
Redis中间件常常被用作缓存,而当使用了缓存的时候,缓存中数据的维护,往往是需要重点关注的,尤其是重点考虑的是数据一致性问题。以下是维护数据库缓存的一些常用方案。 1、先删除缓存,再更新数据库 导致数据不一致的…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
