Задача
Активировать один из восьми выходов по трёхразрядному адресу.
Тип схемы: Комбинационная схема; при отсутствии разрешения все выходы пассивны.
Модуль: decoder38. Среда: Quartus, Vivado, ISE или свободный GHDL для моделирования.
Теорию по языку смотрите в статье VHDL — язык описания аппаратуры,
по самим микросхемам — на странице ПЛИС.
Алгоритм
- Объявить трёхразрядный адрес, вход разрешения и восьмиразрядный выход.
- Описать процесс, перечислив в списке чувствительности адрес и разрешение.
- Внутри процесса оператором
caseзадать выход для каждого кода. - При запрещающем уровне обнулить все выходы агрегатом
(others => '0').
Код на VHDL
Код проверен компилятором GHDL: проходит анализ и элаборацию без ошибок и предупреждений. Скачать: v03.vhd
--=====================================================
-- Проект 03. Дешифратор 3 в 8
-- Процесс с оператором case: последовательное описание
-- внутри параллельного блока.
--=====================================================
library ieee;
use ieee.std_logic_1164.all;
entity decoder38 is
port (
addr : in std_logic_vector(2 downto 0); -- адрес
en : in std_logic; -- разрешение
y : out std_logic_vector(7 downto 0) -- выходы
);
end entity decoder38;
architecture rtl of decoder38 is
begin
-- список чувствительности: процесс запускается при
-- изменении любого перечисленного сигнала
process (addr, en)
begin
if en = '0' then
y <= (others => '0'); -- все выходы погашены
else
case addr is
when "000" => y <= "00000001";
when "001" => y <= "00000010";
when "010" => y <= "00000100";
when "011" => y <= "00001000";
when "100" => y <= "00010000";
when "101" => y <= "00100000";
when "110" => y <= "01000000";
when "111" => y <= "10000000";
when others => y <= (others => '0');
end case;
end if;
end process;
end architecture rtl;
Пояснения
- Список чувствительности определяет, когда процесс пересчитывается. Для комбинационной логики в нём должны быть все читаемые сигналы, иначе синтезатор построит незапланированную защёлку.
- Агрегат
(others => '0')присваивает нули всему вектору независимо от его разрядности — удобно при параметризации. - Процесс выглядит как последовательная программа, но исполняется он мгновенно, а результат — обычная комбинационная схема.
Что дальше
Следующие проекты — в разделе проекты на VHDL. Сравнить подход с языком Verilog можно в статье Verilog, а разобраться в устройстве самих кристаллов — в статье ПЛИС: FPGA и CPLD.