SV中基于覆盖率驱动验证技术(CDV)和生成-查看覆盖率报告
目录
基于覆盖率驱动的验证技术(CDV):
代码覆盖率
断言覆盖率
定义功能覆盖率模型
covergroup解释
功能覆盖率的采样事件
定义覆盖点:bins
定义覆盖点:条件覆盖
定义覆盖点:状态跳转覆盖
定义覆盖点:交叉覆盖
生成覆盖率报告和查看覆盖率报告:
微信公众号
基于覆盖率驱动的验证技术(CDV):
覆盖率是对RTL设计功能进行验证后达到的覆盖百分比
(1)检查过程需满足完整性,就是cover到文档中所有功能;
(2)满足正确性;
代码覆盖率
衡量测试案例验证-覆盖了哪些设计规则在RTL中实现了,而不能衡量验证计划;
1、行(Line Coverage):RTL中的代码行;
2、有限状态机(FSM Coverage):RTL代码中的有限状态机的状态和状态之间的转换;
3、路径(Path Coverage):RTL代码中的路径分支(if-else语句);
4、信号翻转(Toggle Coverage):RTL代码中的一个信号从0跳变到1,以及1跳变到0;
5、表达式(Expression coverage):RTL代码中的条件表达式,例如if(a&b&c);
断言覆盖率
Assertion Coverage断言覆盖率:
1、断言是一种声明性的代码,一般插到RTL中,用于检查RTL代码中的信号之间的关系,也就是做时序检查;
定义功能覆盖率模型
covergroup解释
作用:
(1)封装覆盖率模型的规格,是用户定义的一种;结构类型
(2)每个covergroup包含以下内容:一个时钟事件,用于同步采样覆盖点;一组覆盖点;
(3)跟class类似,完成定义后,可以通过构造函数new()
生成covergroup
的实例;
(4)covergroup
可以定义在module
,program
,interface
,class
中;
功能覆盖率的采样事件
带有event
触发的covergroup
,当验证平台触发trans_ready
事件时,采样CovPort
;
event trans_ready;
covergroup CovPort @(trans_ready);
coverpoint ifc.cb.port;
endgroup
这里的trans_ready
可以换成ck.sample()
、@(posedge clk)
、@(port)
定义覆盖点:bins
定义bins时
(1)用户限制覆盖率统计时需要的数值;
(2)SystemVerilog不再自动创建bins,并且忽略非用户定义的bins值;
(3)只有用户定义的bins的值才可以用于计算机功能覆盖率;
covergroup CovKind;
coverpoint tr.kind {
bins zero = {0};
bins lo = {[1:3],5};
bins hi[] = {[8:$]};
bins misc=default;
}
endgroup
定义覆盖点:条件覆盖
(1)使用关键字 iff
为覆盖点添加条件
当reset=1时,不收集覆盖率
covergroup CoverPort;
covergroup port iff(!bus_if.reset);
endgroup
(2)使用start和stop函数
在reset序列期间,停止收集覆盖率
initial begin
CovPort ck=new;
#1ns bus_if.reset=1;
ck.stop();
#100ns bus_if.reset=0;
ck.start();
...
end
定义覆盖点:状态跳转覆盖
(1)用户定义覆盖点的状态跳转,并收集相关的信息
covergroup CoverPort;
coverpoint port{
bins t1=(0=>1),(0=>2),(0=>3);
bins t2=(1,2=>3,4)
}
endgroup
(2)使用?等通配符表示状态和状态跳转
bit [2:0] port;
covergroup CoverPort {
wildcard bins even={3'b??0};
wildcard bins odd={3'b??1};
}
endgroup
定义覆盖点:交叉覆盖
在覆盖率组中,可以定义两个或多个覆盖点或者变量之间的交叉覆盖率
class Transaction;
rand bit [3:0] kind;
rand bit [2:0] port;
endclass
covergroup CovPort
kind: coverpoint tr.kind; // 0~15
port: coverpoint tr.port; // 0~7
cross kind,port;
endgroup
也就是有16 x 8 个仓(bin)
生成覆盖率报告和查看覆盖率报告:
vcs -sverilog covergroup.sv -debug_all -R -Mupdate
(1)使用-Mupdate进行增量编译,再次编译时只编译改变的文件,提高速率;
(2)vcs仿真的2个步骤:
代码编译:如 vcs cpu.v
仿真运行:如 simv
或者通过-R选项将2个步骤合成一步:
编译运行:如vcs -R cpu.v,
-R :run after compilation,编译后继续执行run
sim.vdb
就是覆盖率文件
两种方法打开sim.vdb
查看覆盖率:
(1)dve -cov&
,然后打开覆盖率文件就可以查看
(2)urg -dir ./*.vdb -format both -report coverage
,这个就是生成html和text两种格式覆盖率报告,放在coverage文件夹里,然后进入coverage文件夹,firefox dashboard.html
和gvim dashboard.txt
两种方式都可以打开覆盖率报告。
Makefile
微信公众号
建立了一个微信公众号“Andy的ICer之路”,此公众号主要分享数字IC相关的学习经验,文章主要在公众号上发,csdn会尽量同步更新,有兴趣的朋友可以关注一下!
SV中基于覆盖率驱动验证技术(CDV)和生成-查看覆盖率报告相关推荐
- SystemVerilog基于覆盖率驱动验证技术(CDV)和生成-查看覆盖率报告
作者:小白蒋 所有的努力都是为了做个小白,单纯且快乐~ 本文内容 基于覆盖率驱动的验证技术(CDV): 代码覆盖率: 断言覆盖率 定义功能覆盖率模型 covergroup解释 功能覆盖率的采样事件 定 ...
- 【转载】【《Real-Time Rendering 3rd》 提炼总结】(九) 第十章 · 游戏开发中基于图像的渲染技术总结
本文由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/78309500 这是一篇近万字的总结式 ...
- 【《Real-Time Rendering 3rd》 提炼总结】(九) 第十章 · 游戏开发中基于图像的渲染技术总结
本文由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/78309500 这是一篇近万字的总结式 ...
- WWW 2020 | 信息检索中基于上下文的文本词项权重生成
©PaperWeekly 原创 · 作者|金金 单位|阿里巴巴研究实习生 研究方向|推荐系统 本文由卡耐基梅隆大学发表于 WWW 2020,介绍了基于上下文的文本词项权重生成方法 HDCT.原有的搜索 ...
- catia制作物料明细_一种基于CATIA的国标标准物料清单的生成方法与流程
本发明涉及一种物料清单的生成方法,尤其涉及一种基于CATIA的国标标准物料清单的生成方法. 背景技术: 众所周知,CATIA是法国达索公司的产品开发旗舰解决方案.作为PLM协同解决方案的一个重要组成部 ...
- 【SystemVerilog基础】基于覆盖率驱动(CDV)的验证方法快速上手指南
覆盖率驱动(CDV)可以用来衡量我们的验证进度,简而言之就是,看我们验了半天验到了什么程度.当然最核心的还是保证我们验证完备性,我们能识别到的点都要验证到.需要澄清的是,覆盖率达到要求,并不能说验证就 ...
- 详解Linux2.6内核中基于platform机制的驱动模型 (经典)
[摘要]本文以Linux 2.6.25 内核为例,分析了基于platform总线的驱动模型.首先介绍了Platform总线的基本概念,接着介绍了platform device和platform dri ...
- 【机器学习】图解机器学习中的 12 种交叉验证技术
今天我给大家盘点下机器学习中所使用的交叉验证器都有哪些,用最直观的图解方式来帮助大家理解他们是如何工作的. 数据集说明 数据集来源于kaggle M5 Forecasting - Accuracy[1 ...
- 详解Linux2.6内核中基于platform机制的驱动模型
原文地址:详解Linux2.6内核中基于platform机制的驱动模型 作者:nacichan [摘要]本文以Linux 2.6.25 内核为例,分析了基于platform总线的驱动模型.首先介绍了P ...
最新文章
- 前谷歌高管给初入职场新人的14条忠告
- 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第2章-基于速度估计的多欧拉-拉格朗日系统分布式控制
- css点击a标签显示下划线_好程序员HTML5培训教程-html和css基础知识
- 上海计算机协会竞赛平台——整除
- antd upload手动上传_Flask上传文件
- python笔记之函数参数(缺省参数,命名参数,不定长参数)
- sns.load_dataset使用报错解决URLError: <urlopen error [Errno 11004] getaddrinfo failed>(windows))
- 点开那些优秀的硕博士们的朋友圈,他们都有这些特点!
- JavaSE基础知识(6)—异常和异常处理
- 的表格点击全选_“逼死”强迫症的杂乱表格,原来3秒就能整理好!(必学)...
- 从链接中获取文件名及扩展名
- 最强战队出炉,2020腾讯广告算法大赛圆满落幕
- 今天为你分享互联网营销的两个核心思维
- 几个大厂及 RCE漏洞二三事
- 【iOS开发】swift 3.0 延长设置launch image启动页面图片显示时间
- java接收jsonarray_java-如何通过JSONArray获取API的数据
- MySQL大表优化方案,单表优化、读写分离、缓存、分区表……都在这里了
- 可供创业团队技术开发参考的10条经验
- myeclipse安装使用svn
- SocksCap代理
热门文章
- c语言编程球球大作战,C/C++项目源码——球球大作战
- internet和Internet的区别
- 简易的安卓天气app(一)——解析Json数据、数据类封装
- linux恢复到某一时间点,使用回滚磁盘功能如何实现将一块云盘的数据恢复到之前的某一时刻...
- Lazarus2.0.12 如何停靠面板
- android新技术 1
- 《朱子家训》-朱用纯
- Excel提取年月日①
- python教学课件PPT Java教学课件ppt以及代码
- 晒晒我这两年的私活单,业余时间月入6k