硬件设计师和验证工程师都习惯使用断言。断言是从形式上规定设计意图行为的一种方式,在设计过程中必须保持为真。断言可以通过缩短验证时间而有效地提高整体设计产能。现在,工程师无需像传统验证流程那样,需要回到之前的仿真跟踪和逻辑模块中去确定错误的真正原因,传统的设计验证是在设计实现后进行的。
断言采用形式语义进行编写,可以通过使用软件工具验证其正确性。形式语义使得工程师能以简单和精确的方式描述复杂的设计属性,并检测难以发现和边界条件下的缺陷,从而减少了设计师对使用仿真工具检查功能正确与否的依赖性。
验证工程师在规范级创建断言,而设计师在架构级创建断言。如果设计用的是SystemVerilog,那么这些断言可以用SystemVerilog Assertions编写。当设计采用独立的硬件描述语言(如VHDL或Verilog)时,断言也可以用属性规范语言(PSL)编写。
可以使用仿真环境和形式环境来验证断言的正确性。当覆盖了设计规范的所有要点时,设计人员就知道他们已经编写了足够的断言。
建议
. 从测试计划开始。计划是由验证环境的重要部分组成的一份文件。它能监视验证过程的功能覆盖,并提供对测试平台和激励信号质量的反馈。然后尝试使用这些节省时间的技术:
1. 与编写RTL代码一起编写断言,因为这样做有助于在任何其它形式的验证之前识别缺陷。
2. 编写简单的断言。越简单越容易理解和调试。
3. 将断言与要验证的设计代码尽量放在一起,以便明确使用断言验证的设计意图。
4. 每个断言都要边开发边测试,这样可以缩短调试时间。
5. 给断言命名。这样可以减少与调试断言条件故障相关的工作量。
6. 将相似的断言归类到断言库中以增加重复使用能力。当设计含有大量复用组件时这一点特别有用。
. 提高抽象等级以简化验证过程。
. 测量功能覆盖率,它能让你评估验证工作的质量。功能覆盖率工具将断言规范作为其输入,输出有关检查、情景和数据方面的信息。
. 归档已经认识的问题。已经识别出缺陷的归档技术可以提供验证过程效率方面的有关信息供日后项目使用。

图:合理使用断言可削减验证时间,加速设计周期。
不建议
. 使用“活跃”属性,因为对活跃属性的仿真从来不会失败,从而导致真正问题被错漏的假阳性情况。活跃属性在经过一段不定的时间后会变为真,或随着时间的推移而不受控制。也就是说,如果证实了信号“req”,那么今后某个时间信号“ack”会被证实。
. 使用空的真断言,这也会导致假阳性局面。例如,某个断言是这样写的:如果A发生了,B就会发生。但如果设计中A从来不会触发,那B就永远不会被测试到。
. 综合断言。断言不应该出现在综合过的网表中。设计师可以将编译指示(translate_off/translate_on)放在断言旁边,这样综合工具就能忽略掉断言。设计师也可以使用“ifdef”宏来激活或去激活断言。如果设计师使用了断言库,那么他或她应该将这个宏插入断言库以便减少工作量。
. 用断言做重复检查。避免为已经用其它验证技术测试过的特性再增加断言内容。
. 使用断言验证所有设计特性,因为这样做会提高增加断言带来的总体成本。可以避免使用断言的一些设计特性有:
1. 自动振荡时钟。
2. 毛刺检测。
3. 重复RTL代码的断言代码。无需为变化值为1的加法或减法计数器准备断言。
4. 已知正确的元件,如D触发器或2:1复用器。
作者:Vinima Aggarwal
应用工程师
Verific Design Automation公司
京公网安备 11011202001138号
