如何使用Unix脚本选择Verilog测试文件?

时间:2011-03-16 10:47:46

标签: scripting verilog

我必须对DPRAM进行验证。

每个测试用例都写在名为test1.v,test2.v等的不同文件中。

我想编写一个脚本(unix),这样当我输入run test1.v时,只会运行该测试用例。

注意: - test1.v仅包含read assert,write assert等的任务。

测试平台是一个单独的文件,包括时钟和组件实例化。

运行test1.v时,它应该将test1.v任务链接到测试平台,然后输出。

我已经在verilog中完成了编码

怎么做?

2 个答案:

答案 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宏不会被扩展。