SVA 断言笔记

简单而言就是检查某一行为与我们的预期是否相符,如果相符则断言成功否则断言失败。举个栗子,这个行为可以是:1)A信号有效后(由当拍算起)三拍内B信号值跳变为5,2)vld信号有效时data信号不能为X态,那么针对这两个行为我们可以都可以写出断言,一旦仿真中行为不符合了那么会报错。断言还可以对总线协议进行定义和验证(AHB/APB)等,相当于一个RTL代码的监视器。

断言可以放在过程块(procedural block)、模块(module)、接口(interface)和程序(program)中。

img

一、断言介绍

断言分为立即断言并发断言。立即断言是非事件性的,断言属性类似if语句中的条件表达式,用于检查表达式的值是否为真,断言失败时必须采用相应的仿真行为,如下语法:

assert_info:assert(expression)
     $display("passed");       //expression为真时,执行语句
  else
     $display("failed");      //expression为假时,执行语句

相比于立即断言,并发断言更为常用,**并发断言基于时钟周期,用于描述一个跨时钟周期的行为,*并发断言使用*关键字property…endproperty描述事件,如下:

property  p_shakehand;                 //当行为属性p_shakehand中的条件request为真时,结果序列必须为真,否者序列失败
   @(posedge  clk)                     //符号“|=>”左侧的为原因序列,右侧为结果序列
   request |=> acknowledge ##1 data_enable ##1 done;      //2. 当request为1时,启动线程序列检查
endproperty
apshakehand:assert property(p_shakehand);       //1. assert关键字启动断言检查

断言语法主要分为五个结构层次

  1. 最底层——布尔表达式
  2. 第二层——序列(sequence),其中可包含一些操作符,如##时隙延迟、重复操作符、序列操作符等,序列是一个封装格式,可在不同地方使用;
  3. 第三层——属性(property),重要的封装方式,可封装sequence,内部可定义蕴涵操作符(|->,|=>)
  4. 第四层——断言指示层,即采用assert对特定的属性或者序列做行为检查,或者采用cover做覆盖率统计;
  5. 第五层——断言的最后封装,这一层可以通过module、program、interface来进行封装。

断言关键字

  • thread:线程是一组相关的事件序列(原因序列与结果序列),表示一种设计属性;
  • sequence:序列是描述一种信号时序关系的基本语句块;
  • property:属性用于封装各种sequence,可作为检查器、假设条件和覆盖率,对应关键字为assert、assume、cover;
  • |-> : 表示起因序列与结果序列处于同一个时钟周期;只有当起因序列为真时才进行结果序列的检查,避免虚假错误的产生
  • |=> :表示结果序列处于起因序列的下一个时钟周期;等效于##1。
sequence s1;       //sequence主要描述信号与信号之间的时序关系
  a ##1 b ##1 c;    //a为高,下一拍b为高,在下一拍c为高
endsequence

property p1;       //property主要将各种sequence进行封装
  s1;
endproperty

a1:assert property(@(posedge clk) a |-> p1 );    //关键字assert启动断言, |-> :表示起因序列和结果序列在同一个周期

二、并发断言序列sequence运算符

延迟运算符

img

#a ##3 b

含义是a有效后的第3拍(a有效当拍为第0拍),b也有效。如果b在第3拍未能有效,则序列匹配失败。信号a在第60ns采样判定为1,开始进行序列的匹配;在第120ns即开始匹配后的第3拍,采样信号b的值为1,则判定开始与60ns的序列匹配成功。

错误的波形图,200ns的序列匹配失败因为在260ns处信号b不为1。

img

连续重复运算符

a[*3]

含义是a连续为1重复3拍,即a ##1 a ##1 a,160ns处起始的序列在200ns处匹配成功一次。

img

(a ##1 b)[*3]

这个序列等同于(a ##1 b) ##1 (a ##1 b) ##1 (a ##1 b),对于下面这个波形会在80ns处开始尝试匹配在160ns处匹配成功。

img

非连续跟随重复符

a ##1 b[->3] ##1 c

这个序列表示在a有效之后,c有效之前,b应该有效3次且最后一次有效的时间应当恰好比c有效早1拍(跟随性);

img

下面也可以(保证非连续有效3次即可)

img

非连续(无所谓跟随)重复操作符

a [=3]

img

跟a[->3]的区别(下图红点)在a[=3]有很多的匹配成功点(上图蓝点)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值