数字验证学习笔记——SystemVerilog芯片验证23 ——数据采样

news2024/11/18 15:45:05

一、数据采样

  • 当你coverpoint指定采样一个变量或表达式时,SV会创建很多“仓(bin)”来记录每个数值被捕捉到的次数。
  • 这些bin是衡量功能覆盖率的基本单位。
  • covergroup中可以定义多个coverpoint,coverpoint中可以自定义多个cover bin或者SV帮助自动定义多个cover bin。
  • 每次covergroup采样,SV都会在一个或者多个cover bin中留下标记,用来记录采样时变量的数值和匹配的cover bin。
  • 在仿真之后,可以使用分析工具读取这些数据库来生成覆盖率报告,包含了各部分总体的覆盖率。

1.1 coverpoint和bin

  • 为了计算一个coverpoint上的覆盖率,首先需要确定可能数值的个数,这也被称为域。
  • 覆盖率就是采样值的数目除以bin的数目。例如一个3比特变量的域是0:7,正常情况下会自动分配8个bin。如果仿真过程中有7个值被采样到,那么最终该coverpoint的覆盖率是7/8。
  • 所有的coverpoint的覆盖率最终构成一个covergroup的覆盖率
  • 所有的covergroup的覆盖率构成了整体的功能覆盖率

1.2 bin的创建和应用

  • SV会默认为某个coverpoint创建bin,用户也可以自己定义bin的采样域。
  • 如果采样变量的域范围过大而又没有指定bin,那么系统会默认分配64个bin,将值域范围平均分配给这64个bin。
  • 用户可以通过covergroup的选项auto_bin_max来指定自动创建bin的最大数目。
  • 实际操作中,自动创建bin的方法不实用,建议用户自行定义bin,或者减小auto_bin_max的数值。
    covergroup CovPort;
    options.auto_bin_max=8; //所有coverpoint auto_bin数量=8
    coverpoint tr.port
    { options.auto_bin_max=2; } //特定coverpoint auto_bin数量=8
    endgroup

1.3 命名coverpoint和bin

在这里插入图片描述

  • 注意coverpoint定义使用{}而不是begin…end。大括号的结尾没有带分号,这和end一样。
    在这里插入图片描述
    Bin:第一列是bin的名称。
    hits:每个bin收集到多少次。
    at least:每个bin至少要收集多少次。
    上面结果的覆盖率是10/11

1.4 条件覆盖率

  • 可以使用关键词iff给coverpoint添加条件。
  • 这种做法常用于复位期间关闭覆盖以忽略不合理的条件触发。
  • 也可以使用startstop函数来控制covergroup各个独立实例。
    -covergroup CoverPort;
    coverpoint port iff
    (!bus_if.reset);
    endgroup

initial begin
CoverPort ck=new();
#1ns;
ck.stop();
bus_if.reset =1;
#100ns bus_if.reset =0;
ck.start();

end

这里通过ck.sample()采样,只不过省掉了。当满足iff的条件同时ck.sample()才开始采样。
ck.stop()禁止covergroup,ck.start()使能covergroup。

1.5 翻转覆盖率

-coverpoint 也可以用来记录变量从A值到B值得跳转情况。
还可以确定任何长度得翻转次数
-covergroup CoverPort;
coverpoint port
{ bins t1=(0 => 1),(0 => 2),(0 => 3);}
endgroup

coverpoint 可以声明多个bin。
coverpoint 可以不声明bin。
coverpoint 可以采样变量值的跳转情况。

1.6 wildcard覆盖率

  • 可以创建wildcard来创建多个状态或者翻转。
  • 在表达式中,任何X,Z或者**?**都会被当成0或1的通配符。
    在这里插入图片描述
    使用wildcard修饰的bins,其中x、z、?都会被当成0或1的通配符。

1.7 忽略的bin

  • 在某些coverpoint可能始终无法得到全部的域值。
  • 对于那些不计算功能的域值可以使用ignore_bins来排除,最终它们并不会计入coverpoint的覆盖率。

bit [2:0] low_ports_0_5; // 只使用数值0-5
covergroup CoverPort;
coverpoint low_ports_0_5 {
ignore_bins hi={[6,7]}; // 忽略数值6-7
}
endgroup
忽略数值6,7,系统默认分配6个bins

