Skip to main content

Комбинационная логика

Комбинационная логика — это цифровые схемы без памяти: выходы зависят только от текущих входов.

🎓 В курсе nand2cpu
Практика: Акт II — Арифметика (сумматоры, компараторы, мультиплексоры)

Комбинационная vs последовательная логика

Комбинационная:              Последовательная:

  Входы ──► [Логика] ──► Выходы     Входы ──► [Логика] ──► Выходы
                                          ↑           │
   Выход = f(входы)                       └── память ←┘
   
   Нет памяти!                   Выход = f(входы, состояние)

Как описывать комбинационную схему

1) Таблица истинности

Перебираем все комбинации входов:

ABCY (разрешение)
0000
0010
0100
0110
1001
1010
1100
1110

Где: A = старт, B = авария, C = концевик

2) Булева формула

\[ Y = A \land \overline{B} \land \overline{C} \]

Читается: «Старт разрешён И авария НЕ активна И концевик НЕ нажат»

3) Схема из вентилей

A ──────────────┐
B ──►○──┐       │
        │ AND3 ─┼── Y
C ──►○──┘       │

Основные блоки комбинационной логики

Полусумматор (Half Adder)

Складывает 2 бита без учёта переноса:

A ───┬───[XOR]─── S (сумма)
B ───┼───[AND]─── C (перенос)
     └───┘
ABSC
0000
0110
1010
1101

\(S = A \oplus B\), \(C = A \land B\)

Подробнее: Урок 11: Полусумматор

Полный сумматор (Full Adder)

Учитывает перенос от предыдущего разряда:

ABCinSCout
00000
00110
01010
01101
10010
10101
11001
11111

Подробнее: Урок 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

Мини‑задания

  1. Составьте таблицу истинности для \(Y = A \lor (B \land C)\).

  2. Полусумматор: чему равны S и C для A=1, B=1?

  3. MUX 2-в-1: какой вход пройдёт на выход при S=1?

  4. Упростите: \(Y = A \cdot B + A \cdot B \cdot C\)

  5. Сколько выходов у дешифратора 3-в-8?

Details
ABCY
0000
0010
0100
0111
1xx1
  1. \(S = 1 \oplus 1 = 0\), \(C = 1 \land 1 = 1\) (результат: 10₂ = 2)

  2. D1 (при S=1 выбирается вход D1)

  3. \(Y = A \cdot B \cdot (1 + C) = A \cdot B\)

  4. 8 выходов (Y0–Y7)