VHDL: лучший способ передать строку имени тестового набора в симулятор из скрипта запуска? - PullRequest
1 голос
/ 21 мая 2019

В verilog я могу передать имя тестового примера в симуляцию, используя стандартный флаг симулятора verilog:

+define+TESTCASE=\"mytestcase.txt\"

Затем в коде verilog я могу сделать что-то вроде этого:

//Verilog
fid = $fopen(`TESTCASE);

Однако в VHDL я не знаю, как лучше всего добиться подобного эффекта.По сути, я хочу, чтобы мой сценарий запуска оболочки вызывал симулятор 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 ]

1 голос
/ 24 мая 2019

Если вы хотите создать собственное решение, вам нужно воспользоваться опцией командной строки.Симуляторы поддерживают ограниченный набор типов, но все, что я видел, поддерживают строки.

Вы также можете использовать VUnit (http://vunit.github.io), который обеспечивает требуемую функциональность. Параметр командной строки GHDL былфактически добавлена ​​поддержка VUnit (https://sourceforge.net/p/ghdl-updates/tickets/37/).

Отказ от ответственности: я один из авторов VUnit.

0 голосов
/ 21 мая 2019
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);
}
...