29 / 63 · Теория
Число состояний, ширина счётчика и неиспользуемые коды
Рассчитайте разрядность по диапазону счёта и определите восстановление из недопустимых состояний.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Счётчик тоже является конечным автоматом
Счётчику, повторяющему 0–9, нужны 10 состояний. Минимальная ширина хранения — бита. Но 4-битный регистрРегистр хранит многобитное состояние. Синхронные регистры в этом курсе записывают определённый вход на фронте тактового сигнала. Подробнее содержит 16 битовых шаблонов, поэтому одной правильной ширины недостаточно для modulo-10.
M — число состояний, а не максимум. Счёт от 0 до M-1 отличается от счёта от 0 до M. Если поддерживается параметр M=1, ограничьте ширину минимум одним битом и всегда удерживайте 0.
В 4-битном хранилище 16 кодов, но modulo-10 использует как нормальные только 10. После выбора ширины нужно добавить сравнение и политику восстановления.
- 10 состояний: Нормальные значения count: 0–9
- Хранение в 4 битах: 16 кодов; 10–15 — избыточные
- Следующее состояние: 0, если en=1 и count≥9
Состояния вне диапазона — тоже часть проекта
Что делать, если 4-битный modulo-10 по какой-либо причине оказался в 12? Можно доказать условия инициализации и сбросаСброс возвращает состояние к заданному начальному значению. Нужно определить, синхронен он или асинхронен и имеет ли приоритет над другими управляющими сигналами. Подробнее, исключающие это, либо возвращать в 0 при значениях от 9. Само восстановление не гарантирует устойчивости ко всем аппаратным отказам.
always_ff @(posedge clk) begin
if (rst) count <= 4'd0;
else if (en) begin
if (count >= 4'd9) count <= 4'd0;
else count <= count + 4'd1;
end
endЭтот пример восстанавливает неправильные значения 10–15 на фронте с en=1. При enable=0 они сохраняются. Если спецификация требует немедленного восстановления, нужно изменить приоритет условий.
Проверки ширины и функции независимы
Для 0–999 достаточно 10 бит, но свободное увеличение дойдёт до 1023. Нужны сравнение и выбор, возвращающие в 0 на заданном максимуме. В счётчиках адресов памяти, повторений и длины пакетов это различие приводит непосредственно к неверным обращениям или длинам.
Попробуйте сами
Найдите минимальную ширину счётчика 0–99 и число неиспользуемых кодов. Что изменится, если просто прибавлять 1 с этой шириной?
Прочитать объяснение
100 состояний требуют 7 бит; неиспользуемых кодов . Простое увеличение не возвращается после 99, а идёт до 127, создавая modulo-128 вместо modulo-100.