首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有可能让VUNIT运行一个基于顶级泛型的测试套件?

是否有可能让VUNIT运行一个基于顶级泛型的测试套件?
EN

Stack Overflow用户
提问于 2020-11-11 09:10:43
回答 1查看 290关注 0票数 1

我是Vunit的新手-但不是测试。目前,我有一个使用大量OSVVM的testbench的设置,其中安装是通过泛型提供给testbench的,我使用TCL或Pytest在完整的测试套件中运行测试。

开始正确地查看Vunit之后,我可以看到它可能完成了我想要做的事情,或者至少允许我将一些用于某些测试的测试套装移到VHDL中,但我找不到的是一个示例,其中部分测试用例涉及使用不同总线宽度或同步/异步时钟进行测试。

有办法通过Vunit做这件事吗?如果有,有什么例子我可以看看吗?还是只希望在同一个Vunit测试平台中实例化它们并按顺序运行它们?

我的基础设施很重,所以我不想改变这些,但是我正在寻找一个运行程序来回归GitLab中的测试用例。TCL没有对其进行裁剪(主要是因为ActiveHDL在TCL中没有正确捕获运行时异常,这主要是因为它有一个错误)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-28 08:04:57

VUnit有一个配置概念(不要与VHDL配置混淆),它允许您这样做,除其他外。你可以读到它,这里

您还可以查看下面的示例

我不确定OSVVM是否也意味着在不同的测试中使用不同的VHDL配置?如果是这样的话,您应该阅读

基于注释的更新

假设我们有一个具有两个泛型的UUT,一个可以是32/64/128位的width和一个布尔use_fifo。下面是UUT的虚拟(但可执行)表示

代码语言:javascript
运行
复制
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;

假设我们有一个testbench,并且希望使用泛型的所有组合来运行它。为此,我们将UUT泛型作为泛型公开给VUnit测试平台。

代码语言:javascript
运行
复制
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;

现在,我们可以为testbench创建代表所有泛型组合的VUnit配置。这是在运行脚本中完成的。

代码语言:javascript
运行
复制
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()

如果我们列出测试,我们将看到所有六个组合:

代码语言:javascript
运行
复制
$ 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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64783467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档