高级VHDL配置是否曾在现实生活中使用过?

时间:2012-03-28 14:03:03

标签: vhdl

VHDL配置可用于将组件绑定到具有不同名称的实体,甚至可以使用完全不同的端口。 [see this article for more info]

  configuration c2 of testbench is
    for str
        for dut_inst : dut
            use entity work.unrelated(rtl)
                port map(
                    port1 => a,
                    port2 => b,
                    port3 => c,
                    port4 => "unused"
                );
        end for;
    end for;
  end configuration c2;

您是否有人在商业项目项目中看到过这种情况?放弃一个看似无关的实体的目的是什么?为什么他们不只是改变实例化代码?

我可以弥补假设情况,但我对现实生活中的用例很感兴趣。

3 个答案:

答案 0 :(得分:4)

从未见过端口绑定发生变化,但我看到它曾经用相同的端口映射绑定到不同版本的组件中。我见过的一些例子:

  • 在构建大型系统级模拟时以空版本绑定。部分设计被替换为在测试设计的其他部分时不做任何事情以保持内存占用率下降的版本。
  • 类似,但在测试设计的总线基础设施时,以简单的单位绑定,以“狂野”的方式回应。
  • 具有不同设计妥协的特定块的不同版本。例如一个大而快的版本,一个小而慢。然后可以根据系统组合或特定应用程序所需的内容进行换出。

这些都不需要您正在谈论的功能。我唯一可以想到的是,使用不同的组件可能会有用,如果你有多个RAM库供应商之类的东西,并且需要定期交换它们。即便如此,您也不太可能进行一对一的端口映射。总是有一个需要反相的掉电引脚。

答案 1 :(得分:3)

不,我从来没有在野外见过。

我想原因是大多数人(包括我自己)甚至都不知道配置可能会有这样的事情。

答案 2 :(得分:1)

我几次使用过这种配置。我试图避免它,但它有时对白盒测试很有用。

假设我有一个非常大的实体+架构FooMachine,我希望编写一系列whitebox单元测试,引用FooMachine中的信号。理想情况下,FooMachine将分成几个组件,我会在这些组件上编写黑盒测试,但我继承了一些真正庞大的架构,从经济的角度来看,我无法证明只需要进行微小更改时重构所需的时间。我要做的是在FooMachine

中定义一个组件
component Dummy is
end component Dummy;

和一个实例

dummy_g : Dummy;

然后,在x中的信号FooMachine的单元测试中,我将编写一个实体+架构

entity TestDummy is
    port (
        x : in std_logic
    );
end entity;

architecture Arch of TestDummy is
    ...
end Arch;

和配置

configuration conf of ... is
...
    for all : FooMachine
        ...
        for all : Dummy
            use entity work.TestDummy(Arch)
                port map (x => x);
        end for;
    end for;
...
end configuration;

然后我可以在TestDummy中写下我的断言。

同样,这不是我更喜欢编写单元测试的方法,但有时候这是解决一个不幸问题的最佳解决方案。