AFON // радиотехник affonya@mail.ru
← Проекты на VHDL

Проект 02. Мультиплексор 4 в 1

Один из четырёх входов подключается к выходу по коду адреса. Проект вводит векторные сигналы и оператор выбора — основу всех коммутаторов данных.

Задача

Передать на выход один из четырёх входов в зависимости от кода адреса.

Тип схемы: Комбинационная схема выбора; синтезируется в набор вентилей или таблицу LUT.
Модуль: mux4. Среда: Quartus, Vivado, ISE или свободный GHDL для моделирования. Теорию по языку смотрите в статье VHDL — язык описания аппаратуры, по самим микросхемам — на странице ПЛИС.

Алгоритм

  1. Объявить входной вектор данных и двухразрядный вектор адреса.
  2. Оператором with … select сопоставить каждому значению адреса свой вход.
  3. Обязательно добавить ветвь when others.
  4. Выход получает значение выбранного разряда.

Код на 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.