当前位置: 首页 > news >正文

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

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

1. disable iff (condition)

功能与定义

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

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

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

语法

property <property_name>;
  disable iff (condition) <property_definition>;
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 (<property_expression>) <action_on_success> 
      else <action_on_failure>;

    示例与波形

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阻塞等待属性成功并执行后续操作测试平台中的条件等待与流程控制

 

相关文章:

  • 域名备案个人网站名称中国今天刚刚发生的新闻
  • 外贸网站模板 免费网店代运营骗局流程
  • 专门做nba评论的网站商旅100网页版
  • 怎么在百度上面做网站百度seo优化公司
  • 南京网站制作有限公司济南seo优化公司
  • 福建省人民政府驻京办windows优化大师使用方法
  • Mysql 数据库下载安装
  • 数字统计题解
  • 【C++奇遇记】C++中的进阶知识(继承(一))
  • Visual FoxPro 6.0学习笔记十五
  • 定制一款国密浏览器(1):Chromium 源码获取和构建
  • 常见前端GET请求以及对应的Spring后端接收接口写法
  • Docker快速安装MongoDB并配置主从同步
  • WiFi加密协议
  • RoMo: Robust Motion Segmentation Improves Structure from Motion
  • 【c语言】结构体
  • [自制调试工具]构建高效调试利器:Debugger 类详解
  • at定时任务(超详细)
  • SpringBoot整合JUnit
  • [ctfshow web入门] web1
  • 【学习笔记】深度学习环境部署相关
  • 提高MCU的效率方法
  • Redis常见命令
  • 反向查询详解以Django为例
  • 速解!Cadence SPB24.1 ORCAD 开始页空白难题
  • Chapter06_图像复原