Последовательностная логика: триггеры, регистры и счетчики
Связь с предыдущими темами курса
Ранее мы изучили комбинационную логику: логические элементы, булевы выражения, минимизацию и типовые узлы вроде сумматоров и мультиплексоров. У комбинационных схем выход зависит только от текущих входов.
Но большинство полезных цифровых устройств должны помнить прошлое: хранить бит, слово, состояние протокола, номер такта, адрес, флаг события. Это приводит нас к последовательностной логике.
Последовательностная схема отличается тем, что её выход зависит от:
текущих входов
внутреннего состояния (памяти)Память реализуется специальными элементами: защёлками и триггерами (flip-flops). На их основе строятся регистры и счётчики.
Полезные справочные страницы:
Триггер
Защёлка (цифровая схемотехника))
Тактовый сигналОсновная идея памяти: обратная связь
Комбинационная логика по определению не хранит состояние. Чтобы появилась память, в схеме используют обратную связь: выход некоторого узла (или его часть) подают обратно на вход, и система получает возможность удерживать значение.
На практике это делают так, чтобы память была:
предсказуемой
управляемой (когда можно менять состояние)
совместимой с синхронизацией по тактовому сигналуДва базовых семейства элементов памяти:
защёлки (latches): чувствительны к уровню управляющего сигнала
триггеры (flip-flops): фиксируют значение по фронту тактового сигналаЗащёлки
SR-защёлка
SR-защёлка хранит один бит состояния и управляется двумя входами:
(set) устанавливает
(reset) устанавливает Важный практический момент: у SR-защёлки есть нежелательное (запрещённое) сочетание входов, зависящее от реализации. Поэтому в современных синхронных системах чаще используют D-форму.
> Защёлка удобна как учебный пример памяти, но для надёжного проектирования обычно выбирают D-защёлку или D-триггер.
D-защёлка
D-защёлка решает проблему двух входов и даёт один вход данных и вход разрешения (иногда называют enable) .
Поведение:
при защёлка прозрачна: следует за
при защёлка держит предыдущее значение Защёлки часто встречаются внутри более сложных элементов (например, в составе триггеров) и в некоторых интерфейсных схемах, но в синхронном проектировании на уровне регистров обычно предпочитают триггеры.
!Временная диаграмма работы D-защёлки: прозрачный режим и режим хранения
Триггеры (flip-flops)
Почему триггеры важны
Главная проблема защёлок в больших синхронных системах в том, что они реагируют на уровень управляющего сигнала и могут пропускать изменения данных в течение некоторого интервала времени. Это усложняет анализ времени и повышает риск гонок.
Триггер решает это: он фиксирует входные данные только в дискретный момент, обычно по фронту тактового сигнала.
D-триггер
Самый распространённый в цифровых системах элемент памяти. Он имеет:
вход данных
тактовый вход
выход состояния (иногда дополнительно )Правило работы D-триггера (по положительному фронту):
при наступлении фронта значение становится равным
между фронтами не меняетсяЧасто это записывают как переход состояния:
Здесь:
означает значение на выходе Q после ближайшего активного фронта
означает значение на входе данных в момент захватаАсинхронный сброс и установка
Многие триггеры имеют дополнительные управляющие входы:
асинхронный сброс (clear, reset): принудительно делает независимо от
асинхронная установка (preset, set): принудительно делает независимо от Они полезны для начальной инициализации системы при включении питания.
Важно: асинхронные сигналы требуют аккуратного ввода в синхронную часть, иначе возможны сбои синхронизации.
Другие типы триггеров: JK и T
На практике вы будете чаще встречать D-триггеры, но полезно понимать эквиваленты:
JK-триггер исторически удобен тем, что не имеет запрещённого состояния как SR (при корректной реализации)
T-триггер (toggle) переключает состояние при на каждом фронте и удобен для счётчиковВо многих библиотеках элементов JK и T реализуются через D-триггеры и комбинационную логику.
Почему синхронизация по такту упрощает проектирование
В синхронной системе предполагается:
есть общий сигнал
большинство элементов памяти изменяют состояние только по фронту
комбинационная логика между триггерами успевает стабилизироваться до следующего фронтаТак получается удобная модель: данные проходят через комбинационную логику между «точками хранения».
!Базовая структура синхронной последовательностной схемы: триггеры + комбинационная логика
Метастабильность и базовые временные понятия
Если сигнал меняется слишком близко к моменту захвата триггером, триггер может на короткое время попасть в неопределённое состояние. Это называют метастабильностью.
МетастабильностьЧтобы уменьшить риск, используют временные требования:
setup time (время установки): данные должны быть стабильны до фронта
hold time (время удержания): данные должны оставаться стабильны после фронтаСправка:
Setup time
Hold timeПрактическое следствие: любые внешние, асинхронные относительно сигналы (кнопки, входы UART, сигналы от других доменов такта) обычно сначала пропускают через синхронизатор на двух триггерах.
Регистры
Регистр это группа триггеров, которые одновременно хранят многобитное значение.
Регистр (цифровая схемотехника))Параллельный регистр хранения
Самый простой тип:
на входы подаётся шина данных
по фронту регистр захватывает все биты одновременно
на выходе появляется Типовые добавки в реальных регистрах:
вход разрешения записи (enable): записывать новое значение только когда разрешено
синхронный или асинхронный сбросСдвиговый регистр
Сдвиговый регистр перемещает биты на каждом такте влево или вправо. Используется для:
сериализации и десериализации данных
простых задержек данных на фиксированное число тактов
некоторых алгоритмов обработки потоковРазновидности по вводу и выводу:
SISO: последовательный ввод и последовательный вывод
SIPO: последовательный ввод и параллельный вывод
PISO: параллельный ввод и последовательный вывод
PIPO: параллельный ввод и параллельный вывод (по сути просто регистр)Счётчики
Счётчик это последовательностная схема, которая проходит по заданной последовательности состояний, обычно интерпретируемой как число.
Счётчик (цифровая схемотехника))Асинхронный (ripple) счётчик
Идея: каждый следующий разряд получает такт не от общего , а от выхода предыдущего разряда.
Плюсы:
очень простая реализацияМинусы:
накопление задержки по цепочке разрядов
кратковременные промежуточные значения на выходах при переключенииТакие счётчики ограниченно используют там, где требования по времени нестрогие.
Синхронный счётчик
В синхронном счётчике:
все триггеры получают один и тот же
следующая комбинация вычисляется комбинационной логикой и захватывается одновременноЭто лучше соответствует современному проектированию, потому что проще анализировать задержки и избегать проблем с промежуточными состояниями.
Пример: 2-битный синхронный счётчик вверх
Пусть текущее состояние это (два триггера, старший и младший бит). Счётчик должен считать:
и дальше по кругуЕсли реализовать на D-триггерах, нужно задать, какими будут их входы и .
Логика такая:
младший бит должен переключаться каждый такт
старший бит переключается, когда переходит из 1 в 0, то есть фактически при перед тактомУдобная запись функций следующего состояния:
Объяснение обозначений:
и это входы данных двух D-триггеров
и это текущие значения выходов триггеров
означает инверсию: следующий младший бит будет противоположным текущему
означает XOR: результат равен 1, если входы различныПочему это работает:
делает переключение каждый фронт
переключает только тогда, когда (потому что XOR с 1 инвертирует)Этот пример важен методически: мы описали желаемую последовательность состояний и получили комбинационную логику для входов D-триггеров.
Как проектируют последовательностные схемы в общем виде
Типовой поток проектирования выглядит так:
Определить, какие входы есть у устройства и какие выходы нужны.
Определить набор состояний, который нужно хранить, и смысл каждого состояния.
Составить таблицу переходов: текущее состояние + входы следующее состояние + выходы.
Выбрать кодирование состояний (какие биты регистра что означают).
Для каждого бита регистра вывести логическую функцию входа триггера (например, ) через текущие и внешние входы.
Минимизировать полученные функции теми же методами, что и для комбинационной логики (законы булевой алгебры, карты Карно, автоматизация).
Реализовать схему и проверить временные ограничения (хотя бы на концептуальном уровне: данные должны успевать до фронта).Ключевая мысль курса: последовательностная схема это комбинационная логика + элементы памяти, а значит все навыки минимизации и синтеза из предыдущих тем напрямую применимы.
Типичные ошибки при изучении триггеров, регистров и счётчиков
Путать защёлку и триггер: защёлка реагирует на уровень, триггер на фронт.
Забывать про инициализацию: без сброса стартовое состояние может быть неопределённым.
Игнорировать асинхронные входы: кнопки и внешние сигналы нельзя напрямую подавать на логику, синхронизируемую .
Выбирать ripple-счётчик там, где важны временные характеристики и чистые переключения выходов.Итоги
Последовательностная логика хранит состояние и использует обратную связь.
Защёлки чувствительны к уровню управляющего сигнала, триггеры фиксируют значение по фронту такта.
D-триггер это основной строительный элемент синхронных систем.
Регистр это набор триггеров для хранения многобитных данных; сдвиговый регистр умеет перемещать биты.
Счётчики бывают асинхронные (ripple) и синхронные; синхронные лучше предсказуемы по времени.
Проектирование последовательностных схем опирается на те же методы булевой алгебры и минимизации, что и комбинационная логика.