提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
- 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

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

被折叠的 条评论
为什么被折叠?



