Задача
Считать тактовые импульсы и выдавать сигнал переполнения.
Тип схемы: Синхронный счётчик с асинхронным сбросом и разрешением.
Модуль: a05. Среда: MAX+PLUS II или ранние версии Quartus (Altera/Intel).
Теорию по языкам описания аппаратуры смотрите в статьях VHDL и Verilog,
по самим микросхемам — на странице ПЛИС.
Алгоритм
- Объявить восьмиразрядный вектор DFF.
- Подключить такт и сброс ко всем разрядам сразу.
- При разрешении присвоить входу данных значение выхода плюс единица.
- Сформировать флаг переполнения сравнением текущего значения с 255.
Код на AHDL
Скачать: a05.tdf
% Проект 05. Двоичный счётчик с разрешением %
% Восьмиразрядный счётчик на массиве DFF: наращивает %
% значение по такту, пока вход en в единице. %
SUBDESIGN a05
(
clk : INPUT;
rst : INPUT;
en : INPUT;
count[7..0] : OUTPUT;
carry : OUTPUT;
)
VARIABLE
cnt[7..0] : DFF;
BEGIN
cnt[].clk = clk;
cnt[].clrn = !rst;
IF (en == VCC) THEN
cnt[].d = cnt[].q + 1;
ELSE
cnt[].d = cnt[].q;
END IF;
count[] = cnt[].q;
carry = (cnt[].q == 255) & en;
END;
Пояснения
- Арифметика в AHDL пишется прямо над выходами примитивов:
cnt[].q + 1— компилятор сам разворачивает это в цепочку сумматора с переносом. - Без явного присваивания в ветви «иначе» значение регистра сохраняется само — DFF по умолчанию держит своё состояние, если новое значение не задано.
- Переполнение здесь не аппаратный перенос, а отдельно вычисленный флаг: полезно, когда нужно узнать именно момент достижения максимума, а не просто обнуление счётчика.
Что дальше
Следующие проекты — в разделе проекты на AHDL. Сравнить подход с современными языками можно в статьях VHDL и Verilog, а разобраться в устройстве кристаллов — в статье ПЛИС: FPGA и CPLD.