代码覆盖率、功能覆盖率分析
代码覆盖率、功能覆盖率分析
- 一、代码覆盖率
- 1.Block覆盖率
- 2.Expression覆盖率
- 3.Toggle覆盖率
- 4.FSM覆盖率
- 二、功能覆盖率
- 1.拟定check功能点
- 2.编写SV程序收覆盖率
对于模块中一些已经验过或流片过的IP,不用再关注覆盖率;对于其他模块,需要关注以下覆盖率。
一、代码覆盖率
DV其实不用很关注RTL中的实现细节,所以分析代码覆盖率的大部分工作都是DE来做。
1.Block覆盖率
Block覆盖率是指行覆盖率、条件覆盖率,检查if-else、case等语句中每一行是否运行到。
如果有些行没有执行到,要考虑if-else或case中的一些条件是否能达到,如果可以达到,需要增加case再次收覆盖率,如果不能需要给出原因(包括RTL程序实现方式的限制、通信协议限制等原因)。
2.Expression覆盖率
Expression覆盖率会检查每个表达式的覆盖率,如&&、||、?:等运算符连接的表达式。
得到的覆盖率结果会指出由以上运算符连接的每个表达式的值是否会== 0和== 1,要考虑每个表达式是否能达到== 0和== 1,如果可以达到,需要增加case再次收覆盖率,如果不能需要给出原因(包括RTL程序实现方式的限制、通信协议限制等原因)。
注:使用问号冒号?∶表达式会导致覆盖率工具会检测“冒号”左右两侧的表达式是否会== 0和== 1,如果“冒号”左右两侧的表达式是多个bit的信号,很多情况是不需要检测其每个bit都为0值的,使用always块用if-else写程序会避免?∶表达式导致的Expression覆盖率降低问题,或者在分析覆盖率时exclude掉?∶的这种情况也可以。
3.Toggle覆盖率
Toggle覆盖率会检查reg和wire的每个bit是否都翻转过。
如果有些bit没有翻转,要考虑是否能通过增加case实现翻转,如果不能需要给出原因(包括RTL程序实现方式的限制、通信协议限制、静态寄存器值、从几个常数中选一个导致某些bit 不会翻转、数值一定是偶数导致最低bit不会翻转、每次自增8导致低3bit不会翻转、最大值达不到最大位宽导致一些高bit不会翻转等原因)。
4.FSM覆盖率
FSM覆盖率会检查FSM各个状态之间的跳转是否都覆盖到。
如果有些状态之间没有跳转,要考虑是否能通过增加case实现跳转,如果不能需要给出原因(包括RTL程序实现方式的限制、通信协议限制等原因)。
通常情况下会检测到RST_IDLE没有被其他状态跳转到,可以让DV增加在各个状态产生硬件RESET来实现这种情况的覆盖。
二、功能覆盖率
1.拟定check功能点
例如模块是一个802.11ax通信系统中的一个模块,可以拟定如下check点。
PPDU类型 | 编码方式 | Nss | MCS | … |
---|---|---|---|---|
HE SU | BCC、LDPC | 1、2 | 0-11 | … |
HE MU | BCC、LDPC | 1、2 | 0-11 | … |
HE ER SU | BCC、LDPC | 1 | 0、1、2 | … |
对于以上check点,可以进行cross check,例如同时检查BCC && MCS == 0、LDPC && MCS==11的情况。
确定了check功能点后,我们就需要跑回归,检查所有case是否覆盖到了全部的功能点,如果有些没覆盖到,需要分析这种 check 点是否合理(是否符合通信协议),如果是合理的就需要增加case实现覆盖。
2.编写SV程序收覆盖率
SV程序中使用covergroup结构实现功能点收集的功能,如果在每个cycle都采集信号,要注意选择正确的触发信号,避免每个cycle都采集导致得到的覆盖率不正确(有些功能点实际没有覆盖到但是在每个cycle都采集,imc中会显示采集到了,导致虚假覆盖),例如对于上述802.11ax通信系统,每个PPDU只在DATA字段采集一次单个cycle的信号即可收集到关注的信号。
代码覆盖率、功能覆盖率分析相关推荐
- 功能覆盖率与代码覆盖率区别
功能覆盖率与代码覆盖率区别 Functional coverage vs Code coverage Code coverage as the name implies measure the cov ...
- 嵌入式仿真平台SkyEye的覆盖率分析
随着嵌入式系统也越来越复杂,功能迭代越来越多,代码中就可能就会存在部分无用代码,或者在执行过程中无法测试覆盖的分支,这可能就会给软件带来很大的漏洞,严重降低软件的可靠性.因此,需要一个能够动态分析代码 ...
- php xdebug测试,使用XDebug调试及单元测试覆盖率分析
今天我就就自己对XDebug使用的一些体验做一小段分享.XDebug也是因为需要是用来生成覆盖率分析文件才安装的,刚接触不久,平时用的也不是很频繁,但是这个的确是一个好工具,如果想要依赖它来分析程序的 ...
- 觉SLAM的主要功能模块分析
视觉SLAM的主要功能模块分析 一.基本概念 SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and L ...
- go kegg_3分钟了解GO/KEGG功能富集分析
"大数据"."组学"."数据挖掘"是近几年来我们经常听到的词汇,科研工作中也经常用到二代测序,不管送哪家测序公司进行测序或数据分析,结题报告 ...
- Nature子刊:HUMAnN2实现宏基因组和宏转录组种水平功能组成分析
HUMAnN2实现宏基因组和宏转录组种水平功能组成分析 Species-level functional profiling of metagenomes and metatranscriptomes ...
- Microbiome: 再论扩增子功能预测分析(Picrust)的效果
Picrust作为扩增子测序功能预测的工具已经被广泛使用了.但是它会与真实情况存在较大的偏差,详见前文对Picrust局限性的介绍: PICRUSt不灵啦?别慌,它一直都不咋灵~ 此文中我推断预测的准 ...
- Nature Method:HUMAnN2实现宏基因组和宏转录组种水平功能组成分析
文章目录 HUMAnN2实现宏基因组和宏转录组种水平功能组成分析 简介 热心肠日报导读 摘要 主要图表 图1. HUMAnN2分层式搜索在同类软件中准确率最高 图2. 人类核心微生物组的贡献多样性 图 ...
- 功能区域分析--如何将业务架构转化成为IT应用
功能区域分析可以从组件业务模型开始,并可将确定的 CBM 能力作为起点.业务建模的工作由正在研究的业务领域确定范围,所以功能区域分析可从这组初始业务领域中进行选择,然后进一步将它们分解为子领域,并最终 ...
- go分析和kegg分析_干货预警:3分钟搞定GO/KEGG功能富集分析(2)
在 3分钟了解GO/KEGG功能富集分析 一文中给大家讲解了GO和KEGG的基本概念和内涵,并且给大家介绍了DAVID这一神奇网站.今天我们就把GO/KEGG功能富集分析的详细教程按部就班地呈现给大家 ...
最新文章
- “安利”一款debug神器:在AI面前,bug都不是事儿
- python 函数返回值的特殊情况
- python学习之路(九)
- 多亏我缓存技术过硬!疫情防控项目上线,我只用了5天!
- Python和SQL Server 2017的力量
- ArcGIS实验教程——实验八:矢量数据拼接
- Hibernate锁定模式– OPTIMISTIC_FORCE_INCREMENT锁定模式如何工作
- 基于WDF的PCI/PCIe接口卡Windows驱动程序(3)- 驱动程序代码(头文件)
- 链路层到网络层的数据传递
- ctb伺服驱动器说明书_安川伺服驱动器SGDV报警原因及处理措施
- 使用Navicat Premium 同步 测试数据库 与 正式数据库 数据
- 高中会教师证有计算机专业吗,教师资格证 --高中信息技术篇
- Qt+VS+opencv+zbar打开本机摄像头实现二维码扫码识别功能
- IC面试数字电路基础
- 马云在《赢在中国》对创业者的经典点评~
- 金沙滩51单片机LED 闪烁程序
- 6张图!5G六大细分领域产业图谱
- python随机函数random、画、星轨_教你绘制梵高的星空
- 腾讯企业邮箱单点登录无需帐号密码
- 视频教程-wordpress建站教程之环境部署详解课程-PHP
热门文章
- 何新生的英语史(九)—看好莱坞学英语,就是这么简单 2
- BZOJ 5477: 星际穿越
- CentOS7安装DockerCentOS7安装DockerCompose
- HEW3工程链接错误(L2330 (E) Relocation size overflow )及解决
- 二十年后的家乡(小学习作)
- 投稿英文国际会议论文经验总结
- 《雍正皇帝·九王夺嫡》生态文化专有词泰译研究(第一章)
- 当div的宽度为百分比时,如何设置成为一个正方形?
- PostgreSQL11.2下载
- start-stop-daemon 用法