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

Проект 05. Двоичный счётчик с разрешением

Счётчик 0…255 со сбросом, разрешением счёта и сигналом переполнения. Проект показывает арифметику прямо над выходом примитива DFF.

Задача

Считать тактовые импульсы и выдавать сигнал переполнения.

Тип схемы: Синхронный счётчик с асинхронным сбросом и разрешением.
Модуль: a05. Среда: MAX+PLUS II или ранние версии Quartus (Altera/Intel). Теорию по языкам описания аппаратуры смотрите в статьях VHDL и Verilog, по самим микросхемам — на странице ПЛИС.

Алгоритм

  1. Объявить восьмиразрядный вектор DFF.
  2. Подключить такт и сброс ко всем разрядам сразу.
  3. При разрешении присвоить входу данных значение выхода плюс единица.
  4. Сформировать флаг переполнения сравнением текущего значения с 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.