sv标准研读第十九章-功能覆盖率
书接上回:
sv标准研读第十八章-随机化和约束
第19章 功能覆盖率
19.1 总览
-定义cover group
-定义cover point
-定义cross cover
-cover选项
-cover系统函数和系统方法
-cover计算
19.2 概述
覆盖率广义上分为两种:功能覆盖率和工具可以自动收集的代码覆盖率,后者包含行覆盖率、条件覆盖率等,工具自动收集,无需用户写代码。前者是基于ds文档由用户写出来的,因此不同设计功能覆盖率模型不一样。
19.3 定义covergroup
语法:
一个covergroup里可以包含的内容:
-clock event;
-一个或多个coverpoint;
-cross cover;
-可选的形式参数
-cover options
声明covergroup的地方可以是:module、interface、program、class、package、checker。
和class一样,例化covergroup 还是需要new关键字。举例:
形式参数不能是inout/output,ref形式参数等同于const ref,因为covergroup里的代码并不会修改参数。
如果没有指明clock event,那么就需要使用sv提供的专门用于采用的函数sample()。
Strobe选项可以用于帮助规定采样的region,当使用clock event在一个timestep里采样了多次,此时就可以利用该选项让其只在postponed region进行采样。
Coverpont的内容可以是变量或者表达式,cross cover的内容可以是变量或者coverpoint,如下:
19.4 在class里使用covergroup
在class里使用covergroup是,covergroup里可以直接使用在class里定义的变量,如下:
一个class里可以定义多个covergroup
19.5 定义cover point
一个cg里可以有一个或多个cp,语法:
Cp的名字没写且只有一个变量时,工具会自动生成一个名字,该名字就是这个变量的名字;当cp的名字没写单变量有多个时,工具也会自动生成一个名字,但是这个名字不可用。
Cp里的数据类型必须是整型。
Cp的名字只可以在下面这些地方引用:
-cross语句里;
-通过cg变量以hierarchical的形式引用;
-通过cp以::的形式引用
Covergroup_expression可以调用函数,但是函数有一定的限制:
-函数不能有output/inout/非const ref参数
-函数必须是automatic
Cp的采样:当clock block的input skew不是#0时,在preponed region采样;否则,在observed region采样。
Cp里可以使用iff关键字来有条件的采样
Cp的bins仓没有指定时工具会自动建仓,自动建仓的数量可以由auto_bin_max选项指定。
Default bin可以用来收集一些不在该cg里的任何cp表达式收集的仓,可以用来收集一些不在计划内或者无效的值。
19.5.1 定义bins
Cp名字后面加一个[]就可以指定建仓的数量,不加[]表示所有值只建一个仓。[]里面可以为空(为每一个值建仓),可以是一个具体的数字。当cp_name[num]={exp};左边num的数值小于右边表达式列举的值数量时,会将exp里列举的所有值均匀分割到num个仓里,如下:
左边明确指定了只建4个仓,右边却有13个值,那么最终:<1,2,3>对应第一个仓,<4,5,6>对应第二个仓,<7,8,9>对应第三个仓,<10,1,4,7>对应第四个仓。
如果左边仓的数量大于右边值的数量,那么有些仓将始终是空的。
还可以加上iff关键字用来只收集一些条件下的值。
19.5.1.1 cp里加上with表达式
With表达式的作用是对建仓的值进行筛选,举例:
上面的表达式就只会建在[0:255]之间能被3整除的数的仓。
19.5.2 定义transition的仓
语法:
举例:单值转换:
意思是会对值从value1转变到value2的仓。
举例:多值转换:
还可以使用重复操作符:
另外还有一种goto符号:->,和=>不同的是,后者表示值在两个指定的跳变值之间不允许出现其他任何值的跳变,而前者允许。举例:
其实就相当于:
…表示中间可以有其他跳变值的出现。
另外还有一个非连续重复操作符:=也可以使用。举例:
等同于:
19.5.3 自动建仓
如果cp没有写bin,sv会自动建仓。
建仓的数量是2^M和auto_bin_max之间的最小值,M是变量的位宽。
自动建仓不会给x/z值建仓。
19.5.4使用通配符建仓
手动建仓时可以给x/z值建仓,因此sv仓数统计采用的是===进行比较。而通配符wildcard会将x/z/?当做0或1处理。
举例:
会为12-15之间的值建一个仓
举例:
X代表0或1
19.5.5建仓排除一些值
使用ignore_bins可以在建仓时排除一些值,举例:
会排除7,8这两个值进行收集
19.5.6 给一些非法值建仓
当出现一些非法值时,也可以建仓,此时会报错。举例:
当值出现1,2,3时,会报run-time error。
19.6 定义cross coverage
顾名思义,cross coverage指的就是交叉覆盖。语法:
Cross表达式里可以出现变量、cp
19.6.1 定义cross coverage的仓
Cross coverage和cp一样,也可以手动建仓,如下:
上面binsof和intersect结合使用表示只收集i=0的仓。
Cross建仓还可以加上一些表达式:
Apple表示:对a+b<257的值建仓,且元组里满足条件的值的最小数量是127;最终,apple包含3个元组:
Cherry表示:前面用binsof和intersect筛选之后,另外再附加一个with条件,条件就是a必须等于b。
19.6.1.2 设置cross bin的值组合
不仅可以给cross cover手动建仓,还可以指定仓的值组合。举例:
表示aXb只会收集a=1,b=2/a=3,b=4/a=5,b=6这三种组合的覆盖率。
更复杂的,组合的设置还可以通过函数来实现:
19.6.2 cross cover里排除一些值组合的收集
利用ingore_bins来排除对一些值组合的收集:
19.6.3 cross cover里设置一些值组合为非法组合
利用illegal_bins来将一些值组合设置为非法组合:
当出现这些车时,会报run-time error。
19.7 设置coverage选项
下表列举出了所有可以控制cg行为的选项:
在定义cp的时候都可以使用上面表中的option,使用格式如下:
对上面的选项进行中文注释:
相关文章:

