Systemverilog中Assertions的记录

news2024/10/6 12:22:19

1. assertion statement

Assertion statement有以下几种类型:

  • assert: 指定DUT的property,必须要verify
  • assume: 给验证环境指定假设的property。simulator检查这些property,但是formal工具会使用这些信息来产生输入激励。
  • cover: 监控property评估的coverage
  • restrict: 用于指定property是formal验证的constraint,simulation不需要检查该property。

assertions又可以分为两大类:concurrentandimmediate。Immediate assertion就像是procedural block中使用的statement,主要目的是用于simulation,并没有restrict的assertion statement。Concurrent assertions基于clock来的。

2. Immediate assertions

Immediate assertion可以用在procedural statement能执行的任何地方。它和if(expression)里的expression求解一样,如果expression为x/z/0,那么会被翻译为false,并且assertion statement判断为fail。反之,expression会被翻译为true,因此assertionstatement会pass的。有两种模式的immediate assertion:simple immediate assertions和deferred immediate assertions。在simple immediate assertion中,pass或fail在基于assertion evaluation时立马发生。在deferred immediate assertion中,action会被delay到time step的后期,用于防止一些毛刺之类的。

Immediate assertion的执行可以通过system task的assertion control来控制的。

Immediate assertion statement有immediate assert、immediate assume或immediate cover。

对于immediate assert statement来说,fail的话只是requirement的违例,可能存在bug。付过assert statement失败,且没有else分支,那么工具应该默认调用$error,除非$assertcontrol里control_type=9,把error抑制掉。

Deferred assertion有两种类型:observed deferred immediate assertions和final deferred immediate assertions。

3. concurrent assertions

Concurrent assertions用于描述时间跨越的行为,不像immediate assertions,它时基于clock进行的,因此concurrent assertion只会在出现clock tick时才会evaluated的。

Concurrent assertions在observed region会被evaluated求值评估的。

Concurrent assertion的expression里的value采样称为sampled value。在大多数情况下,sampled value是在preponed region进行的,但有几个重要的例外:

关键字property是区分immediate assertionconcurrent assertion的关键。

4. declaring sequence

一个命名的sequence可以在以下声明:

5. sequence operations

操作符的优先级如下:

6. sampled value functions

Sampled value functions可以用于访问一个expression的sampled values。这些functions可以访问sampled values、访问过去的sampled value、检测expression的sampled value的变化。Local variables和sequence方法matched不能用在这些functions的argument expressions。这些functions为:

这些functions其实不只是限制于assertion features,它们也可能用于proceduralcode。

之所以引入$sampled()函数,原因如下:

$rose、$fell、$stable、$changed这些value change functions用于检测sampled value的变化,它们执行的结果遵循如下规则:

— $rose returns true if the LSB of the expression changed to 1. Otherwise, it returns false.

— $fell returns true if the LSB of the expression changed to 0. Otherwise, it returns false.

— $stable returns true if the value of the expression did not change. Otherwise, it returns false.

— $changed returns true if the value of the expression changed. Otherwise, it returns false.

$past函数可以用于采样过去的值。它有以下三个可选的arguments:

expression2 is used as a gating expression for the clocking event.

number_of_ticks specifies the number of clock ticks in the past.

clocking_event specifies the clocking event for sampling expression1.

7. declaring properties

property定义了design的一个行为。一个命名的property可以作为assumption、oligation、coverage specification来验证。验证为了使用这些行为,可以用assert、assume、cover statement。property的定义不产生任何的结果。

sequence和property操作符优先级和关联如下:

8. concurrent assertions

property本身永远不会求值去检查一个expression。它应该用在assertion statement内部来达到这种效果。一个concurrent assertion statement可以在以下指定:

Assertion statement的还行可以通过assertion control system tasks来控制的。

9. assert statement

Assert statement用于实施property。当assert statement评估为true时,pass statement的block会被执行。当assert statement评估为false,failed statement的block会被执行。当assert statement的property评估为disabled,没有action block会被执行,fail和pass statement的执行可以通过assertion action control task来控制的。如果没有action statement的话,一个null statement将会指定。如果没有action statement指定到else分支的话,在assertion fail的时候$error将会执行。

Action block不应该包含concurrent assert、assume、cover statement。但是,可以包含immediate assertion statements。

Assert statement的pass和fail statement是在reactive region执行的。

Assert statement例子如下:

10. assume statement

