应届毕业生,验证小白一枚,开贴记录自己在验证路上的“挫折”。
初识assertion(断言):
1:property:验证设计意图,内部可包含sequence
2:sequence:将一个序列做出来,包含很多场景,比如reset等
3:thread:事件相关的一个序列,可持续一拍或者多拍,每个thrad相互独立。SVA在每个时钟间隙进行asssert/assume/covered
4:##n
延迟n个周期
5:[m:n] /##[m:n]
[m:n] : m-n的任意一个周期
##[m:n] : ##m - ##n的任意一个周期
6:|->
首先对前置表达式做检查,不成立则不激发后置表达式;成立,在同一个时钟周期检查后置表达式是否满足要求。用于property
7:|=>
首先对前置表达式做检查,不成立则不激发后置表达式;成立,在下一个时钟周期检查后置表达式是否满足要求。用于property
|=>表示要延迟一个周期,相当于 |->##1
附链接:systemverilog学习(9)assertion - huanm - 博客园 (cnblogs.com)
博主写的第一个assertion是X propagate。简单描述一下就是验证一下RTL给的信号,它们的值不可以是X态。
在写代码for循环的时候,以传统的c++的思想,在SystemVerilog中assertion里将for循环写为:
for(int i = 0; i < 6; i++) begin
end
编译后报错为:SystemVerilog keyword 'int' is not ecpected to be used in this context
在百度试过了多种方法,包括但不仅限于将i定义在module外面仍然编译不通过之后,不得不去请教我的leader...(感觉自己太菜了,因为这仅仅只是一个定义的问题)
结果是因为在assertion中不可以使用int定义,而应该用genvar,正确的代码为:
genvar i;
for(i = 0; i < 6; i++) begin
end