Я пытаюсь объявить беззнаковый массив в пакете, чтобы использовать один и тот же тип массива во всех своих компонентах. Сначала я объявил его в компоненте верхнего уровня, а затем использовал рабочую библиотеку и команду use
для вызова пакета в каждом компоненте. Я получаю предупреждение, которое говорит
ПРЕДУПРЕЖДЕНИЕ: ProjectMgmt: 454 — круговая зависимость файла обнаружена с использованием правила: определить перед использованием.
Я также получаю сообщение об ошибке
Строка 27: Не удается найти
<test2>
в библиотеке<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;
test1
на входной. Кроме того, вам не нужно объявлять библиотекуwork
. - person scary_jeff   schedule 16.09.2015library work;
, возможно, они сбивают с толку. - person scary_jeff   schedule 16.09.2015test1
; попробуйте поместить пакет в его собственный файл (в любом случае я думаю, что это будет более привычно). Если это не сработает, то мне не очень жаль! - person scary_jeff   schedule 16.09.2015