随着设计越来越复杂,采用受约束的随机测试方法(CRT:Constraint random test)是进行全面验证的有效途径。

通过输入随机测试向量到设计中,通过SVA检查设计的正确性。从而达到全面,自动的验证效果。

使用CRT不需要通过特性手动编写测试激励,但是为了确认随机激励中包含了目的数据,需要根据特性、验证计划来追踪测试的有效性。

Coverage覆盖率就是用来检查验证的完备性的工具,无论是定向测试还是随机测试都要使用覆盖率来衡量测试的进行程度。

· 代码覆盖率

1)衡量代码中的哪些内容被执行过 (Block)

2)组合逻辑表达式中执行情况(Expression)

3)信号的翻转覆盖率(flip)

4)有限状态机的状态覆盖率(FSM)

不需要增加任何逻辑,工具会在仿真过程中分析源代码来完成代码覆盖率的统计。

代码覆盖率100%并不代表验证工作的完成,例如在D触发器中复位逻辑被遗漏了,代码覆盖率中每一行都被测试过了,但是实现功能是有问题的。这样的错误是代码覆盖率无法检查出来的。

· 功能覆盖率

检查随机数据中是否包含目标数据,目标数据作为验证配置输入到DUT中,产生目标输出,通过SVA检查正确性。

例如:

covergroup group_name @CLK

coverpoint_name1 : coverpoint signal_1;

coverpoint_name2 : coverpoint signal_2{

bin bin_name1 [] = {[0:5]};

bin bin_name2    = {[6:8]};

}

endgroup

第一行:创建一个组,这个组的名字叫group_name ,触发信号是CLK高电平状态

第二行:在covergroup中建立一个名为coverpoint_name1的覆盖点,对象信号名为signal_1 ,如果没有定义bin的话,工具会默认检查signal_1所有可能出现的数值情况。例如signal_1是4bit位宽,工具在CLK高电平期间检查signal_1是否出现0~15范围内的数值case,并统计每个数值出现的次数。

第三行:在covergroup中建立一个名为coverpoint_name2的覆盖点,对象信号名为signal_2,通过bin指定了signal_2出现的数值情况为0,1,2,3,4,5 ,(6|7|8)。bin_name后接[]表示连续数值。

Function Coverage使用场合

在实际项目中,对时序控制模块一般不需要使用随机验证,根据单独特性配置定向验证Pattern就可以。

而数据处理模块,需要满足范围内的任意数的输入,所以采用随机验证的方式能够达到更全面的验证。而随机验证中就需要通过Function Coverage来确认随机数据中包含了目标数据。

Code Coverage使用场合

实际项目中,一般不会从0开始写代码,都是在已有项目代码的基础上,按照项目需求,对功能进行增删。为了效率化,对新代码,存在修改代码的验证必须使用Code Coverage确保验证完整性。对于流用的代码内容,因为是被验证过的代码,可视项目周期情况来判断是是否进行Code Coverage的验证。

Code Coverage覆盖率合并

按照验证List完成验证流程后,把所有验证Pattern的覆盖率通过工具合并为一个完成覆盖率文件,通过工具查看代码的执行情况。

覆盖率只是验证完成度的一个体现,并不能完全通过覆盖率来判断验证结束。

根据设计功能,特性在前期制订完整的验证计划,以及在验证过程中不断完善验计划才能帮助我们检查出更多问题,保证设计的正确性。

Coverage仿真指令整理

Irun的Coverage Command

-coverage <Coverage 方式>

b:代码块(block)

e:表达式(expression)

t:翻转,切换()

f:FSM状态机

u:function

all:以上所有Coverage 方式

通过:来指定多个coverage方式

-covdut <module name>

指定coverage的目标模块

必须指定目标模块,否则不能合并覆盖率

可指定多个目标模块

通过cell名指定,不能用例化名

Coverage数据库结构

./cov_work                                  //Coverage 数据库目录

|---./design                           //设计名称目录

|---xxx.ucm                  //设计信息文件

|---./test                       //测试名称目录

|---./icc.ucd           //Coverage 文件(固定名称)

-covworkdir <数据库目录名称>   //指定数据库目录名称,默认为cov_work

-covdesign <设计名称>   //指定设计名称,默认为design

-covtest <测试名称>   //指定测试名称,默认为test

Coverage 例:

covergroup read_param @( ready)  //指定触发事件

count : coverpoint count {       //定义采样信号

bins count_low[] = {[0:5]};      //指定采样值的范围

bins count_high   = {[6:10]};

}

endgroup

covergroup env @(posedge start or mode )

slave :coverpoint slave;

master : coverpoint master;

m_to_s : cross slave,master;  //定义slave和master的交叉覆盖

endgroup

read_param r_param = new();

