SVA断言学习笔记(一)

SVA断言介绍

数字电路的规模和复杂度的不断增长,使得功能验证成为一项巨大的挑战。验证的目标的彻底地验证被测设计(DUT),确保其中没有功能缺陷。
断言是设计的属性的描述,主要用于验证设计必须满足的属性。断言可以用来提供功能覆盖,并标记输入激励,用于验证不符合假设的要求。

  • 如果一个在模拟中被检查的属性(property)不像我们期望的那样表现,那么这个断言失败。
  • 如果一个被禁止在设计中出现的属性在模拟过程中发生,那么这个断言失败。
    断言又被成为RTL代码检验器

并发断言(concurrent assertions)

  • 基于时钟周期
  • 在时钟边缘根据调用的变量的采样值计算测试表达式,
  • 变量的采样在预备阶段完成,而表达式的计算在调度器的观察阶段完成。
  • 可以被放到过程块(procedural block)、模块(module)、接口(interface),或者一个程序(program)的定义中
  • 可以在静态(形式的)验证和动态验证(模拟)工具中使用
    并发断言实例:
    在这里插入图片描述
    仿真结果:
    在这里插入图片描述
    仿真中所有的成功显示成向上的箭头,所有的失败显示成向下的箭头。这个例子中属性在每一个时钟的上升沿都被检验。

即时断言

即时断言(immediate assertions)

  • 基于模拟事件的语义
  • 测试表达式的求值就像在过程块中的其他verilog的表达式一样。他们本质不是时序相关的,而是立即被求值。
  • 必须放在过程块的定义中
  • 只能用于动态模拟
    即时断言实例:
    在这里插入图片描述
    仿真结果:
    在这里插入图片描述
    可见,即时断言a_ia被写成一个过程块的一部分,它遵循和信号a、b相同的事件调度。当信号a或者信号b发生变化时,always块被执行。区别即时断言和并发断言的关键词是“property”。

SVA块的建立

建立SVA检验器由以下四个步骤组成:

  • 建立布尔表达式
  • 建立序列表达式
  • 建立属性
  • 断言属性
  • 布尔表达式
    布尔表达式是构成SVA的基本单元,由信号及其逻辑关系运算符构成,用以表示某个逻辑事件的发生。

序列sequence

是布尔表达式在时间上的组合,SVA用关键词“sequence”来表示这些事件。
序列的基本语法:
在这里插入图片描述
序列举例:
序列s1检查信号“a“在每个时钟上升沿都为高电平,因此如果”a”在任何一个时钟上升沿不为高电平,断言将失败。
在这里插入图片描述
仿真结果:
在这里插入图片描述

属性property

属性是在仿真或者形式验证中被验证的单元。
属性将序列通过逻辑或者有序地组合起来生成更复杂的序列。SVA用关键词“property”来表达这些复杂的有序行为。
属性的基本语法:
在这里插入图片描述

断言assert

属性是在模拟过程中被验证的单元。它必须在模拟过程中被断言来发挥作用。SVA提供了关键词“assert”来检查属性。
断言的基本语法:
在这里插入图片描述

内嵌函数 r o s e 、 rose、 rosefell、$stable

$rose | 当信号/表达式的最低位变成1时返回真
$fell | 当信号/表达式的最低位变成0时返回真
$stable | 当信号/表达式不发生变化时返回真
$rose实例:
序列s2检查信号”a“在每个时钟上升沿都跳变为1。如果跳变没有发生,断言失败。
在这里插入图片描述
仿真结果:当信号从0跳变至1时,断言成功。
在这里插入图片描述

需要注意的是,在信号a跳变至X/Z态时,$rose断言失败;从X/Z态跳变至1时,断言成功

时序关系的序列

简单的布尔表达式在每个时钟边缘都会被检查。很多时候,我们关心的是检查需要几个时钟周期才能完成的事件,也就是所谓的“时序检查”。在SVA中,时钟周期延迟用“##”来表示。例如,##2表示2个时钟周期。
实例:序列s4检查信号a在每个时钟上升沿是否为高电平,若是则检查两个时钟周期之后b是否为高电平,若是则断言成功。
在这里插入图片描述
仿真结果:
在这里插入图片描述

禁止属性

属性可以被禁止发生,即我们期望属性永远为假,当属性为真时,断言失败。SVA提供了关键词“not”用来表示属性应该永远不为真。
禁止属性实例:a6表示在某时钟上升沿a为高电平,且2个时钟周期后信号b为高电平时,则断言失败,否则断言成功。
在这里插入图片描述
仿真结果:
在这里插入图片描述
好了,今天就先到这了。欢迎留言讨论。

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值