#SVA语法滴水穿石# (001)关于 |-> 和 |=>

在SystemVerilog Assertions(SVA)中,|->|=> 是两种不同的隐式条件操作符,它们的用法和行为有所不同。

1. |->(重叠隐式条件操作符)

  • 定义|-> 是一个重叠隐式条件操作符,用于检查条件是否在当前周期满足,并在同一个周期内触发后续的序列。

  • 行为:如果条件在当前周期为真,则后续的序列会在当前周期开始执行。

  • 语法

  • property p;
      a |-> b;
    endproperty
  • 解释:如果 a 在当前周期为真,则 b 必须在当前周期为真,否则断言失败。

2. |=>(非重叠隐式条件操作符)

  • 定义|=> 是一个非重叠隐式条件操作符,用于检查条件是否在当前周期满足,并在下一个周期触发后续的序列。

  • 行为:如果条件在当前周期为真,则后续的序列会在下一个周期开始执行。

  • 语法

  • property p;
      a |=> b;
    endproperty
  • 解释:如果 a 在当前周期为真,则 b 必须在下一个周期为真,否则断言失败。

3. 区别

  • 触发时间点

    • |->:条件和序列都在当前周期触发。

    • |=>:条件在当前周期触发,序列在下一个周期触发。

  • 适用场景

    • |->:用于检查条件和结果在同一个周期内发生的情况。

    • |=>:用于检查条件在当前周期发生,结果在下一个周期发生的情况。

4. 举例

// SVA断言:在tagError上升后,tErrorBit和mCheck需在后续某周期同时上升
property tag_error_check;
    @(posedge clk)
    //$rose(tagError) |-> ##[10:30] ($rose(tErrorBit) ##0 $rose(mCheck));
    $rose(tagError) |=> ##[10:30] ($rose(tErrorBit) ##0 $rose(mCheck));
endproperty

// 断言实例化
assert property (tag_error_check) 
         $display("Assertion passed @ %0t", $time);
    else $error("Assertion failed: tErrorBit and mCheck @ %0t!", $time);

4.1 交叠蕴含符号 

4.2 非交叠蕴含符号 

5. 总结

  • |->:条件和结果在同一个周期内检查。

  • |=>:条件在当前周期检查,结果在下一个周期检查。

选择使用哪个操作符取决于你希望检查的条件和结果的时间关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那么菜

你的鼓励和批评是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值