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

在现实生活中是否使用过高级VHDL配置?,vhdl,Vhdl,VHDL配置可用于将组件绑定到具有不同名称的实体,甚至使用完全不同的端口 你们中有人在商业项目中见过这种情况吗?加入一个看似无关的实体的目的是什么?为什么他们不只是更改实例化代码 我可以虚构假想的情况,但我对现实生活中的用例感兴趣。不,我从未在野外见过 我想原因是,大多数人(包括我自己)甚至不知道这种情况在配置中是可能的。从未见过端口绑定发生变化,但我见过它用于绑定具有相同端口映射的不同版本的组件。我见过一些例子: 在构建大型系统级仿真时绑定空版本。当测试设计的其他部分时,部分设计被不做任何事

VHDL配置可用于将组件绑定到具有不同名称的实体,甚至使用完全不同的端口

你们中有人在商业项目中见过这种情况吗?加入一个看似无关的实体的目的是什么?为什么他们不只是更改实例化代码


我可以虚构假想的情况,但我对现实生活中的用例感兴趣。

不,我从未在野外见过


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

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

  • 在构建大型系统级仿真时绑定空版本。当测试设计的其他部分时,部分设计被不做任何事情来降低内存占用的版本所取代
  • 类似,但在测试设计的总线基础设施时,绑定在简单的单元中,这些单元以“疯狂”的方式响应
  • 具有不同设计折衷的特定块的不同版本。e、 一个大而快的版本,一个小而慢的版本。然后可以根据系统组装或特定应用程序的需要进行交换

但是,这些都不需要您所说的功能。我能想到的唯一一件事是,如果您有多个RAM库供应商,并且需要定期在他们之间进行交换,那么使用不同的组件可能会很有用。即使这样,您也不太可能进行一对一端口映射。总有一个掉电引脚需要反转或其他什么的。

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

假设我有一个非常大的实体+体系结构FooMachine,我希望编写一系列涉及FooMachine内部信号的白盒单元测试。理想情况下,FooMachine将被拆分为几个组件,我将在这些组件上编写黑盒测试,但我继承了一些真正庞大的体系结构,从经济角度来看,我无法证明重构所需的时间是合理的,因为只需要做一些小的更改。我要做的是在
FooMachine

component Dummy is
end component Dummy;
还有一个例子

dummy_g : Dummy;
然后,在
FooMachine
中的signal
x
单元测试中,我将编写一个实体+架构

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
中编写断言


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

谢谢你提出这个问题,我也很感兴趣。根据我的经验,我从未见过自己使用过这种方法,并且在针对多个FPGA板/系统的大型代码库中工作过。我也是这样。VHDL似乎有一些语言元素,使它看起来非常古老,并且与今天的FPGA工程师相比,它的用户基础不同且更小。敏感度列表、配置、强制标签、缺少C预处理器的等价物、坚持列表中的最后一个元素不能有尾随的coma,或者在任何开发人员假设“1”为true并相应地命名信号时区分std_逻辑和bool。基本概念很好,但需要有人从头开始重新设计语言。@maxy:有些我同意,有些不同意。敏感度列表是编译器/模拟人生没那么有能力时留下的遗物,所以我会告诉你。尾随逗号,是的,好吧,但我不会因为它而失眠。配置功能强大且有用(尽管上面的示例似乎没有必要)。我不想要预处理器。你见过人们用它做的可怕的事情吗?泛型可以让你达到90%的目标,但要加强结构。std_logic vs bool是一种具有严格类型化语言的人工制品,而严格类型化对于RTL IMHO来说是一件好事。标签…你为什么不给东西贴标签?:-)verilog有类似的结构,也称为配置。我也从未见过使用它们。我会添加(1)随着大型项目的进展,将行为模型替换为RTL模型,(2)使用配置选择不同版本的模拟。这在大型项目中都很常见。我还想补充一点,您只需要与Verilogger交谈,就可以了解当一个名称作为不同的组件存在于不同的库中时,只允许一个名称是多么痛苦。在我看来,配置是VHDL的基础。答案很好,没有多少人理解它的含义和用途
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;