如果存在两个同名的组件,一个在包中,另一个在体系结构中,哪一个优先?

时间:2013-03-12 12:02:45

标签: vhdl hdl modelsim

我有一个VHDL测试文件a.vhd。

  
    

cat a.vhd

  
package pak is
component b is              -- 1st definition of component b.
end component
end pak;

use work.pak.all;          -- 1st definition visible through this package use clause
entity a is
  port (in1 : in std_logic );
end a;

architecture a of a is

component b                   -- 2nd definition of component b.
  port ( in11 : in std_logic);
end component;

begin
  inst : b port map ( in11=> in1);   -- there are two definitions of component b at this instance.
end a;

entity b is
port (in11 : in std_logic);
end b;

architecture b of b is
begin
end b;

因此,当在其上运行modelsim时,没有被覆盖组件的警告/错误。我们是否始终优先考虑组件,该组件在体系结构中通过包中声明的同名组件进行声明。 有人可以告诉我LRM对此有何评论? 请解释一下。

1 个答案:

答案 0 :(得分:4)

在此特定示例中,您在“a”中实例化为“inst”的组件肯定是体系结构中声明的组件“b”,因为work.pak.b具有不同的端口声明。

如果你在A中实例化了一个没有端口的“b”,你应该看到work.pack.b。

然而,

理解这些与“实体b”之间没有固有的联系。只有在详细阐述设计时(例如在模拟开始时),工具才会寻找实际匹配组件声明的“b”。在这种情况下,它可以找到在“a”中声明的“b”,但它不会找到与“work.pak.b”匹配的实体。

在此阶段,您可以使用配置(单独的配置或嵌入在A中的配置语句)将特定实体“work.b”绑定到“b”。由于端口声明不匹配,这对“work.pak.b”无效。