首页 > 其他分享 >SystemVerilog -- 10.0 SystemVerilog Functional Coverage

SystemVerilog -- 10.0 SystemVerilog Functional Coverage

时间:2024-05-11 22:52:13浏览次数:20  
标签:10.0 SystemVerilog -- CovGrp mode key covergroup bins

SystemVerilog Functional Coverage

What is functional coverage ?

functional coverage是测试对设计的哪些功能/特性的衡量。这在约束随机验证(CRV)中非常有用,可以了解回归中的一组测试涵盖了哪些特征。

What are its limitations ?

这仅与为它编写的代码一样好。假设您在设计文档中提到了10个功能,但您不知何故忽略/遗漏或不知道3个功能,您将只为其中7个功能编写功能覆盖代码。如果所有7个功能都在测试中被击中,您可能会得出结论,所有功能都已涵盖。因此,您需要确保设计规范中的所有必须信息都包含在功能覆盖块中。

How is functional coverage done in SystemVerilog ?

这个想法是在testbench中对特定的变量进行采样,并分析它们是否达到了特定的值集。

mode test;
  bit [3:0] mode;
  bit [1:0] key;

  // Other testbench code
endmodule

mode可以取16个值,而key可以取4个值。因此,如果在模拟中监视这两个变量并报告已执行的模式和键值,您将知道测试是否涵盖了特定功能。好的部分是,模拟器中有一些选项可以将此类覆盖率详细信息转储到文件中,以便在模拟完成后可以对其进行查看。此外,您可以将来自不同测试的所有此类覆盖率文件合并到一个数据库中,并将它们作为一个整体进行审查。如果测试A覆盖了特征X,测试B覆盖了特征Y,则合并后的数据库将显示您同时覆盖了X和Y。

How to write covergroups ?

class myTrns;
  rand bit [3:0] mode;
  rand bit [1:0] key;

  function display ();
    $display ("[%0tns] mode = 0x%0h, key = 0x%0h", $time, mode, key);
  endfunction

  covergroup CovGrp;
    coverpoint mode {
      bins featureA   = {0};
      bins featureA   = {[1:3]};
      bins common []  = {4:$};
      bins reverse    = default;
    }
    coverpoint key;
  endgroup
endclass

Note

  • varibles are mentioned as a. coverpoint
  • Coverpoints are put together in a block. covergroup
  • Multiple covergroups can be created to sample the same variables with different set of bins.
  • bins are said to be "hit/covered" when the variable reaches the corresponding values. So, the bin featureB is hit when mode takes either 1, 2 or 3.
  • bin reverse is a single bin for all values that do not fall under the other bins.
  • common will have 12 separate bins, one for each value from 0x4 to 0xF.

Why are coverage metrics missing in simulations ?

您必须启用工具供应商特定的命令行开关才能转储覆盖率详细信息。然后打开覆盖率查看器工具,如 Cadence ICCR/IMC 并打开覆盖率转储文件。

How to specify when to sample ?

有两种方法可以在封面组中触发覆盖范围收集。

  • 使用特定covergroup的sample()方法对该group中的coverpoint进行采样。
class myCov;
  covergroup CovGrp;
    ...
  endgroup

  function new ();
    CovGrp = new;         // Create an instance of the covergroup
  endfunction
endclass

module tb_top;
  myCov myCov0 = new ();  // Create an instance of the class

  initial begin
    myCov0.CovGrp.sample ();
  end
endmodule
  • 提及对covergroup进行采样的事件
covergroup CovGrp @ (posedge clk); // Sample coverpoints at posedge clk
covergroup CovGrp @ (eventA);      // eventA can be triggered -> eventA

What are the ways for conditional coverage ?

是的,您可以通过两种方式有条件地启用覆盖范围。

  • 使用构造 iff
covergroup CovGrp;
  coverpoint mode iff (!_if.reset) {
    // bins for mode
  }
endgroup
  • 使用和功能 start stop
CovGrp cg = new;

