Altifigence Academy

47 / 63 · Теория

Реальная кнопка: синхронизация, подавление дребезга и одно событие

Разделите синхронизацию асинхронного входа и подавление дребезга, спроектируйте фильтр по последовательным выборкам.

Одно нажатие может дать много переходов

Контакты механической кнопки могут несколько раз замкнуться и разомкнуться до установления. Сигнал одновременно асинхронен системному такту. Синхронизация переносит его в тактовый домен, подавление дребезга распознаёт короткие повторные переходы как одно устойчивое состояние. Два триггераТриггер записывает вход на заданном фронте такта и удерживает его до следующего фронта. Вход должен удовлетворять ограничениям setup и hold. Подробнее сами по себе не удаляют дребезг.

Разделите задачи трёх этапов
  1. Асинхронная кнопка: Дребезг контактов и асинхронность такта присутствуют одновременно
  2. Синхронизация: Примите однобитный уровень в тактовый домен
  3. Подавление дребезга: Подтвердите изменение лишь после последовательных стабильных отсчётов
  4. Обнаружение фронта: Создайте событие на один цикл для подтверждённого перехода 0→1

Этот путь предполагает достаточно долго удерживаемый однобитный уровень кнопки. Короткие импульсы, согласованная многобитная передача и обработка самого асинхронного такта требуют отдельных решений.

Правило N последовательных выборок

Пусть q — принятое состояние, x — синхронизированный вход, count — число последовательных выборок, отличающихся от q. При x=q обнулите count. При x≠q увеличивайте его; на N-й последовательной выборке обновите q=x и верните count в 0.

Рассмотрим N=3, начальное q=0. Каждый столбец — момент наблюдения синхронизированного входа, а не физическое напряжение контакта.

Выборка012345678
x010111101
count после010120010
q после000001111
rise event000001000
N=3: подтвердите после последовательных отсчётов противоположного значения
Показать данные диаграммы
Данные диаграммы: каждый символ — один интервал; точка сохраняет предыдущее состояние; p — один тактовый цикл.
СигналДиаграммаЗначения шины
отсчёт2345234520 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8
x0101...01
q после0....1...
событие 0→10....10..

Явно задайте задержку и ширину счётчика

При интервале выборки TsT_s в зависимости от фазы изменения входа принятие занимает примерно от (N−1)Ts(N-1)T_s до NTsNT_s, плюс отдельная задержка предшествующей синхронизации. Для консервативного требования «устойчиво 10 ms» учитывайте и расстояние между первой и последней выборками при выборе N. Короткие переходы между выборками не наблюдаются, поэтому совпадение последовательных выборок не доказывает неизменность физического напряжения весь интервал. Нужно совместно задавать свойства переключателя и условия выборки.

Если count хранит только 0–N−1, ширина max⁡(1,⌈log⁡2N⌉)\max(1,\lceil\log_2 N\rceil). Обработайте и N=1: первая противоположная выборка должна приниматься сразу, поэтому порядок сравнения с N−1 существенен.

Одно нажатие — одно событие

Для нового принятого q_next получаем rise=q‾ qnextrise=\overline q\,q_{next}. Таблица задаёт событие на той же выборке, что и принятие состояния. Реализация, сравнивающая q с задержанным на цикл q в отдельном регистреРегистр хранит многобитное состояние. Синхронные регистры в этом курсе записывают определённый вход на фронте тактового сигнала. Подробнее, может добавить задержку в зависимости от точки наблюдения. Поэтому определите и момент потребления события.

Попробуйте сами

При N=3, начальном q=0 поданы 1,1,0,1,1,1. На какой выборке изменится состояние? Какова минимальная ширина счётчика 0–7 при N=8?

Прочитать объяснение

Ноль третьей выборки сбрасывает число последовательных несовпадений, поэтому 1 принимается на шестой. Для count=0–7 нужны 3 бита. Иная реализация, сохраняющая также 8, потребует 4 бит: сначала проверяйте диапазон хранения.

Выбор действует в этом браузере. Его можно изменить внизу страницы.