Как использовать «std_logic» после объявления тела пакета/пакета?

Я пытаюсь улучшить работу с VHDL, поэтому я хотел попробовать реализовать функции "пакет... есть" и "тело пакета... есть". Когда я это делаю, кажется, что «std_logic» не может видеть содержимое библиотеки IEEEE на этапе анализа GHDL.

До сих пор я пробовал команды с кодом и без него -> Тот же результат. Без «пакетных» строк это работает как шарм... но я не смогу расширить его, как планировалось.

library IEEE;
use IEEE.std_logic_1164.all;

package run is
    -- some package definitions
end run;

package body run is
    -- the body
end run;

entity andfunc is
    Port( A : in std_logic;
        B : in std_logic;
        C : out std_logic
);
end andfunc;

architecture Behavioral of andfunc is
begin
    C <= A and B ;
end Behavioral;

Конкретное сообщение об ошибке: "[...] ошибка: нет объявления для "std_logic"

С нетерпением жду ваших ответов.

Пакеты Java
Пакеты Java
Пакет java - это группа классов, интерфейсов и подпакетов схожего типа. Думайте об этом как о папке в каталоге файлов. Мы используем пакеты, чтобы...
2
0
202
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваш импорт std_logic_1164 принадлежит пакету и также виден в его теле. Во всем файле не видно. Повторите эти строки перед объектом, и он будет виден для объекта и его архитектуры.

Большое тебе спасибо. Лицом к столу. Работает сейчас +1

E.Murphy 25.07.2019 15:05
Ответ принят как подходящий

Область действия (видимость) library и use — это не весь файл. После package вы должны вспомнить их, если они вам все еще нужны. Для работы ваш код должен быть:

library IEEE;
use IEEE.std_logic_1164.all;

package run is
    -- some package definitions
end run;

package body run is
    -- the body
end run;


library IEEE;
use IEEE.std_logic_1164.all;

entity andfunc is
    Port( A : in std_logic;
        B : in std_logic;
        C : out std_logic
);
end andfunc;

architecture Behavioral of andfunc is
begin
    C <= A and B ;
end Behavioral;

Другие вопросы по теме