Задача
Передать на выход один из четырёх входов в зависимости от кода адреса.
Тип схемы: Комбинационная схема выбора; синтезируется в набор вентилей или таблицу LUT.
Модуль: mux4. Среда: Quartus, Vivado, ISE или свободный GHDL для моделирования.
Теорию по языку смотрите в статье VHDL — язык описания аппаратуры,
по самим микросхемам — на странице ПЛИС.
Алгоритм
- Объявить входной вектор данных и двухразрядный вектор адреса.
- Оператором
with … selectсопоставить каждому значению адреса свой вход. - Обязательно добавить ветвь
when others. - Выход получает значение выбранного разряда.
Код на VHDL
Код проверен компилятором GHDL: проходит анализ и элаборацию без ошибок и предупреждений. Скачать: v02.vhd
--=====================================================
-- Проект 02. Мультиплексор 4 в 1
-- Три способа описания выбора: with-select, when-else
-- и процесс с case. Здесь показан with-select.
--=====================================================
library ieee;
use ieee.std_logic_1164.all;
entity mux4 is
port (
d : in std_logic_vector(3 downto 0); -- четыре входа
sel : in std_logic_vector(1 downto 0); -- адрес входа
y : out std_logic
);
end entity mux4;
architecture rtl of mux4 is
begin
-- выбор по значению адреса; вариант others обязателен,
-- так как std_logic имеет девять состояний, а не два
with sel select
y <= d(0) when "00",
d(1) when "01",
d(2) when "10",
d(3) when "11",
'0' when others;
end architecture rtl;
Пояснения
- Ветвь
othersнужна не для красоты: у std_logic девять состояний, и без неё компилятор сообщит о неполном перечислении вариантов. - То же самое можно описать оператором
when-elseили процессом сcase— результат синтеза будет одинаковым, различается лишь стиль. - Индексация вектора
d(3 downto 0)задаёт порядок разрядов: старший слева. Обратный порядокtoтоже допустим, но смешивать стили в проекте не стоит.
Что дальше
Следующие проекты — в разделе проекты на VHDL. Сравнить подход с языком Verilog можно в статье Verilog, а разобраться в устройстве самих кристаллов — в статье ПЛИС: FPGA и CPLD.