initial begin
  #1 _if.reset = 0;
  cg.stop ();
  #10 _if.reset = 1;
  cg.start ();
end

标签:10.0,SystemVerilog,--,CovGrp,mode,key,covergroup,bins
From: https://www.cnblogs.com/sys-123456/p/18185324

相关文章

  • [NOI2009] 二叉查找树 & 笛卡尔树学习笔记
    这个题:二叉搜索树原理认识+区间dp;只要熟练相关算法就一定可以做出来。但我不行。。。我们学习一下笛卡尔树:什么垃圾东西,不学了。发现这个题是l蓝书上一道题jqb。二叉查找树又有一个性质:二叉查找树的中序遍历是其代表的序列从小到大排序的结果。而无论Treap如何旋转,其都......
  • 2024江苏省大学生程序设计大赛(JSCPC)热身赛题解(B)
    题目大意:求区间\([l,r]\)中有多少正整数满足\(\phi(\phi(n))=\phi(n)-1\),其中\(\phi\)为欧拉函数。解:设\(y=\phi(n)\),则上式变为\(\phi(y)=y-1\),易证\(y\)为质数(注意\(\phi(1)=1\),\(1\)与任何正整数都互质)。故原问题转化为求\([l,r]\)中有多少个正整数v满足\(\phi......
  • 使用Python根据网页生成RSS
    pipinstallrequestsbeautifulsoup4lxmlimportrequestsfrombs4importBeautifulSoupimportxml.etree.ElementTreeasETdeffetch_news_from_url(url):#1.网页抓取response=requests.get(url)response.raise_for_status()......
  • 前端使用 Konva 实现可视化设计器(10)- 对齐线
    请大家动动小手,给我一个免费的Star吧~大家如果发现了Bug,欢迎来提Issue哟~github源码gitee源码示例地址不知不觉来到第10章了,感觉接近尾声了。。。对齐线先看效果:这里交互有两个部分:1、节点之间的对齐线2、对齐磁贴多选的情况下,效果是一样的:主要逻辑会放在......
  • JUC源码解析:深入理解 volatile
    JUC源码解析:深入理解volatilevolatile的定义volatile的作用:保证可见性禁止指令重排序volatile可以被看作是轻量版的synchronized,volatile保证了多线程中共享变量的“可见性”,就是说,当volatile变量的值被修改时,其他线程能读取到被修改的变量值。如果volatile使用恰......
  • 贝壳面试:MySQL联合索引,最左匹配原则是什么?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 项目冲刺——第五篇Scrum冲刺博客
    作业所属课程所属课程作业要求作业要求作业目标总结第四天的敏捷开发,安排好第五天敏捷开发冲刺一、站立式会议1、会议图片2、昨天已完成的内容成员任务肖杨、梁丽贤完成贴子发布模块设计黄诃华、欧文杰完成帖子发布接口姚佳如、李慧娣复......
  • 使用nodejs创建返回xml的web server
    //ImportNode.jscoremodulei.ehttpconsthttp=require('http');constfs=require('fs').promises;consthost='localhost';constport=8000;constrssFileName="/news.rss";//Createwebserverconstserve......
  • ABC353E字典树处理最长公共前缀
    https://atcoder.jp/contests/abc353/tasks/abc353_e其实就是字典树板子题。似乎遇到最长公共前缀,就该想到字典树。依次加入每个字符串:维护一个数组siz来统计在当前串之前的串在对应点的出现次数。手模一下字典树的建树过程,显然如果当前串\(S_i\)能跑到一个曾经串\(S_......
  • 事件循环(event loop)原理,并类比理解qt的信号(Signal)和槽(Slot)机制)
    背景:实际项目中要使用pyqt/pyside技术,涉及到qt和asyncio的事件循环,并需要使用到qt的信号(Signal)和槽(Slot)机制,从底层了解事件循环的原理使得后续工作更好入手。事件循环是什么?事件循环(EventLoop)是一种用于处理和调度异步任务的机制。它通常用于编写异步编程,特别是在处理IO密......