27. ALU: Архитектура
27. ALU: Архитектура
🎯 Цель урокаПонять структуру ALU — “мозга” процессора, выполняющего все вычисления.
🎮 Фаза 1: Симулятор (15 мин)
Turing Complete
Пройди Level: ALU — собери устройство, выполняющее несколько операций.
🧠 Фаза 2: Теория (20 мин)
Что такое ALU?
ALU (Arithmetic Logic Unit) — комбинационная схема, выполняющая:
- Арифметические операции (сложение, вычитание)
- Логические операции (AND, OR, XOR, NOT)
- Сравнение
- Сдвиги
┌─────────────────────────────────┐
A ───┤ │
(8) │ ├─── Result (8)
│ ALU │
B ───┤ ├─── Flags
(8) │ │ (Z, C, N, V)
│ │
Op ───┤ │
(3-4) │ │
└─────────────────────────────────┘
Входы и выходы
| Сигнал | Разрядность | Описание |
|---|---|---|
| A | 8 бит | Первый операнд |
| B | 8 бит | Второй операнд |
| Op | 3-4 бит | Код операции |
| Result | 8 бит | Результат |
| Flags | 4 бит | Флаги состояния |
Флаги состояния
| Флаг | Название | Условие |
|---|---|---|
| Z | Zero | Result = 0 |
| C | Carry | Перенос из старшего бита |
| N | Negative | Старший бит Result = 1 |
| V | Overflow | Переполнение знакового |
Набор операций (пример)
| Op[2:0] | Операция | Описание |
|---|---|---|
| 000 | ADD | A + B |
| 001 | SUB | A - B |
| 010 | AND | A & B |
| 011 | OR | A | B |
| 100 | XOR | A ^ B |
| 101 | NOT | ~A |
| 110 | SHL | A « 1 |
| 111 | SHR | A » 1 |
🏗️ Архитектура ALU
Блок-схема
Op[2:0]
│
▼
┌─────────────────────────────────┐
│ Декодер │
│ операций │
└──────────────┬──────────────────┘
│
┌──────────────┼──────────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Adder │ │ Logic │ │ Shifter │
│(сумматор│ │ (AND, │ │ (сдвиги)│
│ /вычит)│ │ OR,XOR) │ │ │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
└──────────────┼──────────────────┘
│
▼
┌─────────────────┐
│ Мультиплексор │
│ результата │
└────────┬────────┘
│
▼
Result
Компоненты
Арифметический блок:
- 74HC283 — сумматор
- XOR для вычитания (дополнительный код)
Логический блок:
- 74HC08 — AND
- 74HC32 — OR
- 74HC86 — XOR
Блок сдвига:
- Мультиплексоры или спец. чипы
Мультиплексор результата:
- 74AC251 (8:1) × 8 или 74HC157 (2:1) × N
📐 Проектирование 4-битного ALU
Упрощённый набор команд
| Op[1:0] | Операция |
|---|---|
| 00 | ADD |
| 01 | SUB |
| 10 | AND |
| 11 | OR |
Схема
A[3:0] ────────────────────┬─────────────────────┐
│ │
B[3:0] ──┬─────────────────┼─────────────────────┼──┐
│ │ │ │
│ ┌──────────────┴───────────┐ │ │
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
Op[0]┤ XOR ×4 │ │ AND ×4 │ │ OR ×4 │
│ (инверсия │ │ 74HC08 │ │ 74HC32 │
│ для SUB) │ │ │ │ │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
▼ │ │
┌───────────┐ │ │
Op[0]┤ 74HC283 │ │ │
│ Adder │ │ │
│ +Cin │ │ │
└─────┬─────┘ │ │
│ │ │
│ ┌─────────────────┘ │
│ │ ┌─────────────────────┘
▼ ▼ ▼
┌───────────────────────────────────┐
Op[1]┤ Мультиплексор 4:1 ×4 │
│ (выбор результата) │
└───────────────────┬───────────────┘
│
▼
Result[3:0]
💡 Генерация флагов
Флаг Z (Zero)
Z = ~(R7 | R6 | R5 | R4 | R3 | R2 | R1 | R0)
Используем 74HC02 (NOR):
Result[7:0] ──► [8-вх NOR] ──► Z
Или каскад:
R0|R1 ─┐
R2|R3 ─┼─► OR ─┐
R4|R5 ─┤ ├─► NOR ─► Z
R6|R7 ─┴─► OR ─┘
Флаг N (Negative)
N = Result[7] (просто старший бит!)
Флаг C (Carry)
C = Cout от сумматора
Флаг V (Overflow)
V = Cin[7] XOR Cout[7]
Переполнение при сложении знаковых:
- (+) + (+) = (−) → Overflow!
- (−) + (−) = (+) → Overflow!
📝 Мини-задания
✅ Чеклист
- Понимаю структуру ALU
- Знаю основные операции
- Понимаю назначение флагов
- Могу спроектировать простой ALU
