SystemVerilog HVL:断言(System Verilog Assertion, SVA)介绍
验证环境中,对于数据的检查可以通过scoreboard实现,那么如何实现对协议的检查呢?
driver和monitor是基于某种时序进行激励驱动和采样的,所以就需要检验DUT的时序是否符合要求,这个是SVA断言的主要用途。
1. 断言在testbench扮演的角色
对于测试平台testbench来说,它需要对DUT的功能进行验证,testbench的主要功能有激励产生、自检和功能覆盖三点。
激励产生好说,就是driver
自检机制
指testbench能够自动地检验结果是否符合期望,包括协议检验和数据检验。
数据检验在scoreboard实现了,协议检验则是指对通信协议中的数据格式、时序等内容进行检验。
而SVA能够完成协议检验的内容。
功能覆盖
包括协议覆盖和测试计划覆盖。
协议覆盖用于衡量testbench是否穷尽了DUT的所有功能,个人感觉很类似于对testbench进行验证。
测试计划覆盖用于衡量testbench是否穷尽了testbench的所有可能情况,例如数据包的种类、全体存储空间的读写等等
而SVA能够完成协议覆盖的内容。
2. 立即断言
断言的含义很简单,就是用于判断某种属性是否满足期望。
立即断言是立刻触发的,与时钟无关,类似于if判断语句,写法如下:
always@(grant) begin //每当grant的值发生变化 a1:assert(grant > 10) //格式为 断言例化名称:assert(表达式),末尾没有分号 cnt_true++; else $display("Assertion wrong"); //为假则报告错误信息 end
如果断言为假程序终止运行,并报告消息,其他报告可选函数有$info,$warning,$error,$fatal等等
3. 并发断言
并发断言表示与时序有关的断言
详见
下一篇:
【数字设计】哲库科技_笔试题目分享