env u_env = new(); //创建实例化

initial begin

#10 count = 1;

-> ready;          //触发条件ready作为一个事件,在采样信号值发生变化时,事件有效数据被采样。

#10 slave = 0;

u_env.sample(); //sample是covergroup的内置方法,调用这样方法时,covergroup的数据被采样

·····

$finish

end

Coverage基础知识整理相关推荐

  1. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

  2. 计算机二级c语基础知识,计算机二级C语基础知识整理.doc

    计算机二级C语基础知识整理 1.1 算法 算法:是一组有穷指令集,是解题方案的准确而完整的描述.通俗地说,算法就是计算机解题的过程.算法不等于程序,也不等于计算方法,程序的编制不可能优于算法的设计. ...

  3. 使用Aspose.Cells的基础知识整理

    使用Aspose.Cells的基础知识整理 转自 http://www.cnblogs.com/kenblove/archive/2009/01/07/1371104.html 这两天用Aspose. ...

  4. 前端基础知识整理汇总(中)

    前端基础知识整理汇总(中) Call, bind, apply实现 // call Function.prototype.myCall = function (context) {context = ...

  5. 前端基础知识整理汇总(上)

    前端基础知识整理汇总(上) HTML页面的生命周期 HTML页面的生命周期有以下三个重要事件: 1.DOMContentLoaded -- 浏览器已经完全加载了 HTML,DOM 树已经构建完毕,但是 ...

  6. centos7创建asm磁盘_Oracle ASM 磁盘组基础知识整理(收藏版)

    为什么要写这么一篇基础知识呢?还是有那么一点点原因的,不是胡编乱造还真是有真实存在的事件的,前两周里因一套生产环境数据库磁盘不足无法对其进行表空间扩容,需要向存储岗申请存储资源,当存储岗划好资源加完存 ...

  7. Web前端基础知识整理

    1. 前端基础知识 文件分类 XML(扩展标记语言) 装载有格式的数据信息,用于各个框架和技术的配置文件描述 特点: 扩展名为.xml 内容区分大小写 标签要成对出现,形成容器,只能有一个 标签按正确 ...

  8. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  9. 矩阵论(零):线性代数基础知识整理(1)——逆矩阵、(广义)初等变换、满秩分解

    矩阵论专栏:专栏(文章按照顺序排序) 线性代数是矩阵论的先修课程,本篇博客整理线性代数的基础理论知识,为矩阵论的学习做准备.限于篇幅,梳理的重点将在定理和结论上(只给出部分必要的定义),对最基础的概念 ...

最新文章

  1. python中isinstance(3、object)_Python中为什么推荐使用isinstance来进行类型判断?而不是type...
  2. Android 10.0 系统服务之ActivityMnagerService-AMS启动流程-[Android取经之路]
  3. 矩阵二范数(norm)
  4. Unity C#单例模式的实现
  5. Winform中怎样重写窗体关闭事件实现验证密码通过才能关闭窗体
  6. mysql按某一字段分组取最大(小)值所在行的数据
  7. ITK:仅将过滤器应用于图像的指定区域
  8. Mysql 数据库水平分表 存储过程
  9. mongodb java 多条件查询_MongoDB_Java连接mongo 使用Java多条件查询mongo数据
  10. 效率提升工具--高级剪贴板Ditto Ditto - Windows剪贴板增强小工具,方便复制粘贴多条记录
  11. android camera2预览方向,Android camera2预览无法在横向模式下正常工作
  12. 【讲座预告】Processing Learner Texts: from Annotation to ...
  13. ip访问次数统计 nginx_nginx访问量统计
  14. 数字抽奖小程序_两款火爆的抽奖小程序,最高抽2000元现金红包 亲测提现8.59元秒到...
  15. Java从excel带图片的导入
  16. 玩手游神助攻:盘点那些具有游戏宏按键,可自定义按键一键多用的模拟器
  17. html 苹果没有出现弹窗,苹果手机弹窗bug是什么情况?苹果手机为什么会出现弹窗bug要怎么解决?...
  18. Nerv实战 - 京东首页改版小结
  19. 视频原理和FFmpeg
  20. scrapy下载斗鱼主播图片

热门文章

  1. 男大学生眼中的完美女大学生
  2. PPT打开显示找不到 ppcore.dll,无法打开 PPT
  3. 概述-数据建模是什么?
  4. Rust的审核团队突然宣布集体辞职
  5. 2019乌鲁木齐·丝绸之路冰雪马拉松天山脚下鸣枪开跑
  6. 微信内隐藏的一个修复功能
  7. Jmeter性能测试-插件
  8. 小车PWM调速-串口控制
  9. 搭建一个vue小页面(入门vue)
  10. 使用Python在图片上增加文字