30 / 63 · Теория
Следующее состояние счётчика и приоритет сброса
Объедините увеличение, хранение, сброс и переход через границу в одну спецификацию и рассчитайте каждый фронт.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Сначала задайте функцию следующего состояния
Добавим синхронный reset и enable к свободно увеличивающемуся -битному счётчику:
СбросСброс возвращает состояние к заданному начальному значению. Нужно определить, синхронен он или асинхронен и имеет ли приоритет над другими управляющими сигналами. имеет высший приоритет, при enable=0 значение хранится. В визуализации ниже можно переключать enable и сравнивать увеличение с удержанием значения.
При начальном q=11 выбор reset=1 сначала изменяет только следующее состояние на 00. Нажмите следующий такт и проверьте момент изменения сохранённого значения. После снятия reset пройдите 00→01→10→11→00; при enable=0 проверьте, что номер фронта растёт, а q сохраняется.
Синхронный сброс приоритетнее enable. При enable=0 сохранённое значение удерживается. q=11; q_next = (q + 1) mod 4
Составьте прогноз по фронтам
Если начальное состояние 2-битного счётчика 3, на первом фронте reset=1, далее reset=0, состояния после фронтов будут 0, 1, 2, 3, 0. Даже если reset поднят между тактами, синхронный регистрРегистр хранит многобитное состояние. Синхронные регистры в этом курсе записывают определённый вход на фронте тактового сигнала. Подробнее не становится нулём до положительного фронтаПоложительный фронт — момент перехода такта из 0 в 1. Его следует отличать от уровня, означающего весь интервал CLK=1. Подробнее.
| Фронт | reset перед фронтом | Прежнее C | Новое C |
|---|---|---|---|
| 1 | 1 | 3 | 0 |
| 2 | 0 | 0 | 1 |
| 3 | 0 | 1 | 2 |
| 4 | 0 | 2 | 3 |
| 5 | 0 | 3 | 0 |
Каждый столбец — запись наблюдения одного положительного фронтаПоложительный фронт — момент перехода такта из 0 в 1. Его следует отличать от уровня, означающего весь интервал CLK=1. Подробнее. Входы показаны непосредственно перед фронтом, состояния со словом «после» в имени — сразу после обновления. Выравнивание столбцов обозначает порядок выборок, а не физическую задержку распространенияЗадержка распространения — время от изменения входа до установления правильного выхода. Логическая эквивалентность выражений и их временные характеристики — разные вопросы. Подробнее.
Начальное состояние — 3; на первом фронте reset приоритетнее увеличения. Последний фронт возвращает 3 в 0.
Показать данные диаграммы
| Сигнал | Диаграмма | Значения шины |
|---|---|---|
| фронт | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| count до | 23452 | 11 → 00 → 01 → 10 → 11 |
| count после | 23452 | 00 → 01 → 10 → 11 → 00 |
Не смешивайте разные виды reset
if(rst) внутри always_ff @(posedge clk) — синхронный reset. Он не эквивалентен асинхронному reset с добавленным фронтом сброса в список событий. Снятие асинхронного reset имеет отдельные условия recovery/removal; заменять им синхронный только ради более быстрого нуля нельзя.
Если счётчик выдаёт периодический импульс, определите и состояние его появления. Выходная формула и момент наблюдения различаются для «1 всё время максимального значения» и «1 один цикл после фронта возврата в 0».
Попробуйте сами
3-битный счётчик равен 7. На первом фронте rst=0, en=0, на следующем rst=0, en=1. Каковы состояния после них?
Прочитать объяснение
Первый фронт сохраняет 7, следующий переходит через границу 3-битного диапазона в 0. Для сохранения 8 нужна большая ширина либо отдельная политика насыщения или ошибки.