#SVA语法滴水穿石# (013)关于 disable iff、matched 、expect 的用法

SystemVerilog 断言(SVA)中 disable iffmatched 和 expect 的语法知识。

1. disable iff (condition)

功能与定义

  • 作用:当指定条件(condition)为真时,禁用当前属性的检查

    • 常用于复位(reset)期间忽略断言检查,避免误报。

    • 条件生效时,断言立即停止检测,且不会触发失败。

语法

property ;
  disable iff (condition) ;
endproperty

示例与波形

 

property check_valid_data;
    disable iff (reset)  // 复位期间不检查
    @(posedge clk) 
    valid |-> (data == expected_data);
endproperty

assert property (check_valid_data);

波形分析

周期: 0   1   2   3
reset :1   0   0   0
valid :0   1   1   0
data  :X   5   6   5
expected_data:5   5   5
  • 周期 0reset=1,断言被禁用。

  • 周期 1data=5,符合预期 → 断言通过

  • 周期 2data=6,不符合预期,但 reset=0 → 断言失败

2. matched

功能与定义

  • 作用:用于 引用一个命名子序列的结束时间点,通常用于同步多个序列的时序关系。

    • 结合 end 关键字,捕获子序列的结束时间。

    • 常用于多序列组合中需要对齐时序的场景。

  • 语法:

    sequence sub_seq;
      ... // 子序列定义
    endsequence
    
    sequence parent_seq;
      sub_seq.ended ... // 使用 matched 捕获子序列结束点
    endsequence

    示例与波形

sequence req_ack_seq;
    req ##1 ack;
endsequence

sequence data_transfer_seq;
    data_valid ##2 data_done;
endsequence

property check_sync;
    @(posedge clk) 
    req_ack_seq.ended |-> data_transfer_seq.ended;
endproperty

assert property (check_sync);

波形分析

周期: 0   1   2   3
req  :1   0   0   0
ack  :0   1   0   0    // req_ack_seq 在周期1结束
data_valid:1   1   1   0
data_done :0   0   1   0  // data_transfer_seq 在周期2结束
  • 断言失败req_ack_seq 在周期1结束,但 data_transfer_seq 在周期2结束,时序不同步。

3. expect

功能与定义

  • 作用:类似于 assert,但 支持阻塞等待属性成功并执行后续操作

    • 常用于测试平台(testbench)中,等待特定条件后继续执行代码。

    • 可以指定超时时间,若超时则触发 else 分支。

  • 语法

    expect ()  
      else ;

    示例与波形

initial begin
    // 等待 req 后 2 周期内收到 ack,超时则报错
    expect (@(posedge clk) req |-> ##[1:2] ack) 
        $display("ACK received on time.");
    else 
        $error("ACK timeout!");
    // 继续执行其他操作
    send_data();
end

波形分析

周期: 0   1   2   3   4
req  :0   1   0   0   0
ack  :0   0   1   0   0
  • 断言通过ack 在周期2拉高(在 req 后 2 周期内)→ 打印成功消息。

  • 超时场景:若 ack 在周期3拉高,触发 else 分支报错。

4. 对比总结

关键字 核心作用 典型应用场景
disable iff 条件触发时禁用属性检查 复位期间忽略断言
matched 同步子序列的结束时间点 多序列时序对齐(如握手协议)
expect 阻塞等待属性成功并执行后续操作 测试平台中的条件等待与流程控制

 

你可能感兴趣的:(SVA,SVA)