VHDL:将测试用例名称字符串从运行脚本传递到模拟器的最佳方法?

时间:2019-05-21 16:27:15

标签: vhdl

在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代码对其进行编译以告知此信息。我只是在争论什么是最好的方法。

2 个答案:

答案 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);
}