SVA:并发断言的$rose, $fell, $past

Examples

property check(@ posedge clk) $rose(a) -> ##1 b[*3] ##1  c
endproperty 
checker : assert property(check)

在这里插入图片描述
在上式中,需要关注的两点:

  1. 并发断言的采样时钟边沿的跳变,是否和时序逻辑采样值一样?
  2. $rose和posedge是否一样?

并发断言的采样

并发断言是根据每个时钟边沿的采样值,进行逻辑判断后,确认断言的成功和失败。
和正常的时序逻辑采样相同,在时钟沿跳变的变量,在当前时钟沿采的都是变化之前的值。

例如: 上例中在T2 的时候,a的采样值为0 而不是1.

$rose 和 posedge的区别

$rose和posedge都是用来捕捉边沿,但定义有所不同:

posedge

Define : 数值由0->1的时刻

例如 : 上例中T2就是a的一个posedge

$rose

Define :连续连个采样周期所采值有变化,并且当前采样值为1。
例如上例中:

TimesValue
T10
T20
T31
T40

只有在T3的时候才符合定义,$rose为真,而不是在T2.
同理 $fell也是一样

$rose/ $fell在真实的posedge和negedge的时候是永远不会成立的。

$past

$rose $fell有个限制是只捕捉信号的最低比特, 如果捕捉的是个bus,就会跟预期不一致。
如果是对bus进行操作最好用 $past.

$past(var,num_of_ticks, enable)
  1. 需要注意$past是对之前的数值进行采样,但是如果在仿真一开始就执行 $past,没有足够的past,它会去看这个变量在声明时候的初始值,如果没有初始值,就会fail。

enable

第三个参数enable,相当于是门控, 只有在enable为1的时候才回去计算$past的值,如果enable为0 , $past只会返回上一次的计算值。

property check(@ posedge clk) c -> $past(b,1,a)
endproperty 
checker : assert property(check)
  1. 只有C为真, 即前置条件为真才会进行$past的计算
  2. 在计算$past之前,需要看a:
    • a为1,计算
    • a为0,返回上一次past值。

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部