VHDL структурный

Привет может кто-нибудь помочь мне с вопросом VHDL. Я пробую практическое структурное программирование и хотел начать с простого полусумматора. Вот мой код

LIBRARY IEEE;
USE IEEE.std_logic_1164.all;

--XOR ОПИСАНИЕ

entity xor_2 is
    port (a, b : in std_logic;
        f : out std_logic );
end xor_2;

Architecture func of xor_2 is
begin
    f <= a xor b;
end func;

--И ОПИСАНИЕ

entity and_2 is
    port (a, b : in std_logic;
            f : out std_logic);
end and_2;

architecture func of and_2 is
begin
    f1 <= a and b;
end func;

--ПОЛОВИНА СУММАГЕРА ОПИСАНИЕ

entity struct_1 is
    port ( a, b : in std_logic;
            s, c : out std_logic);
end struct_1;

architecture struct_1 of struct_1 is

component xor_2 is
    port( a, b : in std_logic;
            f : out std_logic);
end component;

component and_2 is
    port( a, b : in std_logic;
            f : out std_logic);
end component;

begin
    g1 : xor_2 port map (a, b, s);
    g2 : and_2 port map (a, b, c);

end struct_1;

Я использую программное обеспечение для проектирования Quartus II и постоянно получаю следующее предупреждение при тестировании:

Error (10482): VHDL error at Struct_1.vhd(15): object "std_logic" is used but
not declared

Я просматривал различные сайты и газеты, чтобы понять, что я делаю, но каждое место, которое я посетил, дает несколько разные детали, и я еще не нашел ни одного, который действительно работает для сравнения. Я согласен заставить его работать с потоком данных, но не со структурой. Пожалуйста, парни и дамы, помогите мужчине здесь


person hoboBob    schedule 29.10.2015    source источник


Ответы (1)


Проблема в том, что тип std_logic не виден. Его нужно сделать видимым с помощью предложения library/use:

library ieee;
use ieee.std_logic_1164.all;

Конечно, я вижу, что у вас уже есть такая оговорка. Масштабы его не так велики, как вы думаете. В VHDL предложение библиотеки/использования применяется только к следующему объекту, архитектуре, пакету или телу пакета. Архитектура автоматически наследует предложения библиотеки/использования от своей сущности, но не наоборот. Тело пакета автоматически наследует предложения библиотеки/использования из своего пакета, но не наоборот.

Я думаю, вы поместили все в тот же файл Struct_1.vhd? В этом случае только объект/архитектура xor_2 видит предложение библиотеки/использования для ieee.std_logic_1164. Вам нужно добавить его над каждым объектом. Также хорошей практикой кодирования является наличие только одной пары объект/архитектура в файле.

person kraigher    schedule 29.10.2015
comment
Привет Крайгер, спасибо за превосходный ответ. Да, вы правы, я предполагал, что объявление библиотеки IEEE похоже на объявление заголовочного файла C. - person hoboBob; 29.10.2015