sv标准研读第十九章-功能覆盖率
书接上回: sv标准研读第十八章-随机化和约束 第19章 功能覆盖率 19.1 总览 -定义cover group -定义cover point -定义cross cover -cover选项 -cover系统函数和系统方法 -cover计算 19.2 概述 覆盖率广义上分为两种:功能覆盖率和工具可以自动…...
图集短视频去水印云函数开发实践——小红书
前两篇主要讲解了抖音和快手的图集短视频对去水印解析的云函数开发实践,今天说一些小红书图集解析的云函数实践。 图集短视频去水印云函数开发实践——抖音 图集短视频去水印云函数开发实践——快手 其实都是大差不差的,首先获取到小红书的分享链接&…...

Uni-App-03
登录功能开发 实现POST提交 HTTP协议规定请求消息内容类型(Content-Type)有哪些?—— 只有四种 text/plain 没有编码的普通数据 application/x-www-form-urlencoded 编码后的普通数据 multipart/form-data 请求主体中包含文件上传域 application/json 请求主体是 J…...

解决 VScode 每次打开都是上次打开的文件问题
每次使用 VScode 打开总是上次的文件,可以简单设置即可,记录一下。 VScode Visual Studio Code(简称VSCode)是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言,并提供了代码高亮、智能代码补全、代码重构…...
redis高级篇之skiplist跳表 第164节答疑
跳表查询的空间复杂度分析 比起单纯的单链表,跳表需要存储多级索引,肯定要消耗更多的存储空间。那到底需要消耗多少额外的存储空间呢? 我们来分析一下跳表的空间复杂度。 第一步:首先原始链表长度为n, 第二步:两两取首,每层索引的…...
Java 线程池:深入理解与高效应用
在 Java 并发编程中,线程池是一种非常重要的技术。它可以有效地管理和复用线程,提高系统的性能和资源利用率。本文将深入探讨 Java 线程池的概念、原理、使用方法以及最佳实践,帮助读者更好地理解和应用线程池。 一、引言 在现代软件开发中&a…...

week08 zookeeper多种安装与pandas数据变换操作-new
课程1-hadoop-Zookeeper安装 Ububtu18.04安装Zookeeper3.7.1 环境与版本 这里采用的ubuntu18.04环境的基本配置为: hostname 为master 用户名为hadoop 静态IP为 192.168.100.3 网关为 192.168.100.2 防火墙已经关闭 /etc/hosts已经配置全版本下载地址࿱…...

