定义交叉覆盖率技巧——systemverilog

2024-02-13 09:48

本文主要是介绍定义交叉覆盖率技巧——systemverilog,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2022/03/18 此文章结论不正确。
纠正:当你在coverpoint中自己建仓了(设置了bin),系统就不会再自动建仓,覆盖率数值限制在你设置bin值得范围。


引言
定义两个coverpoint a,b,如果cross a和b,假定a中有4个bin,b中有5个bin,cross之后一定有20个bin吗?
不一定。如果a中的bin没有将所有可能的值涵盖完,那么系统会分配默认的bin,那么交叉出来就不止20个bin。

1.为什么要设置权重为0?
先将需要交叉的两个coverpoint (addr和cmd )中添加“type_option.weight = 0; ”这段代码,表示覆盖率收集时不关心这两个coverpoint的bin。
当addr和cmd中设置权重为0时,cross时addr和cmd ,默认不会生成任何的bin。也就是我们可以定义任何时候我们关心的组合的bin,而不会产生我们不关心的组合,以免干扰覆盖率的收集。
再重新定义这些bin,就可以让我们指定我们关心的组合的bin,而不会生成那些我们不希望出现的bin。
2.如果不设置权重为0会怎样?
当addr(8位二进制的变量)和cmd(2位二进制的变量)中没有设置权重为0时,将addr和cmd交叉覆盖时,真的只会出现6 X 3= 18bin吗?
不会,因为address是一个8位二进制的变量,所以它的取值范围是2^8 = 256个。所以addr这个covergroup中有6个指明的bin,但还有256-6 = 250个可能的取值范围,所以还有很多系统默认分配的bins。而最大默认bin是64个,也就是还有58个(64-6)默认bin(剩下的250个可能值会分配到剩余的58个bin中);同样的cmd中也还有1个default bin。
这些值在cross时都会出现,所以addr和cmd在cross时会远远超过18个bin。

​见如下代码:

//mcdf中读写寄存器的读写指令和读写地址的收集
covergroup cg_mcdf_reg_write_read;addr: coverpoint reg_vif.mon_ck.cmd_addr {type_option.weight = 0;//权重为0bins slv0_rw_addr = {`SLV0_RW_ADDR};//SLV0_RW_ADDR是一个8位二进制bins slv1_rw_addr = {`SLV1_RW_ADDR};bins slv2_rw_addr = {`SLV2_RW_ADDR};bins slv0_r_addr  = {`SLV0_R_ADDR };bins slv1_r_addr  = {`SLV1_R_ADDR };bins slv2_r_addr  = {`SLV2_R_ADDR };}cmd: coverpoint reg_vif.mon_ck.cmd {type_option.weight = 0;//权重为0bins write = {`WRITE};//WRITE是2位二进制的bins read  = {`READ};bins idle  = {`IDLE};}cmdXaddr: cross cmd, addr {//重新设置我们关心的binbins slv0_rw_addr = binsof(addr.slv0_rw_addr);bins slv1_rw_addr = binsof(addr.slv1_rw_addr);bins slv2_rw_addr = binsof(addr.slv2_rw_addr);bins slv0_r_addr  = binsof(addr.slv0_r_addr );bins slv1_r_addr  = binsof(addr.slv1_r_addr );bins slv2_r_addr  = binsof(addr.slv2_r_addr );bins write        = binsof(cmd.write);bins read         = binsof(cmd.read );bins idle         = binsof(cmd.idle );bins write_slv0_rw_addr  = binsof(cmd.write) && binsof(addr.slv0_rw_addr);bins write_slv1_rw_addr  = binsof(cmd.write) && binsof(addr.slv1_rw_addr);bins write_slv2_rw_addr  = binsof(cmd.write) && binsof(addr.slv2_rw_addr);bins read_slv0_rw_addr   = binsof(cmd.read) && binsof(addr.slv0_rw_addr);bins read_slv1_rw_addr   = binsof(cmd.read) && binsof(addr.slv1_rw_addr);bins read_slv2_rw_addr   = binsof(cmd.read) && binsof(addr.slv2_rw_addr);bins read_slv0_r_addr    = binsof(cmd.read) && binsof(addr.slv0_r_addr); bins read_slv1_r_addr    = binsof(cmd.read) && binsof(addr.slv1_r_addr); bins read_slv2_r_addr    = binsof(cmd.read) && binsof(addr.slv2_r_addr); }
endgroup

这篇关于定义交叉覆盖率技巧——systemverilog的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705183

相关文章

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

Python中处理NaN值的技巧分享

《Python中处理NaN值的技巧分享》在数据科学和数据分析领域,NaN(NotaNumber)是一个常见的概念,它表示一个缺失或未定义的数值,在Python中,尤其是在使用pandas库处理数据时,... 目录NaN 值的来源和影响使用 pandas 的 isna()和 isnull()函数直接比较 Na

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

小技巧绕过Sina Visitor System(新浪访客系统)

0x00 前言 一直以来,爬虫与反爬虫技术都时刻进行着博弈,而新浪微博作为一个数据大户更是在反爬虫上不遗余力。常规手段如验证码、封IP等等相信很多人都见识过…… 当然确实有需要的话可以通过新浪开放平台提供的API进行数据采集,但是普通开发者的权限比较低,限制也比较多。所以如果只是做一些简单的功能还是爬虫比较方便~ 应该是今年的早些时候,新浪引入了一个Sina Visitor Syst