类型转换

静态转换

静态转换操作符不对转换值进行检查。转换时指定目标类型,并在要转换的表达式前加上单引号即可。Verilog对整数和实数类型,或者不同位宽的向量之间进行隐式转换。

动态转换

可以将子类的句柄赋值给父类的句柄。但是在将父类的句柄赋值给子类的句柄时,编译将会报错。$cast()系统函数可以将父类句柄转换为子类句柄,只要该父类句柄指向的是一个子类的对象。

function int $cast(singular dest_var, singular source_exp) ;

或者

task $cast(singular dest_var,singular source_exp);

测试量化

伴随着复杂SoC系统的验证难度系数成倍增加,无论是定向测试还是随机测试,我们在验证的过程中终究需要回答两个问题:是否所有设计的功能在验证计划中都已经验证?代码中的某些部分是否从未执行过?覆盖率就是用来帮助我们在仿真中回答以上问题的指标覆盖率已经被广泛采用,作为衡量验证过程中的重要数据。

一旦通过覆盖率来量化验证,我们可以在更复杂的情况下捕捉一些功能特性是否被覆盖:

  • 当我们在测试X特性的时候,Y特性是否也在同一时刻被使能和测试?
  • 是否可以精简我们已有的测试来加速仿真,并且取得同样的覆盖率?
  • 覆盖率在达到一定的数值的时候,是否停滞,不再继续上升?

简单而言,覆盖率就是用来衡量验证精度和完备性的数据指标覆盖率可以告诉我们在仿真时设计的哪些结构被触发,当然,它也可以告诉我们设计在仿真时的哪些结构从未被触发过。

只有满足以下三个条件,才可以在仿真中实现高质量的验证:

  • 测试平台必须产生合适的激励来触发一个设计错误。
  • 测试平台仍然需要产生合适的激励使得被触发的错误可以进一步传导到输出端口
  • 测试平台需要包含一个监测器(monitor)用来监测被激活的设计错误,以及在它传播的某个节点(内部或者外部)可以捕捉到它。

覆盖率的种类

概述

没有任何一种单一的覆盖率可以完备地去衡量验证过程。可以达到100%的代码覆盖率,但这并不意味着100%的功能覆盖率。原因在于代码覆盖率并不是用来衡量设计内部的功能运转,或者模块之间的互动,或者功能时序的触发等。

类似地,我们即便达到了100%功能覆盖率,也可能只达到了90%的代码覆盖率。原因可能在于我们疏漏了去测试某些功能,或者一些实现的功能并没有被描述。从上述关于代码覆盖率和功能覆盖率简单的论述就可以证明,如果想要得到全面的验证精度,我们就需要多个覆盖率种类的指标。

分类

最常见的划分覆盖率的两种方法

  1. 按照覆盖率生成的方法,即隐性生成还是显性生成。
  2. 按照覆盖率溯源,即它们从功能描述而来还是从设计实现而来。

例如功能覆盖率是显性的需要人为定义的覆盖率,而代码覆盖率则是隐性覆盖率这是因为仿真工具可以自动从RTL代码来生成。

如果将上述两个分类的方式进行组合,那么可以将代码覆盖率、断言覆盖率以及功能覆盖率分别置入到不同的象限。但是需要注意,目前有一个象限仍然处于研究阶段,没有隐性的可以从功能描述生成某种覆盖率的方法,这也是为什么功能覆盖率依然需要人为定义的原因。
接下来我们将认识主要的两种覆盖率:

  • 代码覆盖率(隐性覆盖率)
  • 功能覆盖率(显性覆盖率)

代码覆盖率

代码覆盖率并不是SV独有的,在软件测试领域很早之前就有了这一项测试指标。代码覆盖率的一个优势在于它可以由仿真工具自动收集,继而用来指出在测试程序中设计源代码哪些被激活触发,而哪些则一直处于非激活的状态。由于代码覆盖率自动的特性,在仿真过程中使能它变得很简单,它不需要修改设计或者验证环境。

局限

代码覆盖率100%并不意味着足够的功能覆盖率。
研究发现,在回归测试实现了90%的代码覆盖率时,平均只有54%的代码会被监测,这意味着即便代码覆盖率的完备性满足,但依然可能在这些代码中存在漏洞。上述的推断是因为不是所有被覆盖的代码都会得到足够的监测,也由于没有得到足够的监测,因此一些即便被触发的漏洞也在传播的过程中没有到达监测点上——漏洞便从眼皮底下"逃逸"了。

另外,代码覆盖率的数据无法直接映射到哪些设计功能被测试了,所以从这一点来看,代码覆盖率和功能覆盖率之间又是互相独立的。

跳转覆盖率(toggle)

用来衡量寄存器跳转的次数(0->1,1->0),一般项目会要求模块的端口实现至少1次O到1,以及1次1到0的跳转来保证模块的集成和模块之间的互动。也有的项目会要求所有的寄存器都应该同端口一样满足跳转的最少次数。

端口跳转覆盖率经常用来测试IP模块之间的基本连接性,例如检查一些输入端口是否没有连接,或者已经连接的两个端口的比特位数是否不匹配,又或者一些已经连接的输入是否被给定的固定值等,都可以通过跳转覆盖率来发现问题。

