Комбинационная и последовательная логика
Всё, что описано в других статьях — вентили, таблицы истинности, карты Карно — это комбинационная логика: схемы, чей выход зависит только от текущего входа. Память требует кое-чего большего: последовательной логики, где выход также зависит от прошлых входов. Защёлки и триггеры — базовые элементы последовательной логики.
Защёлки: чувствительность к уровню
SR-защёлка — простейший элемент памяти: Set (S=1) устанавливает выход в 1, Reset (R=1) сбрасывает в 0, а S=R=0 удерживает предыдущее значение. Запрещённое состояние S=R=1 даёт неопределённый результат и должно избегаться.
D-защёлка улучшает это: пока сигнал Enable (E) высок, выход Q непрерывно повторяет вход D. Как только E становится низким, Q фиксируется на том значении, которое имел D в этот момент. Это и означает «чувствительность к уровню» — защёлка «слушает» всё время, пока E высокий, а не только в один момент.
Триггеры: срабатывание по фронту
D-триггер считывает свой вход D только в точный момент перехода тактового сигнала — обычно по переднему фронту. Между фронтами выход совершенно не чувствителен к изменениям D. Это поведение «по фронту», и именно оно делает триггеры, а не защёлки, стандартным элементом для регистров, счётчиков и конвейерных процессоров.
Почему срабатывание по фронту важно: в защёлке, чувствительной к уровню, любой импульсный сбой на входе при высоком Enable проходит прямо на выход. В большой синхронной схеме с тысячами защёлок это приводит к гонкам сигналов и непредсказуемому поведению. Триггеры, срабатывающие по фронту и тактируемые единым глобальным сигналом, устраняют эту проблему изначально.
Посмотрите в действии
В Boolflow есть готовые блоки SR-защёлки, D-защёлки и D-триггера. Загрузите пример с триггером, переключите элемент CLOCK и понаблюдайте, как выход D-защёлки непрерывно следует за входом, в то время как выход D-триггера обновляется только по фронту такта.