Systemverilog断言介绍(一)

news2024/11/20 15:32:42

3 Introduction to systemverilog assertions

        为了利用形式验证(FV)的力量来证明设计的正确性,首先必须有一种表达您的设计是否正确的方式。最流行的方法是通过property来实现,使用SystemVerilog Assertions(SVA)语言来进行规定。虽然行业和学术界有许多规范方法,比如属性规范语言(PSL)和开放验证库(OVL)断言库,但在过去的十年里,SVA已经有效地成为了指定寄存器传输级(RTL)属性的行业标准。因此,在详细探讨FV技术之前,需要从学习SVA语言开始。

3.1 BASIC ASSERTION CONCEPTS

3.1.1 A SIMPLE ARBITER EXAMPLE

一个arbiter的设计如下:

图片

        这是一个有四个请求代理的仲裁器,每个代理都可以使用 req 信号的一个比特位请求一个共享资源。gnt 信号指示当前获得使用资源授权的agent。还有一个 opcode 输入,允许某些命令覆盖仲裁器的正常行为,例如强制特定代理获取优先权,或在一段时间内切断对资源的所有访问。还有一个错误输出,表示已发送错误的 opcode 或非法的 opcode 序列。下面是实现此设计的顶层SystemVerilog(SV)模块的接口代码。

图片

3.1.2  WHAT ARE ASSERTIONS?

        在最基本的层面上,断言是关于对设计的陈述,期望它始终为真。对于仲裁器来说,一个简单的例子可能是当没有请求时,不能授权给agent。

check_grant: assert property (!(gnt[0] && !req[0])) else $error(“Grant without request for agent 0!”);

        实际上断言可以比上面的简单布尔表达式更复杂,涉及逻辑蕴含和关于值随时间变化的可能性的陈述。

        在对模型进行仿真时,当您的仿真器检测到代码中的任何SVA断言不为真时,通常会标志错误。在上面的例子中,如果在仿真中看到 gnt[0] == 1 和 req[0] == 0,将显示消息“agent0没有请求却获得授权!”。

        当运行形式属性验证(FPV)工具时,断言被视为证明目标:该工具的目标是数学上证明您的RTL模型永远不会违反该断言。在深入技术细节之前,我们应该了解另外两种属性类型:假设(assumptions)和覆盖点(cover points)。

3.1.3 WHAT ARE ASSUMPTIONS?

        assumption与assertion类似,但与指定测试设备的行为不同,它们通常指定用于约束验证环境的条件。通常,这些条件是由输入或其他环境因素导致的外部保证为真的条件。例如,期望的仲裁器只会在其操作码输入处收到合法的非NOP操作码。

        在仿真中,与断言一样,假设会被以完全相同的方式处理:仿真器会检查当前仿真值是否违反了指定的条件,如果是,则标记为违反,并在不违反时输出消息。但请记住,概念上的含义仍然有些不同于断言失败:失败的假设通常意味着测试环境、测试平台代码或相邻的设计模块中存在问题,而失败的断言通常表示被测试设计中存在问题。在上面的好操作码例子中,这将表示测试平台错误地将非法的操作码驱动到设计中。

        在形式验证(FV)中,假设和断言之间存在一个重要的区别。顾名思义,假设是工具认为是真实的东西。假设被视为公理,并用来证明断言的真实性。没有假设,FV工具会从允许任何可能的值到达它们正在分析的模型的输入开始;假设是用户引导这些值朝着可接受的行为方向的主要方法。在大多数情况下,一个好的假设集是为了消除对不现实行为的考虑并正确证明设计上的断言的要求。

        Assumption例子:假设形式化验证一个FIFO,那么FIFO的空满信号必定不能同时为真。如果事务输入不做任何assumption,那么形式验证工具会考虑空、满同时为真的场景,这样会出现虚假的等效失败。

3.1.4 WHAT ARE COVER POINTS?

        SVA覆盖点的规定方式与断言和假设相似,但意义上有些不同。虽然断言或假设被期望始终为真,但覆盖点只有在某些情况下才为真:它指定了我们希望确保进行测试的某种有趣条件。例如,在我们的仲裁器中,我们可能希望确保我们正在测试所有代理一次性请求资源的可能具有挑战性的情况:

cover_all_at_once: cover property (req[0]&&req[1]&&req[2]&&req[3]);

        在模拟中,大多数用户会集体检查覆盖点:当一个覆盖点被命中时,工具或脚本会将信息保存到数据库中,最后用户可以在运行完测试套件中的所有模拟测试后检查总体覆盖率。通常,希望确保每个覆盖点至少被命中一次;如果没有,这意味着测试中存在潜在的漏洞。

        对于性能验证(FV)来说,覆盖点也扮演着重要的角色。虽然FV在理论上覆盖了系统的所有可能行为,但要记住可以指定假设或其他输入要求来限制考虑的可能流量。这导致了过度约束的危险:可能会不小心指定排除系统的有趣流量类别的规定。因此,确保FV环境能够达到所有覆盖点是FV中的关键步骤。

