快捷搜索: 王者荣耀 脱发

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. 并发断言

并发断言表示与时序有关的断言

详见

经验分享 程序员 微信小程序 职场和发展