Комбинационная логика
Комбинационная логика — это цифровые схемы без памяти: выходы зависят только от текущих входов.
🎓 В курсе nand2cpuПрактика: Акт II — Арифметика (сумматоры, компараторы, мультиплексоры)
Комбинационная vs последовательная логика
Комбинационная: Последовательная:
Входы ──► [Логика] ──► Выходы Входы ──► [Логика] ──► Выходы
↑ │
Выход = f(входы) └── память ←┘
Нет памяти! Выход = f(входы, состояние)
Как описывать комбинационную схему
1) Таблица истинности
Перебираем все комбинации входов:
| A | B | C | Y (разрешение) |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 0 |
Где: A = старт, B = авария, C = концевик
2) Булева формула
Читается: «Старт разрешён И авария НЕ активна И концевик НЕ нажат»
3) Схема из вентилей
A ──────────────┐
│
B ──►○──┐ │
│ AND3 ─┼── Y
C ──►○──┘ │
│
Основные блоки комбинационной логики
Полусумматор (Half Adder)
Складывает 2 бита без учёта переноса:
A ───┬───[XOR]─── S (сумма)
│
B ───┼───[AND]─── C (перенос)
│
└───┘
| A | B | S | C |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
\(S = A \oplus B\), \(C = A \land B\)
Подробнее: Урок 11: Полусумматор
Полный сумматор (Full Adder)
Учитывает перенос от предыдущего разряда:
| A | B | Cin | S | Cout |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
Подробнее: Урок 12: Полный сумматор
Мультиплексор (MUX)
Выбирает один из входов по адресу:
MUX 2-в-1: MUX 4-в-1:
D0 ──┐ D0 ──┐
│ D1 ──┤
├──► Y D2 ──┼──► Y
│ D3 ──┘
D1 ──┘ │
↑ │
S (селектор) S1 S0 (2 бита)
74HC157 — 4× MUX 2-в-1
Подробнее: Урок 16: Мультиплексор
Дешифратор (Decoder)
Преобразует код в «одна из N линий активна»:
┌────────┐
A ──────┤ ├── Y0 (активен при A=0, B=0)
│ 2-to-4 ├── Y1 (активен при A=0, B=1)
B ──────┤decoder ├── Y2 (активен при A=1, B=0)
│ ├── Y3 (активен при A=1, B=1)
└────────┘
74HC138 — дешифратор 3-в-8
Подробнее: Урок 17: Дешифратор
Компаратор
Сравнивает два числа: A > B, A = B, A < B
A (4 бита) ──┐
├──► A>B
├──► A=B
B (4 бита) ──┘ A<B
74HC85 — 4-битный компаратор
Подробнее: Урок 15: Компаратор
Упрощение логических выражений
Зачем упрощать:
- Меньше вентилей → дешевле и надёжнее
- Меньше задержка → быстрее работает
- Проще отлаживать
Пример упрощения
Исходное: \(Y = A \cdot B + A \cdot \overline{B}\)
Выносим A: \(Y = A \cdot (B + \overline{B}) = A \cdot 1 = A\)
Полезные тождества
| Правило | Формула |
|---|---|
| Поглощение | \(A + A \cdot B = A\) |
| Склеивание | \(A \cdot B + A \cdot \overline{B} = A\) |
| Де Морган | \(\overline{A \cdot B} = \overline{A} + \overline{B}\) |
Задержка распространения
Сигнал проходит через вентили не мгновенно!
A ──[NOT]──[AND]──[OR]── Y
│ │ │
5нс 10нс 10нс
Общая задержка: ~25 нс
При 16 МГц (период 62.5 нс) это почти половина такта!
Типовые ошибки
| Ошибка | Результат | Решение |
|---|---|---|
| OR вместо AND | Слишком «мягкое» условие | Проверь таблицу истинности |
| Забыли инверсию | Активен 0 вместо 1 | Проверь «активный уровень» |
| Гонки (hazards) | Короткие «глитчи» на выходе | Добавь регистр на выходе |
Связь с другими темами
- Булева алгебра — теория упрощения: boolean_algebra
- Логические элементы — из чего строим: logic_gates
- Последовательная логика — добавляем память: sequential_logic
- Сумматоры на 74xx — практика: nand2cpu Акт II
Мини‑задания
Составьте таблицу истинности для \(Y = A \lor (B \land C)\).
Полусумматор: чему равны S и C для A=1, B=1?
MUX 2-в-1: какой вход пройдёт на выход при S=1?
Упростите: \(Y = A \cdot B + A \cdot B \cdot C\)
Сколько выходов у дешифратора 3-в-8?
Details
| A | B | C | Y |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | x | x | 1 |
\(S = 1 \oplus 1 = 0\), \(C = 1 \land 1 = 1\) (результат: 10₂ = 2)
D1 (при S=1 выбирается вход D1)
\(Y = A \cdot B \cdot (1 + C) = A \cdot B\)
8 выходов (Y0–Y7)
