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;
您是否有人在商业项目项目中看到过这种情况?放弃一个看似无关的实体的目的是什么?为什么他们不只是改变实例化代码?
我可以弥补假设情况,但我对现实生活中的用例很感兴趣。
答案 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
中写下我的断言。
同样,这不是我更喜欢编写单元测试的方法,但有时候这是解决一个不幸问题的最佳解决方案。