Assume statement的目的是允许properties被认为是formal analysis和dynamic simulation tools的assumptions(假设)。当一个property被assumed时,tools会约束环境来保证属性不变。

Formal analysis没有义务验证assumed properties是否成立。一个assumed property可以被认为时用来证明asserted properties。对于simulation来说,必须对环境进行约束,以便assume的属性保持不变。与assert properties一样,如果assume statement不能成立,那么必须检查并报告它。

11. cover statement

存在两类的cover statements:cover sequence和cover property。Cover sequence statement指定sequence coverage,cover property statement指定property coverage。两者的不同在于:sequence coverage对于每次评估到所有匹配的都会报告,但是property coverage的coverage count在每一次评估至多是增加一次。Cover statement是可以可选的pass statement(在reactive region执行的),pass statement不能保持呢任何concurrent assert、assume或cover statement。

12. restrict statement

在formal验证中,为了将tool约束到一个确定state,也可以使用restrict property。它和assume property有相同的semantics,但是restrict property statement在simulation时不会被验证,而且没有actionblock。

13. Using concurrent assertion statements outside procedural code

Concurrent assertion statement可以用于procedural context之外,例如位于module、interface或program。Concurrent assertion statement有assert、assume、cover或restrict statement。这样的concurrent statement使用always,这意味它指定新的evaluation在每一次它的clock event。

14. disable iff resolution

Default disable iff可以在generate block、module、interface、program里面定义。它提供了默认的disable条件给所有concurrent assertions在当前scope或subscope。进一步说,defualt可以扩展到任何nested module、interface、program、generateblock定义里。但如果nested里面有自己地鞥一的disable iff,那么外部的disable iff不生效。

在上述例子里,default disable iff作用于a1和a2。

15. clock resolution

有许多方式可以给property提供clock,有如下:

16. expect statement

Expect statement是一个procedural blocking statement,它允许等待property evaluation。语法如下:

Expect statement接受同样的语法去assert一个property。Expect statement会导致执行线程被block,直到给定的property是成功或者失败的。在expect后面的statement在observed region(所有的property完成evaluation)之后才会继续执行的。

Expect statement可以出现在任何wait statement可以出现的地方。

17. Clocking blocks and concurrent assertions

如果用于concurrent assertion的变量是clocking block变量,那么它只会在clocking block里被sampled的。

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

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

相关文章

面试题:Ajax、Fetch、Axios三者的区别

Ajax 它的全称是:Asynchronous JavaScript And XML,翻译过来就是“异步的 Javascript 和 XML”。 Ajax 是一个技术统称,是一个概念模型,它囊括了很多技术,并不特指某一技术, Ajax 是一种思想,X…

【Hello Network】网络编程套接字(一)

作者:小萌新 专栏:网络 作者简介:大二学生 希望能和大家一起进步 本篇博客简介:简单介绍网络的基础概念 网络编程套接字(一)预备知识源ip和目的ip端口号TCP和UDP协议网络中的字节序socket编程接口socket常见…

爬虫1000+个C程序

爬虫1000个C程序 问题场景 由于实验需要,我需要1000个elf文件,可是网络可获取的elf文件较少,c程序较多,所以首先下载c程序,之后gcc编译链接生成elf文件。我需要的C源码不是项目级别的,正常100行左右就可以…

PNAS:土地利用和土地覆盖的变化决定了保护区的可持续性和影响

PNAS 中文题目: 土地利用和土地覆盖的变化决定了保护区的可持续性和影响 英文题目: Land-use and land-cover change shape the sustainability and impacts of protected areas 作者: Determinants and impacts of protected area remova…

MATLAB 神经网络变量筛选—基于BP的神经网络变量筛选(链接在文末)

灰色系统理论是一种研究少数据、贫信息、不确定性问题的新方法,它以部分信息已知,部分信息未知的“小样本”,“贫信息”不确定系统为研究对象,通过对“部分”已知信息的生成、开发,提取有价值的信息,实现对…

软考第六章 网络互连与互联网

网络互连与互联网 1.网络互连设备 组成因特网的各个网络叫做子网,用于连接子网的设备叫做中间系统。它的主要作用是协调各个网络的工作,使得跨网络的通信得以实现。 网络互连设备可以根据它们工作的协议层进行分类: 中继器:工…

双周赛102(模拟、BFS技巧、求最短路模板问题)

