【问题标题】:Using Custom Packages Causes Circular Dependency使用自定义包会导致循环依赖
【发布时间】:2015-09-16 16:00:42
【问题描述】:

我正在尝试在包中声明一个无符号数组,以便我可以在所有组件中使用相同类型的数组。我先在顶层组件中声明,然后使用work库和use命令调用各个组件中的包。我收到一条警告,上面写着

警告:ProjectMgmt:454 - 使用规则检测到文件循环依赖:define-before-use。

我还收到一条错误提示

第 27 行:在库 <work> 中找不到 <test2>。请确保库已编译,并且 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;

【问题讨论】:

  • 你用的是什么工具?您的代码在 ModelSim 中编译良好,将 test1 输出端口更改为输入。此外,您不必声明 work 库。
  • 它在 ModelSim 上也适用于我,但无法在 ISE Project Navigator 中合成。
  • 尝试项目 > 清理项目文件。另外,请尝试删除您的 library work; 行,也许这些会让它感到困惑。
  • 我都试过了,但得到了相同的结果。
  • 也许它不喜欢你的包和test1在同一个文件中;尝试将包放在它自己的文件中(我认为这无论如何都会更传统)。如果这不起作用,那么我不确定对不起!

标签: vhdl circular-dependency xilinx xilinx-ise


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 将包移动到自己的文件中可以解决问题,但是您对问题的分析是错误的。循环依赖存在于包含 test1 和 pkg 的文件与包含 test2 的文件之间。这是因为第一个文件需要 test2,因为它是在那里实例化的,而第二个文件需要 pkg。
    • 哦,是的,我想这确实更有意义。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2015-06-08
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多