1.8 非法的bin

  • 有些采样值不仅应该被忽略,而且如果出现还应该报错。
  • 这些情况可以在测试平台中监测,也可以使用illegal_bins对特定的bin进行标示。
    bit [2:0] low_ports_0_5; // 只使用数值0-5
    covergroup CoverPort;
    coverpoint low_ports_0_5 {
    illegal_bins hi={[6,7]}; // 如果出现6-7便报错
    }
    endgroup

1.9 交叉覆盖率

  • coverpoint 是记录单个变量或者表达式的观测值。
  • 如果要记录在某一时刻,多个变量之间值的组合情况,需要使用交叉(cross)覆盖率。
  • cross语句只允许带coverpoint或者简单得变量词。
    在这里插入图片描述
    kind: 是 coverpoint tr.kind 的名称。
    port: 是 coverpoint tr.port 的名称。

1.10 排除部分cross in

-通过使用ignore_bins、binsof和intersect分别指定coverpoint和值域,这样可以清除很多不关心的cross bin。
在这里插入图片描述
假设port是3位,有8个bin
kind是4位,有11个bin,分别是0, 1 2 3 , 8 , 9 , 10 , 11 , 12 , 13 ,14, 15 , 4 5 6 7
ignore bins hi = binsof(port)intersect {7} ; 排除 port为7 和 kind 的11种组合。
ignore bins md = binsof(port)intersect {0} && binsof(kind)intersect {[9:11]} ; 排除port为0 kind为9:11的 3种组合。
ignore bins lo =binsof(kind.lo),排除8种组合。

最初有8*11种组合。

1.11 精细的交叉覆盖率指定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP灵活工作流场景模板创建

目录 1. 创建流程对象容器 2. 编辑模板中的灵活块 3. 设置工作流启动事件 4. 设置工作流运行时事件 5. 设置工作流输出结果(可选) 6. 工作流控制类 7. 创建流程活动 8. 创建流程条件 9. 代理规则 9. 值帮助 10. 参考时间 11. 电子邮件模版 …

[ AWS - SAA ] 解决方案架构师之设计弹性架构 - 选择可靠的弹性存储(如何选择 SSD vs. HDD)

本系列博文会围绕AWS Well-Architected 和六大支柱进行讲解,这些领域的内容对成为AWS亚马逊云科技上的 解决方案架构师(SAA) 非常重要。 本文主要介绍AWS亚马逊云中,关于弹性架构设计中存储设备的一些讲解。 本文的部分内容适用于…

哈希切割 + 位图 + 布隆过滤器 —— 海量数据面试题

目录 题目一:给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 哈希切割 题目二:给定100亿个整数,设计算法找到只出现一次的整数? 解法一:哈希切割 解法二&#xf…

【论文精读】Guided-MVS

今天读的是一篇发表在IROS2022上的MVS文章:Multi-View Guided Multi-View Stereo,作者是来自于意大利University of Bologna的Matteo Poggi。 论文链接:arxiv 代码链接:https://github.com/andreaconti/multi-view-guided-multi-v…

SpringCloud Netflix复习之OpenFeign

文章目录写作背景Feign核心组件介绍Encoder和DecoderLoggerContractFeign.Builder上手实战开启FeignClient调用请求日志给FeignClient注入自定义拦截器Feign支持文件上传配置Feign开启Gzip压缩Feign配置超时时间Feign整合Ribbon支持负载均衡核心源码部分FeignClient注入到Sprin…

【Qt】通过创建ui界面类成员变量的方式显示窗体

【Qt】通过创建ui界面类成员变量的方式显示窗体1、背景2、实例3、验证1、背景 将.ui 文件转化为.h 头文件参考: 【Qt】将QtDesigner生成的.ui文件转化为.h头文件 https://jn10010537.blog.csdn.net/article/details/128589666其生成的.h头文件的显示,如…

HQChart实战教程56-限制指标周期

HQChart实战教程56-限制指标周期 指标周期范围效果图增加周期限制步骤1. 创建系统指标Condition.PeriodCONDITION_PERIOD 枚举说明提示信息提示信息配色实例源码指标周期范围 有些指标我们需要限制它的周期, 如指标A它只能对日线周期有效, 分时周期时无效的, 所有在切换到分…

Apache Hive 使用

Apache Hive 使用使用beeline 连接Apache Hive查看数据库使用或进入数据库创建表查看数据表上传数据数据操纵语言(DML)查询语句函数数学函数条件函数) 使用beeline 连接Apache Hive /export/server/apache-hive-3.1.2-bin/bin/beelinebeeline> ! co…