3.1.5 SVA ASSERTION LANGUAGE BASICS

                SVA断言语言可以被看作是多层逐渐增加复杂度的结构。

图片

  • 布尔表达式(Booleans)是标准的SystemVerilog布尔表达式。一个布尔表达式可以是一个逻辑变量,也可以是像上面的覆盖点示例中的公式:

    req [0] && req [1] && req [2] && req [3]
  • 序列(sequences)是关于布尔值(或其他序列)随时间发生的语句。它们依赖于明确定义的时钟事件来定义时间的流逝。例如,以下序列表示在两个时钟周期中的请求后紧跟着授权:

    req[0] ##2 gnt[0]
  • 属性(Properties)使用额外的运算符将序列结合起来,以显示蕴含和类似概念,以表达在设计中预期保持的某些行为。例如,一个属性可能表明,如果我们接收到一个请求,然后两个周期后接收到授权,那么这意味着在下一个周期授权将会取消:

    req[0] ##2 gnt[0] |-> ##1 !gnt[0]
  • 断言(Assertion)语句是使用 assert、assume 或者 cover 关键字之一的语句,它可以将一个SVA属性作为一个断言、假设或者覆盖点进行检查。除非在某种断言语句中使用,否则属性没有任何效果。例如,导致上述属性被检查的断言语句可以是:

    gnt_falls: assert property(req[0] ##2 gnt[0] |-> ##1 !gnt[0]);

还有一个关键概念需要介绍,即时断言和并发断言:

  • Immediate assertion:即时断言语句是简单的断言语句,每当在过程代码中访问时都会进行检查。它们只允许布尔参数,没有时钟或复位机制,并且不支持许多高级属性运算符。因此,它们无法检查需要对时间流逝有意识的条件。在 SVA 中,即时断言通过不带关键字 property 的断言来指示,如下所示.

    imm1: assert (!(gnt[0] && !req[0]))
  • Concurrent assertion: 并发断言语句始终相对于一个或多个时钟进行评估,并且可以描述跨越时间的行为,并且允许许多支持关于时间间隔的逻辑蕴含的高级陈述运算符。因此,它们比即时断言语句更加通用。在 SVA 中,通过在断言中包含关键字 property 来指示并发断言,如下所示.

    conc1: assert property (!(gnt[0] && !req[0]))

        虽然并发断言 conc1 看起来与即时断言 imm1 相似,但它们的评估方式有一些重要的区别。即时断言在过程代码中被访问时会进行评估,而并发断言只在明确定义的时钟边沿处进行评估。

 

原创 Junxiao Zhang 芯片验证笔记 

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

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

相关文章

Halcon 3D相关案例分享

文章目录 一、预处理1、平滑滤波算子说明平滑效果图 二、检测1、外观缺陷检测算子说明缺陷检测效果图 2、点云边界框算子说明边界框效果图 3、平面度检测算子说明平面度效果图 三、量测1、高度测量算子说明测量效果图 2、体积测量算子说明测量效果图 四、配准1、根据模型配准算…

【算法|动态规划No.23】leetcode376. 摆动序列

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

doris operator部署Doris集群教程

doris operator部署Doris集群教程 前言部署流程 前言 kubernetes Operator是遵循kubernetes API和控制器模式,它主要用来封装运维业务逻辑的软件。它利用kubernetes的自定义资源定义(CRD)扩展API,并通过控制器模式监听资源对象&a…

CVPR 2018 基于累积注意力的视觉定位 Visual Grounding via Accumulated Attention 详解

Abstract: VG面临的主要挑战有3个:1 )查询的主要焦点是什么;2 )如何理解图像;3 )如何定位物体。 在本文中,我们将这些挑战形式化为三个注意力问题,并提出了一个累积注意力( A-ATT )机制来共同推理其中的挑战…

找不到msvcr120.dll无法执行代码?教你6种方法快速解决问题

在现代的计算机编程中,我们经常会遇到各种各样的问题。其中,“由于找不到msvcr120.dll无法执行代码”的问题是许多开发者都会遇到的一个常见难题。这个问题通常发生在我们试图运行使用Visual Studio 2013编译的程序时,因为msvcr120.dll是Micr…

【QT】QTreeWidget

新建项目 第一步:设置头标签 第二步:设置item 第三步:创建子item,挂载在顶层item下 完整代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::W…

Unity Animation--动画剪辑(动画游戏对象)

