我必须对DPRAM进行验证。
每个测试用例都写在名为test1.v,test2.v等的不同文件中。
我想编写一个脚本(unix),这样当我输入run test1.v时,只会运行该测试用例。
注意: - test1.v仅包含read assert,write assert等的任务。
测试平台是一个单独的文件,包括时钟和组件实例化。
运行test1.v时,它应该将test1.v任务链接到测试平台,然后输出。
我已经在verilog中完成了编码
怎么做?
答案 0 :(得分:2)
执行此操作的一种方法是让testbench文件包含具有通用名称的测试文件:
`include "test.v"
然后,让您的脚本创建指向您要运行的测试的符号链接。例如,在shell脚本或Makefile中,运行test1.v
:
ln -sf test1.v test.v
run_sim
要运行test2.v
,您的脚本会将test2替换为test1等。
答案 1 :(得分:2)
因此,据我所知,您的不同测试或“测试用例”位于名为test<n>.v
的文件中。我假设每个测试用例都有一个在所有文件中具有相同名称的任务,比如run_testcase
。这意味着您的测试平台(例如testbench.v
)必须类似于:
module testbench();
...
`include "test.v" // <- problem is this line
...
initial begin
// Some setup
run_testcase();
//
$finish;
end
endmodule
所以你的问题是include
行 - 根据测试用例,需要包含不同的文件。我可以想到解决这个问题的两种方法是建议 toolic - 使用符号链接'重命名'测试用例文件。因此,启动SIM卡的示例包装脚本(run_sim1
)可能看起来有点像:
#! /usr/bin/env sh
testcase=$1
ln -sf ${testcase} test.v
my_simulator testbench.v
另一种方法是使用宏,并在模拟的包装脚本中定义它。您的测试平台将被修改为:
...
`include `TESTCASE
...
包装脚本(run_sim2
):
#! /usr/bin/env sh
testcase=$1
my_simulator testbench.v +define+TESTCASE=\"${testcase}\"
引号在这里很重要,因为verilog include
指令需要它们。不幸的是,我们不能将引号保留在测试平台中,因为它看起来像verilog的字符串,并且TESTCASE
宏不会被扩展。