行覆盖率( statement/line)

用来衡量源代码哪些代码行被执行过,以此来指出哪些代码行没有被执行过。从每一行执行的次数,如果设置最小的执行次数,也可以用来做充足代码测试的一项指标。

代码覆盖率可以指出在一些缺乏输入激励的情况下,某些赋值的代码行没有被执行的情况,它也可以指出在一些漏洞影响或者无用代码的影响下,一些代码行也无法被执行的情况。对于那些无用的代码,也就是永远不会被执行的代码,在代码分析时,我们可以将它们从覆盖率数据中过滤掉。

分支覆盖率(branch)

分支覆盖率是用来对条件语句( if/else,case,?

SystemVerilog学习-10-验证量化和覆盖率相关推荐

  1. python经典书籍推荐-推荐10本量化Python书单,好好学习天天向上

    推荐10本量化Python书~Python非常灵活,让实验变得容易.解决简单问题的方法简单而优雅.Python为新手程序员提供了一个很好的实验室. Python具有一些特征,使其成为第一种编程语言的接 ...

  2. 深度学习与计算机视觉教程(10) | 轻量化CNN架构 (SqueezeNet,ShuffleNet,MobileNet等)(CV通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/37 本文地址:https://www.showmeai.tech/article-d ...

  3. 当深度学习遇上量化交易——图与知识图谱篇

    ©PaperWeekly 原创 · 作者|桑运鑫 学校|上海交通大学硕士生 研究方向|图神经网络在金融领域的应用 本文主要回顾三篇将图和知识图谱应用到量化交易上的文章. NeurIPS 2019 论文 ...

  4. SystemVerilog学习笔记(可综合的部分)(一)

    SystemVerilog学习笔记(一) 1. Verilog-1995的数据类型 2. 网络(net)类型 3.变量(variable)类型 4.向量(packed arrays) 5.数组(unp ...

  5. SystemVerilog与功能验证

    目录 一.功能验证流程 二.验证手段.验证技术.验证方法学 三.数据类型与编程结构 四.并发进程与进程同步 五.面向对象编程 六.虚接口 七.随机测试 八.继承与多态 九.功能覆盖率 十.断言 一.功 ...

  6. SystemVerilog学习笔记

    SystemVerilog学习笔记(会持续更新~) 文章目录 SystemVerilog学习笔记(会持续更新~) SV数据类型 固定数组 固定数组的声明格式 一维数组与二维数组 固定数组的一些操作 固 ...

  7. 自己做量化交易软件(10)通通量化AI框架的数据获取与格式

    自己做量化交易软件(10)通通量化AI框架的数据获取与格式 我与2018年07月08日开始学习python编程和设计通通量化AI框架,到昨天晚上2018年10月30日,基本框架已经完成.能够显示K线图 ...

  8. 深度学习模型轻量化(上)

    深度学习模型轻量化(上) 移动端模型必须满足模型尺寸小.计算复杂度低.电池耗电量低.下发更新部署灵活等条件. 模型压缩和加速是两个不同的话题,有时候压缩并不一定能带来加速的效果,有时候又是相辅相成的. ...

  9. [SV]SystemVerilog学习笔记之struct union

    SystemVerilog学习笔记(四) 一.结构体(struct) 1.1.结构体声明(struct) 结构体声明:结构体默认是变量,也可以声明为线网 var struct { // 通过var进行 ...

最新文章

  1. oracle中SQL语句ge的用法,Oracle中SQL语句的几种用法
  2. 基于ArduinoLeonardo板子的BadUSB攻击实战
  3. nbalive05 editor 正式版
  4. python爬虫案例-Python爬虫案例集合
  5. WebIDE,让开发更简单
  6. c语言字符串转换xml文件名,如何用C语言生成简单格式的xml
  7. 联机交易场景持续拓展,巨杉数据库中标吉林省农信
  8. 安卓8.1放弃Java_升级到Android 8.1后,startForeground失败
  9. 大数据量JSONObject.fromObject性能问题(大数据传给前台)
  10. 总谐波失真计算公式_知识学习:谐波的危害
  11. 计算机无法找到输出设备,电脑没声音找不到输出设备怎么办
  12. Hexo - Next - Mist 风格主题的美化(二)
  13. matlab 读取ENVI中*.img格式图片代码
  14. 宏转录组研究成果荣登10分JHM
  15. element UI 之 el-cascader 下拉多级单选,每一级均可选中
  16. 股市风云:价值成长投资 稳健赢利之道
  17. Java集合框架笔记,足够深,足够全面
  18. 医疗化验单的进展和展望
  19. IIS安装和使用URL重写工具-URL Rewrite
  20. win11小组件关闭的详细教程

热门文章

  1. Flutter PullToRefresh上下拉刷新控件
  2. 电脑网线连接树莓派并登录
  3. 成长性思维和富人思维
  4. typora实现上划线等操作
  5. 商品规格表的制作 mysql_商品规格设计
  6. 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。...
  7. android 中获取所有有效网卡和对应的IP地址
  8. 完了,BBQ了。上班打游戏 ,被 大BOSS发现了。
  9. 获取保存在路由器中的ADSL账号和密码
  10. 快应用是什么软件?快应用有什么用?