我正在尝试在包中声明一个无符号数组,这样我就可以在所有组件中使用相同类型的数组。我首先在顶级组件中声明它,然后使用工作库和use
命令来调用每个组件中的包。我收到一条警告说
警告:ProjectMgmt:454 - 使用rule:define-before-use检测到文件循环依赖关系。
我还收到一条错误
第27行:在
<test2>
库中找不到<work>
。请确保已编译库,并且VHDL文件中存在库和use子句。
为什么存在循环依赖,我是否正确创建和使用包?
顶级组件
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;
答案 0 :(得分:1)
您的包pkg
似乎与实体test1
在同一文件中定义,实体use
就是此包。虽然我没有看到这严重错误,但看起来ISE已经发现它需要编译你的第一个文件(编译包),然后它才能编译同一个文件来编译实体test1
,产生了错误。实际上,如果它只是继续编译文件,一切都会好的。
通过将包移动到自己的文件中,可以消除这种明显的自我依赖性。
答案 1 :(得分:1)
问题不在于第一个文件包含pkg
包和test1
实体。这很好,而不是循环依赖。包括我在内的许多人可能认为这是一种不好的做法。真正的问题是test1
从单独的文件中实例化test2
实体,该文件也使用pkg
。因此,test2
取决于pkg
的循环依赖性,但包含pkg
和test1
的文件取决于test2
,因为它已在那里实例化。
Modelsim支持仅编译文件中的特定设计单元,以便它能够处理这种情况。