2

すべてのコンポーネントで同じタイプの配列を使用できるように、パッケージで符号なし配列を宣言しようとしています。最初に最上位のコンポーネントで宣言し、次に work ライブラリとuseコマンドを使用して各コンポーネントのパッケージを呼び出しました。という警告が表示されます

警告:ProjectMgmt:454 - ルールを使用して検出されたファイルの循環依存関係: define-before-use。

というエラーも表示されます

<test2>行 27:ライブラリに見つかりません<work>。ライブラリがコンパイルされていること、ライブラリと use 節が 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パッケージとtest1エンティティの両方が含まれていることではありません。これは問題なく、循環依存ではありません。私を含む多くの人は、それを悪い習慣だと考えるかもしれません。本当の問題は、エンティティも使用する別のファイルからtest1インスタンス化することです。したがって、循環依存は依存しますが、そこにインスタンス化されているため、および依存を含むファイルです。test2pkgtest2pkgpkgtest1test2

Modelsim は、ファイル内の特定のデザイン ユニットのみのコンパイルをサポートしているため、状況を処理できる場合があります。

于 2015-09-16T17:13:26.200 に答える
1

あなたのパッケージは、それ自体がこのパッケージであるpkgentity と同じファイルで定義されているようです。これが厳密に間違っているとは思いませんが、同じファイルをコンパイルしてエンティティをコンパイルする前に、(パッケージをコンパイルするために) 最初のファイルをコンパイルする必要があることに ISE が気付いたようで、エラーが発生しました。実際には、単純に先に進んでファイルをコンパイルすれば、すべて問題ありません。test1usetest1

パッケージを独自のファイルに移動することにより、この明らかな自己依存性が取り除かれます。

于 2015-09-16T16:37:13.787 に答える