当前位置: 首页 > news >正文

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标准研读第十九章-功能覆盖率

书接上回&#xff1a; sv标准研读第十八章-随机化和约束 第19章 功能覆盖率 19.1 总览 -定义cover group -定义cover point -定义cross cover -cover选项 -cover系统函数和系统方法 -cover计算 19.2 概述 覆盖率广义上分为两种&#xff1a;功能覆盖率和工具可以自动…...

图集短视频去水印云函数开发实践——小红书

前两篇主要讲解了抖音和快手的图集短视频对去水印解析的云函数开发实践&#xff0c;今天说一些小红书图集解析的云函数实践。 图集短视频去水印云函数开发实践——抖音 图集短视频去水印云函数开发实践——快手 其实都是大差不差的&#xff0c;首先获取到小红书的分享链接&…...

Uni-App-03

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

解决 VScode 每次打开都是上次打开的文件问题

每次使用 VScode 打开总是上次的文件&#xff0c;可以简单设置即可&#xff0c;记录一下。 VScode Visual Studio Code&#xff08;简称VSCode&#xff09;是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言&#xff0c;并提供了代码高亮、智能代码补全、代码重构…...

redis高级篇之skiplist跳表 第164节答疑

跳表查询的空间复杂度分析 比起单纯的单链表&#xff0c;跳表需要存储多级索引&#xff0c;肯定要消耗更多的存储空间。那到底需要消耗多少额外的存储空间呢? 我们来分析一下跳表的空间复杂度。 第一步:首先原始链表长度为n&#xff0c; 第二步:两两取首&#xff0c;每层索引的…...

Java 线程池:深入理解与高效应用

在 Java 并发编程中&#xff0c;线程池是一种非常重要的技术。它可以有效地管理和复用线程&#xff0c;提高系统的性能和资源利用率。本文将深入探讨 Java 线程池的概念、原理、使用方法以及最佳实践&#xff0c;帮助读者更好地理解和应用线程池。 一、引言 在现代软件开发中&a…...

week08 zookeeper多种安装与pandas数据变换操作-new

课程1-hadoop-Zookeeper安装 Ububtu18.04安装Zookeeper3.7.1 环境与版本 这里采用的ubuntu18.04环境的基本配置为&#xff1a; hostname 为master 用户名为hadoop 静态IP为 192.168.100.3 网关为 192.168.100.2 防火墙已经关闭 /etc/hosts已经配置全版本下载地址&#xff1…...

js构造函数和原型对象,ES6中的class,四种继承方式

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

电脑连接海康相机并在PictureBox和HWindowControl中分别显示。

展示结果&#xff1a; 下面附上界面中所有控件的Name&#xff0c;只需照着红字设置对应的控件Name即可 下面附上小编主界面的全部代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; …...

直播系统源码技术搭建部署流程及配置步骤

系统环境要求 PHP版本&#xff1a;5.6、7.3 Mysql版本&#xff1a;5.6&#xff0c;5.7需要关闭严格模式 Nginx&#xff1a;任何版本 Redis&#xff1a;需要给所有PHP版本安装Redis扩展&#xff0c;不需要设置Redis密码 最好使用面板安装&#xff1a;宝塔面板 - 简单好用的…...

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&#xff0c;连接rtc芯片。 dts&#xff1a; /{ // 根节点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 简单示例

用于服务端和客户端通信&#xff0c;服务端主动给客户端发送消息 前提&#xff1a; 确保安装了socket库&#xff1a; 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 组件的插槽 插槽&#xff08;Slot&#xff09;是Vue组件中的一个重要概念&#xff0c;它允许父组件向子组件中插入HTML结构或其他组件&#xff0c;从而实现内容的自定义和复用。以下是对Vue 3组件插槽的详细讲解&#xff1a; 1.1 插槽的基本概念 插槽可以被视为子组…...

python 爬虫 入门 四、线程,进程,协程

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

cloak斗篷伪装下的独立站

随着互联网的不断进步&#xff0c;越来越多的跨境电商卖家开始认识到独立站的重要性&#xff0c;并纷纷建立自己的独立站点。对于那些有志于进入这一领域的卖家来说&#xff0c;独立站是什么呢&#xff1f;独立站是指个人或小型团队自行搭建和运营的网站。 独立站能够帮助跨境…...

【Nas】X-DOC:在Mac OS X 中使用 WOL 命令唤醒局域网内 PVE 主机

【Nas】X-DOC&#xff1a;在Mac OS X 中使用 WOL 命令唤醒局域网内 PVE 主机 1、Mac OS X 端2、PVE 端&#xff08;Debian Linux&#xff09; 1、Mac OS X 端 &#xff08;1&#xff09;安装 wakeonlan 工具 brew install wakeonlan&#xff08;2&#xff09;唤醒 PVE 命令 …...

u盘装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法

我们在u盘安装原版win10 iso镜像时&#xff0c;发现在选择硬盘时提示了“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”&#xff0c;直接导致了无法继续安装下去。出现这种情况要怎么解决呢&#xff1f;下面小编分享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命令进行高精度计算…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...