2012-03-28 45 views
9

VHDL配置可用于将组件绑定到具有不同名称的实体,甚至可以使用完全不同的端口。 [see this article for more info]先进的VHDL配置曾经在现实生活中使用过吗?

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

感谢您提出这个问题 - 我也很感兴趣。根据我的经验,我从来没有见过这个人使用过自己,并曾在针对多个FPGA板/系统的大型代码库中工作。 – Josh 2012-03-28 15:58:59

+1

同样适用于我。 VHDL似乎有一些语言元素,使其感觉非常古老,并为比现在的FPGA工程师更小的用户群指定。灵敏度列表,配置,强制性标签,缺乏C预处理器的等价物,坚持列表中的最后一个元素不能有尾随昏迷,或者在开发人员将开发人员假定'1'= true和name时区分std_logic和bool相应的信号。基本概念很好,但有人需要从头开始重新设计语言。 – maxy 2012-03-28 16:47:43

+0

@maxy:其中一些我会同意,有些则不会。灵敏度列表是编译器/模拟器无法胜任的遗留问题,所以我会给你。尾随逗号,好吧,但我不会失眠。配置功能强大且有用(尽管上面的示例似乎没有必要)。我不想要预处理器。你有没有看到人们用它做的可怕事情?泛型让你90%,但强制结构。 std_logic vs bool是具有严格类型语言的人工制品,对于RTL恕我直言,僵化打字是一件好事。标签...你为什么不标注某些东西? :-) – 2012-03-29 09:28:34

回答

3

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

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

4

从来没有见过端口绑定的变化,但我已经看到它用于绑定在不同版本的组件与相同的端口映射。我见过的一些例子:

  • 在构建大型系统级仿真时绑定空的版本。设计的一部分被版本替换,在测试设计的其他部分时,这些版本不会做任何事情来减少内存占用。
  • 类似的,但是当测试一个设计的总线基础设施时,以简单的单位进行绑定,以“野蛮”和“不快”的方式进行响应。
  • 具有不同设计折衷的特定块的不同版本。例如一个大而快的版本,一个小而缓慢。然后可以根据系统组合或特定应用需要什么进行交换。

这些都不需要你谈论的功能。我能想到的只有使用不同的组件可能会有用,因为如果你有像多个RAM库供应商那样的东西,并且需要定期交换它们。即使那样,你也不可能做一对一的端口映射。总是有一个掉电引脚,需要反相或其他东西。

+0

随着大型项目的进展,我会添加(1)交换RTL模型的行为模型,以及(2)使用配置选择不同版本的模拟。这在大型项目中很常见。我还想补充一点,你只需要与Verilogger交谈,以了解当名称作为不同库中的不同组件存在时,只允许使用一个名称是多么痛苦。配置是IMO对VHDL的基础。 – EML 2013-04-23 09:07:49

1

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

假设我有一个非常大的实体+体系结构FooMachine,并且我希望编写一系列关于FooMachine中的信号的白盒单元测试。理想情况下,FooMachine将被拆分成几个组件,我会对这些组件进行黑盒测试,但是我继承了一些真正庞大的体系结构,我无法从经济角度考虑需要重构的时间,因为只需要进行微小的更改。我将做什么是限定在FooMachine

component Dummy is 
end component Dummy; 

组件和实例

dummy_g : Dummy; 

然后,在信号xFooMachine一个单元测试,我会写的实体+架构

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

architecture Arch of TestDummy is 
    ... 
end Arch; 

and a configuration

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中写我的断言。

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

+0

很好的答案,没有多少人明白这一点的含义和用处 – CJC 2016-02-02 08:21:26

相关问题