我希望并行运行多个参数的相同模拟。 我该怎么做呢?当多个实例尝试编译到同一文件夹并更改相同的modelsim.ini文件时,如何防止竞争条件?
我正在使用QuestaSim。
我想做这样的事情:
while ($x <= $num_processes)
vsim -do run.do &
end
由于几个不同的原因,启动vsim因某些情况而失败。 (Lib无法找到,没有这样的模块)
答案 0 :(得分:2)
VUnit是VHDL和SystemVerilog的免费开源测试框架,可以处理这个问题。
下面是VHDL中的最小VUnit测试平台,添加了value
泛型和调用info
(VUnit日志框架的一部分)来打印该泛型。
library vunit_lib;
context vunit_lib.vunit_context;
entity tb_example is
generic (value : integer;
runner_cfg : string);
end entity;
architecture tb of tb_example is
begin
test_runner : process
begin
test_runner_setup(runner, runner_cfg);
info("Generic = " & to_string(value));
test_runner_cleanup(runner);
end process;
end architecture;
通过在VUnit运行脚本中定义配置,可以使用不同的通用值运行此测试平台。下面是一个最小运行脚本,添加了三行来创建这些配置(请参阅注释)。
from os.path import join, dirname
from vunit import VUnit
root = dirname(__file__)
ui = VUnit.from_argv()
lib = ui.add_library("lib")
lib.add_source_files(join(root, "*.vhd"))
# Add 5 configurations with the names 0, 1, 2, 3, 4 and the generic set to the corresponding value
tb_example = lib.entity("tb_example")
for i in range(5):
tb_example.add_config(name=str(i), generics=dict(value=i))
ui.main()
如果使用-p5
选项执行此脚本,VUnit将在五个不同的线程中运行模拟。执行顺序不确定,如输出中所示。
免责声明:我是其中一位作者。
答案 1 :(得分:-2)
您可以通过环境变量将参数设置为vsim调用。 阅读它们:
global env;
puts $env(RESULTFOLDER)
您可以使用泛型将参数传播到verilog / vhdl文件:
-Gparam=123
要在并行运行多个modelsim实例时防止竞争条件,您需要处理两件事:
为每个实例分配一个库文件夹的单独实例。
vlib work
file rename work $RESULTFOLDER/work
vmap work $RESULTFOLDER/work
确保在启动流程之前复制modelsim.ini文件,并为每个实例设置seperatley。
cp modelsim.ini $folder/modelsim.ini
vsim -modelsimini $folder/modelsim.ini -do run.do