js构造函数和原型对象,ES6中的class,四种继承方式
一、构造函数 1.构造函数是一种特殊的函数,主要用来初始化对象 2.使用场景 常见的{...}语法允许创建一个对象。可以通过构造函数来快速创建多个类似的对象。 const Peppa {name: 佩奇,age: 6,sex: 女}const George {name: 乔治,age: 3,sex: 男}const Mum {nam…...

电脑连接海康相机并在PictureBox和HWindowControl中分别显示。
展示结果: 下面附上界面中所有控件的Name,只需照着红字设置对应的控件Name即可 下面附上小编主界面的全部代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; …...

直播系统源码技术搭建部署流程及配置步骤
系统环境要求 PHP版本:5.6、7.3 Mysql版本:5.6,5.7需要关闭严格模式 Nginx:任何版本 Redis:需要给所有PHP版本安装Redis扩展,不需要设置Redis密码 最好使用面板安装:宝塔面板 - 简单好用的…...

Spring+ActiveMQ
1. 环境搭建 1.1 env-version JDK 1.8 Spring 2.7.13 Maven 3.6 ActiveMQ 5.15.2 1.2 docker-compose.yml version: 3.8services:activemq:image: rmohr/activemq:5.16.3container_name: activemqports:- "61616:61616"- "8161:8161"environment…...
Linux 常用命令总汇
查询所有wifi nmcli dev wifi list 链接wifi sudo nmcli dev wifi connect XXXX password XXXX 查询本机IP ifconfig 查询联网情况 ping www.baidu.com 进入.bash gedit ~/.bashrc sudo dpkg -i XXX.deb 安装超级终端 sudo apt install terminator 超级终端常用…...

fmql之Linux RTC
模拟i2c,连接rtc芯片。 dts: /{ // 根节点i2c_gpio: i2c-gpio {#address-cells <1>;#size-cells <0>;compatible "i2c-gpio";// MIO56-SDA, MIO55-SCL // 引脚编号gpios <&portc 2 0&portc 1 0 >;i2c-gp…...

Flask-SocketIO 简单示例
用于服务端和客户端通信,服务端主动给客户端发送消息 前提: 确保安装了socket库: pip install flask-socketio python-socketio服务端代码 from flask import Flask from flask_socketio import SocketIO import threading import timeap…...
Vue 3 的组件式开发(2)
1 Vue 3 组件的插槽 插槽(Slot)是Vue组件中的一个重要概念,它允许父组件向子组件中插入HTML结构或其他组件,从而实现内容的自定义和复用。以下是对Vue 3组件插槽的详细讲解: 1.1 插槽的基本概念 插槽可以被视为子组…...

python 爬虫 入门 四、线程,进程,协程
目录 一、进程 特征: 使用: 初始代码 进程改装代码 二、线程 特征: 使用: 三、协程 后续:五、抓取图片、视频 线程和进程大部分人估计都知道,但协程就不一定了。 一、进程 进程是操作系统分配资…...

cloak斗篷伪装下的独立站
随着互联网的不断进步,越来越多的跨境电商卖家开始认识到独立站的重要性,并纷纷建立自己的独立站点。对于那些有志于进入这一领域的卖家来说,独立站是什么呢?独立站是指个人或小型团队自行搭建和运营的网站。 独立站能够帮助跨境…...
【Nas】X-DOC:在Mac OS X 中使用 WOL 命令唤醒局域网内 PVE 主机
【Nas】X-DOC:在Mac OS X 中使用 WOL 命令唤醒局域网内 PVE 主机 1、Mac OS X 端2、PVE 端(Debian Linux) 1、Mac OS X 端 (1)安装 wakeonlan 工具 brew install wakeonlan(2)唤醒 PVE 命令 …...

u盘装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法
我们在u盘安装原版win10 iso镜像时,发现在选择硬盘时提示了“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”,直接导致了无法继续安装下去。出现这种情况要怎么解决呢?下面小编分享u盘安装win10系统提示“windows无法安装到这个磁盘…...

Linux系统之dc计算器工具的基本使用
Linux系统之dc计算器工具的基本使用 一、DC工具介绍二、dc命令的基本用法2.1 dc命令的help帮助信息2.2 dc命令基本用法2.3 dc命令常用操作符 三、dc命令的基本使用3.1dc命令的用法步骤3.2 简单数学计算3.3 通过文件来计算3.4 使用--expression计算3.5 使用dc命令进行高精度计算…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...
React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?
系列回顾: 在上一篇《React核心概念:State是什么?》中,我们学习了如何使用useState让一个组件拥有自己的内部数据(State),并通过一个计数器案例,实现了组件的自我更新。这很棒&#…...
前端工具库lodash与lodash-es区别详解
lodash 和 lodash-es 是同一工具库的两个不同版本,核心功能完全一致,主要区别在于模块化格式和优化方式,适合不同的开发环境。以下是详细对比: 1. 模块化格式 lodash 使用 CommonJS 模块格式(require/module.exports&a…...
2025.6.9总结(利与弊)
凡事都有两面性。在大厂上班也不例外。今天找开发定位问题,从一个接口人不断溯源到另一个 接口人。有时候,不知道是谁的责任填。将工作内容分的很细,每个人负责其中的一小块。我清楚的意识到,自己就是个可以随时替换的螺丝钉&…...