Последовательная логика (триггеры)
Комбинационная логика забывает — выключил питание и всё пропало. А что если нужно запомнить? 🧠
Для этого нужны триггеры — элементы с памятью.
🎓 В курсе nand2cpuСтроим память с нуля: Акт III — Память (SR-защёлка → D-триггер → регистр → RAM)
Комбинационная vs Последовательная логика
КОМБИНАЦИОННАЯ: ПОСЛЕДОВАТЕЛЬНАЯ:
Входы ──► [Логика] ──► Выход Входы ──► [Логика] ──► Выход
↑ │
Выход = f(входы) └── ПАМЯТЬ ←┘
Нет памяти! Выход = f(входы, состояние)
Забывает сразу! Помнит!
Зачем нужна память
| Задача | Почему нужна память |
|---|---|
| Кнопка включения | Нажал → включилось, отпустил → осталось включённым |
| Авария | Сработала → заблокировано до сброса |
| Счётчик | Помнит сколько уже насчитал |
| Режим работы | Помнит в каком режиме сейчас |
SR-защёлка — самая простая память
SR = Set/Reset (установить/сбросить)
┌─────┐
S ──────┤ NOR ├──┬──► Q
┌────┤ │ │
│ └─────┘ │
│ │
│ ┌─────┐ │
└────┤ NOR ├──┘
R ──────┤ ├──────► Q̄
└─────┘
| S | R | Q (выход) | Что происходит |
|---|---|---|---|
| 0 | 0 | Q | Хранит предыдущее значение |
| 1 | 0 | 1 | Set — записывает 1 |
| 0 | 1 | 0 | Reset — записывает 0 |
| 1 | 1 | ? | ❌ Запрещено! |
Главная идея: когда S=0 и R=0, защёлка помнит что было раньше!
Подробнее: Урок 19: SR-защёлка
D-защёлка — убираем запрещённое состояние
D = Data (данные)
┌───┐
D ─────┤ ├──────► Q
│ D │
EN ────┤ ├──────► Q̄
└───┘
| EN | D | Q |
|---|---|---|
| 0 | x | Q (хранит) |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Когда EN=1 — защёлка «прозрачная» (Q = D)
Когда EN=0 — защёлка «заморожена» (Q не меняется)
Подробнее: Урок 20: D-защёлка
D-триггер — запоминает по фронту
Триггер (flip-flop) запоминает значение только в момент фронта тактового сигнала:
┌───┐
D ─────┤ ├──────► Q
│ D │
CLK ───┤> ├──────► Q̄
└───┘
↑ треугольник = по фронту
CLK ___│‾‾‾│___│‾‾‾│___│‾‾‾│___
↑ ↑ ↑
D ──────┐ ┌───┴───────┴────
└───┘
Q ──────────┐ ┌────────
└───────┘
Запомнил Запомнил
D=1 D=0
Почему это важно:
- Защёлка меняется пока EN=1 (может «дрожать»)
- Триггер меняется только в момент фронта CLK (стабильно!)
Подробнее: Урок 21: D-триггер
Сравнение: защёлка vs триггер
| Свойство | Защёлка (latch) | Триггер (flip-flop) |
|---|---|---|
| Когда меняется | Пока EN=1 | Только по фронту CLK |
| Стабильность | Может «дрожать» | Стабильно |
| Применение | Простые схемы | Синхронные системы |
| В nand2cpu | Урок 19-20 | Урок 21 |
Регистр — несколько триггеров вместе
8 D-триггеров = 8-битный регистр (хранит 1 байт):
┌─────────────────────┐
D[7:0] ─┤ ├─► Q[7:0]
│ 8× D-триггер │
CLK ────┤> │
└─────────────────────┘
74HC374 — 8-битный регистр на микросхеме
Подробнее: Урок 22: Регистр
Такт (Clock) — сердце цифровой схемы
CLK ___│‾‾‾│___│‾‾‾│___│‾‾‾│___│‾‾‾│___
↑ ↑ ↑ ↑
фронт фронт фронт фронт
Всё происходит по фронтам!
| Термин | Значение |
|---|---|
| Rising edge ↑ | Переход 0→1 (передний фронт) |
| Falling edge ↓ | Переход 1→0 (задний фронт) |
| Период T | Время одного цикла |
| Частота f | Сколько циклов в секунду (f = 1/T) |
Автомат состояний (FSM)
FSM = Finite State Machine (конечный автомат)
Пример: робот с тремя режимами
┌─────────┐
┌───►│ СТОП │◄───┐
│ │ (S0) │ │
│ └────┬────┘ │
│ │ кнопка │ авария
│ ▼ │
│ ┌─────────┐ │
│ │ ВПЕРЁД │────┘
│ │ (S1) │
│ └────┬────┘
│ │ препятствие
│ ▼
│ ┌─────────┐
└────│ НАЗАД │
│ (S2) │
└─────────┘
Как это работает:
- Текущее состояние хранится в регистре
- Комбинационная логика решает куда переходить
- По фронту CLK — переход в новое состояние
Типовые ошибки
| Ошибка | Проблема | Решение |
|---|---|---|
| Дребезг кнопки | Много «нажатий» за раз | Антидребезг 20 мс |
| Асинхронный вход | Метастабильность | Синхронизатор (2 триггера) |
| Гонки сигналов | Неправильные состояния | Синхронная логика |
| Забыл сброс | Случайное начальное состояние | Добавь RST |
Синхронизатор — защита от метастабильности
Когда внешний сигнал (кнопка) приходит в «плохой» момент:
Может быть
CLK ___│‾‾‾│___ метастабильность!
↑
Кнопка ────┼─── меняется слишком близко к фронту
│
▼
Триггер
«завис» между 0 и 1
Решение — два триггера подряд:
Кнопка ──► [D-FF] ──► [D-FF] ──► К логике
↑ ↑
CLK CLK
«Ловит» «Стабилизирует»
Что из чего строится
NAND ──► SR-защёлка ──► D-защёлка ──► D-триггер
│
▼
Регистр ◄── Счётчик ◄── RAM
│
▼
CPU!
Всё это мы строим в курсе nand2cpu!
Микросхемы серии 74xx
| Микросхема | Что внутри | Применение |
|---|---|---|
| 74HC74 | 2× D-триггер | Делители, синхронизаторы |
| 74HC174 | 6× D-триггер | Регистры |
| 74HC374 | 8× D-триггер с OE | Шины данных |
| 74HC573 | 8× D-защёлка | Адресные защёлки |
| 74HC279 | 4× SR-защёлка | Антидребезг |
Связь с другими темами
- Комбинационная логика — без памяти: combinational_logic
- Счётчики — триггеры считают: counters
- Тактирование — откуда CLK: clock_timing
- Антидребезг — SR-защёлка помогает: debouncing
- nand2cpu Акт III — строим память: Акт III
Мини-задания
Чем последовательная логика отличается от комбинационной?
Когда D-триггер запоминает значение?
Почему SR-защёлка с S=1, R=1 — запрещённое состояние?
Зачем нужен синхронизатор из двух триггеров?
Из скольких D-триггеров состоит байтовый регистр?
Details
В последовательной есть память — выход зависит от предыдущего состояния
Только в момент переднего фронта CLK (переход 0→1)
Оба выхода Q и Q̄ станут одинаковыми — это противоречит логике (Q должен быть NOT Q̄)
Первый триггер может «зависнуть» в метастабильном состоянии, второй стабилизирует сигнал
8 D-триггеров (по одному на каждый бит)
Интерактивные симуляции
Попробуй схемы в симуляторе Falstad — можно кликать на элементы и смотреть что происходит:
SR-защёлка на NOR
D-триггер
Больше симуляций — на falstad.com/circuit