文章目录双周赛102[6333. 查询网格图中每一列的宽度](https://leetcode.cn/problems/find-the-width-of-columns-of-a-grid/)模拟[6334. 一个数组所有前缀的分数](https://leetcode.cn/problems/find-the-score-of-all-prefixes-of-an-array/)模拟(一次遍历)😭[6335…

【黑马】JavaWeb开发教程(涵盖Spring+MyBatis+SpringMVC+SpringBoot等)目录合集

​Java Web 传统路线: 课程讲述路线: 视频链接: 2023新版JavaWeb开发教程,实现javaweb企业开发全流程 学习时间: 断断续续,按照课程安排正常学习,历时15天,完结撒花!…

快速认识并上手Eureka注册中心

文章目录一、初识Eureka1.1 EurekaServer1.2 EurekaClient1.2.1 EurekaClient中的角色二、EurekaServer2.1 搭建EurekaServer2.1.1 依赖引入2.1.2 添加注解2.1.3 配置eureka地址2.1.4 验证2.2 注册EurekaClient2.2.1 引入客户端依赖2.2.2 配置eureka地址2.2.3 验证2.3 服务发现…

【C++】多态---下(多态的原理)

前言: 在多态---上中我们了解了什么是多态,以及多态的使用条件等。本章将进行更深入的学习,我们详细理解多态的原理。 目录 (一)虚函数表 (1)虚函数表的引入 (2)虚表…

RHCE——时间服务器(ntp)

1.配置ntp时间服务器,确保客户端主机能和服务主机同步时间 2.配置ssh免密登陆,能够通过客户端主机通过redhat用户和服务端主机基于公钥验证方式进行远程连接 一.配置ntp时间服务器,确保客户端主机能和服务主机同步时间 1、软件安装 [rootl…

宝可梦朱紫太晶化效果小记

首先,不得不吐槽一下,switch上这么多代宝可梦下来,好玩是好玩,但是整体效果和优化不能说糟烂,只能说稀碎。 看这个朱紫的截帧都给我看吐了,上点心啊老任 回到效果,首先是实现方式 主要有俩点 …

3.Earth Engine语法Javascript版(基本属性2)

1.地图MAp 1. Map.add(item)这个方法通常是在地图展示区加入各种ui使用,如ui.Label 2.Map.centerObject(object, zoom)设置地图居中位置,参数object是矢量数据或者影响数据;zoom是缩放级别。 3.Map.addLayer(ee.Object, visParams, name, …

树莓派利用python-opencv使用CSI摄像头调用监控视频

目录 一、安装python-opencv。 二、使用工具Xshell7和MobaXterm 三、连接并打开CSI摄像头 3.1连线如图所示: 3.2打开摄像头 四、编写摄像头代码调用摄像头 一、安装python-opencv。 一定要选择配置好的安装python-opencv,不要去配置安装&#xff0c…

012 - C++指针

本期我们将学习 C 中的指针。 指针是一个令很多人都很痛苦的内容,然而指针其实没有大家想象中的那么复杂。另外我先要说明本期我们要讨论的是原始的指针,还有一种常用的指针叫智能指针,这个我们在之后的内容中会接触学习。 计算机处理内存&…

LeetCode_二叉搜索树_中等_236.二叉搜索树的最近公共祖先

目录1.题目2.思路3.代码实现(Java)1.题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 …

jQuery讲解|这一章就够了|(超详细|保姆级)

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:老茶icon 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计…

【设计模式】生产者消费者模型

带你轻松理解生产者消费者模型!生产者消费者模型可以说是同步与互斥最典型的应用场景了!文末附有模型简单实现的代码,若有疑问可私信一起讨论。 文章目录一:为什么要使用生产者消费者模型?二:生产者消费者模…

JDK 17:Java 17 中的新特性简介

Java 开发工具包 (JDK) 17 将是一个长期支持 (LTS) 版本,预计来自 Oracle 的扩展支持将持续数年。该功能集定于 6 月 10 日冻结,届时 JDK 17 将进入初始阶段。作为 OpenJDK JDK 17 的一部分提交的功能包括: 特定于上下文的反序列化过滤器允许…

计算机网络 实验一

⭐计网实验专栏,欢迎订阅与关注! ★观前提示:本篇内容为计算机网络实验。内容可能会不符合每个人实验的要求,因此以下内容建议仅做思路参考。 一、实验目的 掌握在Packet Tracer软件中搭建实验平台,配置基本的网络参数…