C51单片机基础之4G模块

一、4G模块初识EC03-DNC是亿佰特公司推出的 LTE CAT1 数传模块产品, 该产品软件功能完善, 覆盖绝大多数常规应用场景, EC03-DNC 是为实现串口设备与网络服务,通过网络相互传输数据而开发的产品 , 该产品是一款带分集接…

Linux 计算机网络 从 ping 来初窥计算机网络

Linux 计算机网络 从 ping 来初窥计算机网络 在上一章节《计算机网络从零到一》我们重点讲解了整个网络的形成,以及物理层、数据链路层、网络层这三层的形成以及他们所解决的问题,而本章节主要讲解 ping 命令在 Linux 中到底发生了一些什么。 ping 简介…

学习open62541 --- [73] 数据源造成无法监测变量的问题解决

本人最近遇到一个问题:给一个变量添加数据源后,使用监测项去监测变量变化,如果采样时间为0,会发现无法监测到变量的变化。 本文讲述这种情况的发生原因以及解决办法。 一 Server例子 首先准备server例子,如下&#x…

WSL 下载服务器加速

网络下载加速,这里使用修改 hosts 文件 ,地址映射 方法,所有网址适用,这里以 WSL 下载服务器为例子 命令 wsl -l -o 访问的地址: https://raw.githubusercontent.com/microsoft/WSL/master/distributions/Distributi…

Java设计模式中组合模式是什么/树形结构怎么组合或显示存储,编程怎么实现树形结构

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 5.7 组合模式 5.7.1 概述 又名整体模式,是用于把一组相似的对象当作一个单一的对象依据树形结构来组合对象,用来表示部分以及整体层次属于…

基于asp.net+vbscript+wsc编写网站

1、前言 asp大家应该都比较熟悉&#xff0c;就是一个动态服务器页面&#xff0c;有点类似于jsp。只是不同的是asp可以在IIS服务器上创建&#xff0c;并且如果配置了.net环境的话&#xff0c;那么就可以在asp里面<%%>写vbscript。vbscript是一种脚本语言&#xff0c;其实就…

因果推断5--DML(个人笔记)

目录 1论文介绍 1.1论文 1.2摘要 1.3DML思路 2价格需求曲线 2.1价格需求弹性 2.2价格需求弹性计算DML代码 2.3价格需求弹性例子--数据集 2.4建模过程 2.5回归结果 1论文介绍 1.1论文 V. Chernozhukov, D. Chetverikov, M. Demirer, E. Duflo, C. Hansen, and a. W.…

(强制)类型转换方法

目录 一、C语言中的类型转换 二、C中的强制类型转换 2.1 static_cast 2.2 reinterpret_cast 2.3 const_cast 2.4 dynamic_cast 2.5 总结 一、C语言中的类型转换 在C语言中&#xff0c;若赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或…

[PyTorch笔记]深度学习计算

[PyTorch笔记]深度学习计算1 层和块1.1自定义神经网络块1.2顺序块1.3在前向传播中执行代码2.参数管理2.1 访问参数、用于调试、诊断和可视化2.2 参数初始化2.2.1内置初始化&#xff1a;2.2.2 自定义初始化2.3 在不同模型组件间共享参数3.延后初始化4.自定义层4.1 不带参数的层4…

深入理解数据结构 —— 跳表

什么是跳表 只要是平衡搜索二叉树能实现的功能&#xff0c;跳表都能实现&#xff0c;且时间复杂度都相同 例如&#xff1a; 哈希表的功能&#xff1a;插入&#xff0c;查找&#xff0c;删除有序表的功能&#xff1a;查找大于某值最小的数&#xff0c;小于某值最大的数&#…

干货 | 数据跨境传输合规体系的构建思路

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分&#xff1a;研究背景随着经济活动数字化转型加快&#xff0c;“数据”对生产、流通、分配和消费活动产生重要影响&#xff0c;成为新的生产要素。地区之间数据流通愈发频繁&#xff0c;…

图像频域滤波(理想低通滤波)

图像变换是对图像信息进行变换&#xff0c;是能量保持但重新分配&#xff0c;利于加工处理。这里主要介绍傅里叶变换的图像频域滤波。 图像从空间域变换到频域后&#xff0c;其低频分量对应图像中灰度值变化较为缓慢的区域&#xff0c;高频分量表征图像中物体的边缘和随机噪声等…