1

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

猫.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 时,不会出现被覆盖组件的警告/错误。我们是否总是优先考虑在架构中声明的组件,而不是在 package.json 中声明的同名组件。有人能告诉我 LRM 是怎么说的吗?请解释一下。

4

1 回答 1

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”。

于 2013-03-12T14:31:08.147 回答