Задача
Активировать один из восьми выходов по трёхразрядному адресу.
Тип схемы: Комбинационная схема; при отсутствии разрешения все выходы пассивны.
Модуль: a03. Среда: MAX+PLUS II или ранние версии Quartus (Altera/Intel).
Теорию по языкам описания аппаратуры смотрите в статьях VHDL и Verilog,
по самим микросхемам — на странице ПЛИС.
Алгоритм
- Объявить трёхразрядный адрес, вход разрешения и восьмиразрядный выход.
- Проверить разрешение оператором IF.
- Внутри разрешённой ветви оператором CASE задать код для каждого значения адреса.
- В запрещающей ветви обнулить весь выходной вектор одной записью.
Код на AHDL
Скачать: a03.tdf
% Проект 03. Дешифратор 3 в 8 %
% Оператор CASE: по трёхразрядному адресу активируется %
% один из восьми выходов; вход en гасит все выходы. %
SUBDESIGN a03
(
addr[2..0] : INPUT;
en : INPUT;
y[7..0] : OUTPUT;
)
BEGIN
IF (en == VCC) THEN
CASE addr[] IS
WHEN 0 => y[] = B"00000001";
WHEN 1 => y[] = B"00000010";
WHEN 2 => y[] = B"00000100";
WHEN 3 => y[] = B"00001000";
WHEN 4 => y[] = B"00010000";
WHEN 5 => y[] = B"00100000";
WHEN 6 => y[] = B"01000000";
WHEN 7 => y[] = B"10000000";
END CASE;
ELSE
y[] = B"00000000";
END IF;
END;
Пояснения
- Векторная константа вида
B"00000001"задаёт сразу восемь бит — компактнее, чем присваивать каждому разряду отдельно. - Вход разрешения обработан снаружи CASE: это типичный приём, разделяющий «включён ли блок» и «что он делает», если включён.
- AHDL не требует ветви по умолчанию в CASE так строго, как некоторые другие языки, но её отсутствие может привести к синтезу защёлки — привычка добавлять все случаи того стоит.
Что дальше
Следующие проекты — в разделе проекты на AHDL. Сравнить подход с современными языками можно в статьях VHDL и Verilog, а разобраться в устройстве кристаллов — в статье ПЛИС: FPGA и CPLD.