我有一个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对此有何评论? 请解释一下。
答案 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”无效。