[SystemVerilog] SVA断言学习札记 | 上手写断言所需的最少知识

本文介绍了SystemVerilog中的断言机制,包括立即断言和并发断言的使用。立即断言在过程块中执行,不依赖时钟边沿,而并发断言在时钟边沿触发,持续检查信号状态。文中还列举了常用System函数和运算符,如$rose、$fell、$stable等,并提供了示例。同时,阐述了断言在设计验证中的应用场景,如RTL模块内用于设计检查,独立模块中用于验证。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

  • SVA是SystemVerilog中提供的一种强大的语言特性,可以用于写constraints, checkers和cover points。与普通的SV语法相比,在对design进行检查时可以起到事半功倍的效果。
  • DE通常在rtl module内编写assertion,一方面可以检查设计的正确性,一方面还可以检查激励的合法性。DV通常在单独的interface/module中写assertion,然后使用bind将sva module和design module进行绑定。
  • 笔者参考了一些资料,整理了一些有关SVA的简介、语法构成此篇学习札记。并且笔者认为,只需要了解以下这些知识,就可以上手写assertion了。

一、立即断言和并发断言

1. 立即断言(intermediate assertion)

类似if-else statement,需要放在procedural block中,但不依赖clock edge或reset。评估expression的结果后会立即执行pass/fail statement(action block),因此是立即断言。
【常见语法形式】

assertion_label: assert(expression) pass_statement;
                                   else fail_statement;
  • assertion_label: 对assertion块进行命名,可以用%m打印;optional,可以不写label。如下面的代码,如果expression为false,则会报assertion error并打印“assertion_label failed.”
assertion_label: assert(expression) pass_statement;
                                   else $error("%m failed.");
  • expression: 通常是一个布尔表达式(Boolean expression)。如果结果是X, Z或0则false,否则为true
  • pass_statement/fail_statement: 统称action block,指断言成功或失败时进行的操作;optional,可以不写,但fail_statem
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值