2

我试图在包中声明一个无符号数组,以便我可以在所有组件中使用相同类型的数组。我先在顶层组件中声明它,然后使用工作库和use命令调用每个组件中的包。我收到一条警告说

警告:ProjectMgmt:454 - 使用规则检测到文件循环依赖:使用前定义。

我还收到一条错误消息

<test2>第 27 行:在库中找不到<work>。请确保库已编译,并且库和使用子句存在于 VHDL 文件中。

为什么存在循环依赖,我是否正确创建和使用包?

顶级组件

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

package pkg is
  type array_unsigned is array (99 downto 0) of UNSIGNED(7 downto 0);
end package;

package body pkg is
end package body;

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
library work;
use work.pkg.ALL;

entity test1 is
end test1;

architecture Behavioral of test1 is
    signal input : array_unsigned;
begin
sub: entity work.test2(Behavioral)
    port map(input=>input);
end Behavioral;

低级组件

library IEEE;
library work;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use work.pkg.ALL;

entity test2 is
    Port (input : in array_unsigned);
end test2;

architecture Behavioral of test2 is

begin


end Behavioral;
4

2 回答 2

1

您的包pkg似乎定义在与 entity 相同的文件中test1,它本身就是use这个包。虽然我不认为这是完全错误的,但看起来 ISE 已经发现它需要编译你的第一个文件(编译包),然后才能编译相同的文件来编译实体test1,并产生了错误。实际上,如果它只是继续编译文件,一切都会好起来的。

通过将包移动到它自己的文件中,这种明显的自依赖被删除了。

于 2015-09-16T16:37:13.787 回答
1

问题不在于第一个文件包含pkg包和test1实体。这很好,而不是循环依赖。不过,包括我自己在内的许多人可能认为这是一种不好的做法。真正的问题是从一个单独的文件中test1实例化test2实体,该文件也使用pkg. 因此,循环依赖 wheretest2依赖pkg但包含pkgtest1依赖的文件,test2因为它是在那里实例化的。

Modelsim 支持仅编译文件中的特定设计单元,因此它可能能够处理这种情况。

于 2015-09-16T17:13:26.200 回答