首先引入原子测试的概念:
原子测试是一种专注于测试单一功能的测试,它明确了解您测试的是什么。如果测试失败,那么您还应该清楚需要修复的问题。
例如,比较两个数组是相等,通常我们会首先判断数组大小是否一致,然后比较每个元素是否相等,如果大小一致,且每个元素都相等,那么我们认为这两个数组相等。那么有没有更简洁的写法呢?如果告诉你其实可以直接将两个数组进行比较,你该怎么测试这个语法是否正确呢?
if(array0 == array1) begin
...
end
else begin
...
end
假如你有一个具有相当规模的testbench,仅仅编译就需要十几二十分钟,或者更长的时间(一两个小时都有可能),如果你在这个环境中测试‘array0==array1’,那么等待你的将是漫长的等待,这对时间非常紧张,工作繁忙的验证工程师来说,是不可接受的。我等待十几二十分钟,就是为了测试一个sv语法是否可用。那么有没有更加简单快捷的方法呢?
原子测试DangDangDang粉墨登场了。
这时,你需要写一个尽可能简单的test,并写个小的makefile或者csh脚本运行vcs仿真,来测试该语法。那么有没有更加简单快捷的方法呢?
其实针对systemverilog的语法特性(不仅仅局限于sv语法),synopsys的vcs安装目录下,提供了一系列的测试小例子,每个例子单独存放在一个文件夹。
一般在vcs安装目录的doc目录下:
通常每个测试文件夹有如下文件:
README为自述文件,提供小测试的简单描述以及运行方法。*.sv文件为测试源文件。
测试源文件和Makefile都准备好了,我们只需要在*.sv测试源文件添加需要测试的语句就可以。
synopsys提供了如下例子: