首页 > 其他分享 >Verification -- Basic Concepts ~ 5. Assertion Based Verification

Verification -- Basic Concepts ~ 5. Assertion Based Verification

时间:2024-04-09 22:12:49浏览次数:17  
标签:Based 断言 验证 -- FIFO Verification 设计 fifo

Assertion Based Verification

基于断言的验证(ABV)是一种将断言用作验证数字设计正确性的主要手段的技术。断言是描述在设计中必须始终为真的条件的语句,通常使用硬件描述语言(如 SystemVerilog 或 VHDL)编写。

ABV 背后的基本思想是结合使用功能和形式验证设计是否满足其功能要求。SystemVerilog 断言用于定义设计的预期行为,形式验证技术用于检查设计在所有可能的条件下是否满这些断言。

ABV 可用于设计过程的各个阶段,包括设计验证、模块级验证和全芯片验证。通过使用断言作为验证设计的主要手段,ABV 可以帮助减少验证所需的时间和精力,同事提高设计的质量和可靠性。

Example

基于断言的验证的一个示例是验证 FIFO 设计的正确性。

假设我们有一个宽度为 8 位,深度为 16 位的 FIFO。该设计具有读取和写入指针来跟踪数据。为了验证设计,我们可以通过编写断言来检查以下内容,从而使用基于断言的验证:

  • 写入指针不应该环绕并覆盖有效数据
  • 读取指针不应环绕并读取过时的数据
  • FIFO中的元素量不应超过FIFO的深度
  • 当FIFO已满时,不应允许写入操作
  • 当FIFO为空时,不应允许读取操作

这些断言可以用 SystemVerilog 断言(SVA)语法编写,并应用在仿真过程中自动验证设计。通过使用基于断言的验证,我们可以比传统的基于仿真的验证更全面、更高效地验证设计。

assert property (@posedge clk) disable iff (!rst_n)
  (in_fifo_wr && !in_fifo_full) ##[1:$] !in_fifo_empty && !in_fifo_wr);

此断言检查当写入使能信号in_fifo_wr为高电平且FIFO未满!in_full_full时,则至少应有一个周期,其中FIFO不为空!in_fifo_empty,写入使能信号为低!in_fifo_wr。禁用iff !rst_n条件可确保在重置期间禁用断言。

局限性

基于断言的验证的一些限制包括:

  • 范围有限:断言仅检查设计的特定方面,可能无法提供设计行为的完整图片。
  • 耗时:编写断言可能是一个耗时的过程,尤其是对于复杂的设计。编写和调试复杂的断言需要付出巨大的努力。
  • False negatives and false positives:断言可能会产生误报(即使设计正确,断言也会失败)或误报(即使设计不正确,也会通过的断言)。这些问题可能难以诊断和纠正。
  • 覆盖范围不完整:断言可能无法涵盖所有可能的设计方案和极端情况。
  • 有限的调试:调试断言中的失败可能很困难,因为断言通常是自动执行的,并且不提供有关出错的详细信息。
  • 对传统设计的有限支持:传统设计在设计时可能没有考虑到基于断言的验证,并且肯能没有必要的检测来支持它。

标签:Based,断言,验证,--,FIFO,Verification,设计,fifo
From: https://www.cnblogs.com/sys-123456/p/18124926

相关文章

  • 蓝桥杯 强者挑战赛9
    标算无理数位数查询LL没开全,WA想不太清楚细节,写了半个多小时。。。预处理而不是现算会好写一点赛时做法先确定第\(n\)位所属的数的位数,再确定该位数中第\(k\)大的数标算设\(g(x)\)表示\(m\)进制下\(1\simx\)的位数和,二分第\(n\)位所属的数贝贝的集合先不......
  • OOP 面向对象
    转载自https://zhuanlan.zhihu.com/p/524264177并做部分内容上的补充和修改在前一章,我们学习了抽象数据类型(ADT)理论,这一章,我们学习ADT的具体实现技术:OOP类与对象什么是对象?对象都有两个特征:状态(states)和行为(behaviors)我们可以从真实世界中的对象来理解这两个特征:......
  • 【Kotlin】Array简介
    1源码publicclassArray<T>{publicvalsize:Intpublicinlineconstructor(size:Int,init:(Int)->T)publicoperatorfunget(index:Int):T//重载a[i]运算符publicoperatorfunset(index:Int,value:T):Unit//重载a[i]=x运算符pu......
  • 【Kotlin】List、Set、Map简介
    1List​Java的List、Set、Map介绍见→Java容器及其常用方法汇总。1.1创建List1.1.1emptyListvarlist=emptyList<String>()//创建空List1.1.2List构造函数varlist1=List(3){"abc"}//[abc,abc,abc]varlist2=ArrayList<Int>()varlist3=......
  • 198. 打家劫舍
    题目链接:本题考察动态规划。实现一、递推\(f[i]\)表示考虑下标从\(0\simi\)的房屋最多能抢劫到的金额。思考状态转移时考虑第\(i\)个房屋抢或不抢。由于不能抢劫相邻的房屋,若抢了第\(i\)个房屋,则第\(i-1\)个房屋就不能抢,再抢只能从\(i-2\)开始考虑,即\(\rmf[i-......
  • 敌人——创建敌人135
    目标创建敌人135的子行为树并创建一个BTT(范围内随机巡逻)在Enemy父级蓝图创建检测事件在敌人135的子蓝图中创建射击事件思路使用射线检测来制作感知系统而非感知系统没有主要使用行为树来制作AI逻辑,逻辑由父级蓝图和子蓝图和Task之间的互相调用形成一般来说不推荐这种做法......
  • c++中的缺省参数
    c++相对于C语言的一个新的语法叫做缺省参数。什么叫做缺省参数呢???我们先来看我们已知的Add函数缺省参数就是给x和y赋一个默认的值  我们可以根据自己的需要将x或者y给上缺省值看下面一个例子: 如果我们将函数中所有的参数都给上了缺省值,我们也叫这些参数为全缺省参数......
  • SWUST 964: 数细胞
    #include<iostream>#include<cstdlib>usingnamespacestd;#definemax50000structpos{ intx; inty;};typedefstructse{ posdata[max]; intfront,rear;}Sequeue;voidinit(Sequeue*&Q){ Q=(Sequeue*)malloc(sizeof(Sequeue))......
  • kvm基础命令
    前言一、基础命令1.虚拟机查看2.虚拟机开启与关闭3.虚拟机删除4.查看虚拟机的配置5.配置文件重定向6.命令行登录虚拟机二、调整虚拟机磁盘大小三、虚拟机创建快照四、virshconsole报错总结前言今天我们分享一下如何使用kvm基础命令。一、基础命令1.虚拟机......
  • Linux常用命令
    目录一、pwd-查看当前工作目录二、cd-切换工作目录1.将用户的工作目录更改到其他位置2.绝对路径与相对路径(1)绝对路径(2)相对路径 3.案例三、ls-列表显示目录内容1.表现形式2.常用形式3.ls-l 4.通配符5.示例 四、alias-设置别名五、du-统计目录及文件空间占用......