vunit - 是否可以让 VUNIT 运行基于顶级泛型的测试套件?
问题描述
我是 Vunit 的新手 - 但不是测试。我目前有一个设置,其中我有使用大量 OSVVM 的测试平台,其中设置是通过泛型提供给测试平台的,我使用 TCL 或 Pytest 通过完整的测试套件运行测试。
已经开始正确地研究 Vunit,我可以看到它可能会做我所追求的,或者至少允许我将一些测试套装用于一些测试到 VHDL 中,但我找不到的是一个例子,其中的一部分例如,测试用例差异涉及使用不同总线宽度或同步/异步时钟进行测试。
有没有办法通过 Vunit 做到这一点?如果有,有没有我可以看的例子?或者您只是希望在同一个 Vunit 测试平台中将它们全部实例化并按顺序运行它们?
我的基础设施 OSVVM 很重,所以我不想改变任何这些——但我正在寻找一个运行者来回归 GitLab 中的测试用例。TCL 没有削减它(主要是因为 ActiveHDL 有一个错误,它不能在 TCL 中正确捕获运行时异常)。
解决方案
VUnit 有一个配置概念(不要与 VHDL 配置混淆),除其他外,您可以这样做。你可以在这里阅读。
你也可以看看下面的例子。
我不确定 OSVVM 重是否也意味着对不同的测试使用不同的VHDL配置?如果是这样,你应该阅读这个
根据评论更新:
假设我们有一个带有两个泛型的 UUT,一个width
可以是 32/64/128 位,一个是 boolean use_fifo
。这是该 UUT 的虚拟(但可执行)表示
entity uut is
generic (
width : positive;
use_fifo : boolean);
end entity;
architecture a of uut is
begin
do_stuff: process
begin
report "Width = " & to_string(width) & ", use_fifo = " & to_string(use_fifo);
wait;
end process;
end architecture;
假设我们有一个测试平台,并希望使用所有泛型组合来运行它。为此,我们将 UUT 泛型作为泛型暴露给 VUnit 测试平台
library vunit_lib;
context vunit_lib.vunit_context;
entity tb_uut is
generic (
runner_cfg : string;
width : positive;
use_fifo : boolean);
end entity;
architecture tb of tb_uut is
begin
main : process
begin
test_runner_setup(runner, runner_cfg);
-- Do some testing
test_runner_cleanup(runner);
end process;
uut_inst: entity work.uut
generic map (
width => width,
use_fifo => use_fifo);
end architecture;
现在我们可以为代表所有通用组合的测试平台创建 VUnit 配置。这是在运行脚本中完成的。
from pathlib import Path
from itertools import product
from vunit import VUnit
prj = VUnit.from_argv()
root = Path(__file__).parent
lib = prj.add_library("lib")
lib.add_source_files(root / "*.vhd")
tb_uut = lib.test_bench("tb_uut")
for width, use_fifo in product([32, 64, 128], [False, True]):
tb_uut.add_config(
name=f"width={width}.use_fifo={use_fifo}",
generics=dict(width=width, use_fifo=use_fifo),
)
prj.main()
如果我们列出测试,我们将看到所有六种组合:
$ python run.py --list
lib.tb_uut.width=32.use_fifo=False
lib.tb_uut.width=32.use_fifo=True
lib.tb_uut.width=64.use_fifo=False
lib.tb_uut.width=64.use_fifo=True
lib.tb_uut.width=128.use_fifo=False
lib.tb_uut.width=128.use_fifo=True
Listed 6 tests
推荐阅读
- javascript - 需要在 react native app 上实现 onPress 逻辑来处理两个任务
- javascript - 如何与其他组件共享 react-redux 连接组件中的功能?
- java - 如何获取 Java 类的真正模块依赖?
- python-3.x - 将 Excel 文件存储在烧瓶应用程序中,并在部署到 heroku 时使其可读
- node.js - 设置自己的本地主机服务器?
- php - 如何覆盖 WordPress 插件类方法
- c++ - C++ 编写时的输入重定向问题
- javascript - 为什么模态呈现在表格下方?
- ios - 我没有在我的 iOS 设备上收到 Firebase 通知
- java - MongoDB:将新对象推送到数组并返回相同的对象