保存新的动画剪辑后,就可以开始添加关键帧了。 可以使用两种不同的方法为GameObject设置动画。 Unity“动画”窗口:“记录模式”和“预览模式”。 记录模式下的动画窗口 在记录模式下,当您移动,旋转或以其他方式修改动画GameOb…

2022年下半年 软件设计师 上午试卷(前21题)

以下关于RISC(精简指令集计算机)特点的叙述中,错误的是 (1) 。 (1) A. 对存储器操作进行限制,使控制简单化 B. 指令种类多,指令功能强 C. 设置大量通用寄存器 D. 选…

通讯网关软件027——利用CommGate X2OPCUA实现OPC UA访问MSSQL服务器

本文介绍利用CommGate X2OPCUA实现OPC UA访问MS SQL数据库。CommGate X2OPCUA是宁波科安网信开发的网关软件,软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示,实现上位机通过OPC UA来获取MS SQL数据库的数据。 【解决方案】…

全栈开发 - 从 Vue 配置中解决 CORS 跨域问题(2分钟搞定)

目录 一、CORS 跨域问题解决 1.1、前言 1.2、解决办法 a)修改统一配置的 axios 实例 b)修改 config 文件夹下的 index.js 文件 c)完成 一、CORS 跨域问题解决 1.1、前言 如果你后端使用的是微服务项目,通过配置网关可以很好的…

GEE打开NASA-USDA增强型SMAP全球土壤水分数据(10KM,2015-2020)

NASA-USDA增强型SMAP全球土壤水分数据(10KM,2015-2020) 一、GEE登录 首先需要注册一个Goole账号 在该网站中注册 二、创建GEE项目 按照上面操作,注册完后会创建一个自己的GEE项目。(没有的话也可以从下面这个网站…

【网络】用代码讲解HTTP协议

http协议 前言正式开始HTTP协议URLURL格式中每个字段所代表的内容格式中每个字段的作用URL对于特殊符号的处理 HTTP格式快速构建http请求和响应的报文格式http requesthttp response 一些细节http demo web目录代码实现 HTTP请求方法表单GET和POST提交的区别其余方法 HTTP的状态…

什么是热阻?

电流流过导体时,在导体两端会产生电压差,这个电压差除以流过导体的电流就是这个导体的电阻,单位是欧姆。这就是欧姆定律,大家都知道的东西。 当热源的热量在物体中传递时,在物体上也会产生温度差,这个温度差…

面对DDoS和APT攻击,我们该如何有效防御?

关于DDoS(Distributed Denial of Service)分布式拒绝服务攻击,是指攻击者通过技术手段,在很短的时间内对目标攻击网站发出大量请求,极大地消耗相关网站的主机资源,导致其无法正常服务。 打个比方来说&#…

Ubuntu系统上传文件的多种方法-断网上传-安装包上传-物联网开发维护

一、背景 在全新的Ubuntu系统中,其实是无法执行ifconfig命令的,因为这需要net-tools才能执行。在某些无法连接到外网的情况下,我们常常通过将安装包上传或发送到Ubuntu系统中,解压并安装,以保证相关指令能够执行。 本文…

梯度下降算法(Gradient Descent)

GD 梯度下降法的含义是通过当前点的梯度(偏导数)的反方向寻找到新的迭代点,并从当前点移动到新的迭代点继续寻找新的迭代点,直到找到最优解,梯度下降的目的,就是为了最小化损失函数。 1、给定待优化连续可微…

基于Qt QSpinBox 微调框小案例

修改微调框数值的方式包括: 单击右侧的向上/向下按钮 按键盘的向上/向下键 在微调框获取焦点时,通过鼠标滚轮的上下滚动 当然了,也允许用户手动输入 其中: QSpinBox - 用于整数的显示和输入 QDoubleSpinBox - 用于浮点数的显示和输入 它们都是 QAbstractSpinBox 的子类,具…

机器人制作开源方案 | 行星探测车实现WiFi视频遥控功能

1. 功能描述 本文示例所实现的功能为:用手机APP,通过WiFi通信遥控R261样机行星探测车移动,以及打开、关闭行星探测车太阳翼。 2. 电子硬件 在这个示例中,我们采用了以下硬件,请大家参考: 主控板 Basra主控…

DRF反序列化时数据验证完毕返回的是None值

文章目录 错误复现serializers.pyview.py错误 解决方案正确的代码 错误复现 serializers.py class LoginSerializer(serializers.Serializer):username serializers.CharField(min_length5, max_length10, help_text"账号")password serializers.CharField(min_l…

STM32内部flash闪存的总结

最近在做无人船和机巢远程在线升级的项目,牵扯到flash的操作,特此记录,便于以后查找。IMU也用到过,当时没记录 具体细节看 E:\Documets\AY\a-project\IMU\IMU16500\S0IMU v3.3 study\User\Driver\source eeprom.c E:\Documets\A…