在verilog中,我可以使用标准的verilog仿真器标志将测试用例的名称传递给仿真:
+define+TESTCASE=\"mytestcase.txt\"
然后,在verilog代码中,我可以执行以下操作:
//Verilog
fid = $fopen(`TESTCASE);
但是,在VHDL中,我不知道达到类似效果的最佳方法。基本上,我希望运行一个shell脚本来调用VHDL仿真器并编译我的VHDL源,但是为了以某种方式传达我想作为VHDL模拟器外部的VHDL字符串运行的测试用例的名称。例如:
$ perl RunVhdlSimulation.pl --testcase hello1.txt
然后,perl脚本调用VHDL仿真器,并以某种方式告诉它读取文件调用“ hello1.txt”。在VHDL代码中,我会有一些看起来像这样的代码来拾取测试用例文件的名称。
--VHDL
process
--where testcase is set by script to be "hello1.txt"
constant testfile :string := testcase;
begin
...
end process;
现在,我想知道如何实现此目标...我想我可以创建某种类型的文件,并使用vhdl代码对其进行编译以告知此信息。我只是在争论什么是最好的方法。
答案 0 :(得分:1)
如果要创建自己的解决方案,则可以使用命令行选项。模拟器支持一组有限的类型,但是我所看到的全部都支持字符串。
您还可以使用提供所需功能的VUnit(http://vunit.github.io)。实际上已添加了GHDL命令行选项以支持VUnit(https://sourceforge.net/p/ghdl-updates/tickets/37/)。
免责声明:我是VUnit的作者之一。
答案 1 :(得分:0)
use Getopt::Long qw(GetOptions);
my %params = ();
GetOptions(
'help' => \$opt_help,
'go' => \$opt_go,
'testcase=s' => \$params{testcase}
);
create_testcase_pkg(%params);
# RUN SIMULATION HERE
exit 1;
sub create_testcase_pkg(%) {
my $params = %_;
my $pkg_name = "sim_testcase_pkg";
my $pkg_file = "./${pkg_name}.vhd";
print "creating file: $pkg_file\n";
$testcase = $params{testcase};
print "TESTCASE: $testcase\n";
open(F, ">$pkg_file") || die("cannot create: ${pkg_file}");
print F "package ${pkg_name} is\n";
print F "\n";
print F " constant testcase :string := \"$testcase\";\n";
print F "end package;\n";
close(F);
}