28. ALU: Сборка
28. ALU: Сборка
🎯 Цель урока
Собрать работающий 4-битный ALU с операциями ADD, SUB, AND, OR.
🔧 Компоненты
| Компонент | Количество | Назначение |
|---|
| 74HC283 | 1 | 4-бит сумматор |
| 74HC86 | 1 | XOR (для SUB) |
| 74HC08 | 1 | AND |
| 74HC32 | 1 | OR |
| 74HC157 | 2 | MUX 2:1 (×4) |
| DIP-переключатель 4-поз | 2 | Входы A, B |
| DIP-переключатель 2-поз | 1 | Код операции |
| LED | 5 | Результат + флаги |
📐 Схема ALU
Этап 1: Арифметический блок
B[3:0] ───────────────────────────────────┐
│
Op[0] ─────┬──────┬──────┬──────┐ │
(SUB) │ │ │ │ │
▼ ▼ ▼ ▼ │
┌──────────────────────────┐ │
│ 74HC86 (XOR) │ │
│ B⊕Op[0] = B (ADD) │ │
│ B⊕Op[0] = ~B (SUB) │ │
└────────────┬─────────────┘ │
│ │
▼ │
A[3:0] ─────────────────────┐ │
│ │
┌────────────────────┼─────────────┘
│ │
▼ ▼
┌─────────────────────────────────┐
│ 74HC283 │
│ Adder │
│ │
│ A ──► A Sum ──► Arith_Out │
│ B⊕Op ► B │
│ Op[0] ► Cin Cout ──► Carry │
└─────────────────────────────────┘
Соединения арифметического блока
74HC86 (XOR для инверсии B):
Pin 1 (1A) ── B0
Pin 2 (1B) ── Op[0]
Pin 3 (1Y) ── B0' → 74HC283 Pin 6
Pin 4 (2A) ── B1
Pin 5 (2B) ── Op[0]
Pin 6 (2Y) ── B1' → 74HC283 Pin 2
Pin 9 (3A) ── B2
Pin 10(3B) ── Op[0]
Pin 8 (3Y) ── B2' → 74HC283 Pin 15
Pin 12(4A) ── B3
Pin 13(4B) ── Op[0]
Pin 11(4Y) ── B3' → 74HC283 Pin 11
74HC283 (Adder):
A1-A4 ── A[3:0] (Pins 5,3,14,12)
B1-B4 ── B'[3:0] от XOR (Pins 6,2,15,11)
C0 ── Op[0] (Cin для +1 при SUB)
Σ1-Σ4 ── Arith_Out[3:0]
C4 ── Carry флаг
Этап 2: Логический блок
74HC08 (AND):
A[3:0] ── Pins 1,4,9,12 (входы A)
B[3:0] ── Pins 2,5,10,13 (входы B)
AND_Out ── Pins 3,6,8,11 (выходы)
74HC32 (OR):
A[3:0] ── Pins 1,4,9,12 (входы A)
B[3:0] ── Pins 2,5,10,13 (входы B)
OR_Out ── Pins 3,6,8,11 (выходы)
Этап 3: Мультиплексор результата
Используем два 74HC157 (каждый — 4 канала 2:1 MUX):
Op[1] выбирает: 0 = арифметика, 1 = логика
Op[0] выбирает: ADD/AND или SUB/OR
MUX 1 (74HC157 #1):
S ── Op[1]
1A ── Arith_Out[0] ┐
1B ── Logic_Out[0] ├─► 1Y ── Result[0]
2A ── Arith_Out[1] │
2B ── Logic_Out[1] ├─► 2Y ── Result[1]
...
Упрощённая схема MUX
Op[1:0] = 00: ADD (Arith, +)
Op[1:0] = 01: SUB (Arith, -)
Op[1:0] = 10: AND (Logic)
Op[1:0] = 11: OR (Logic)
Arith_Out ──────────┐
│
AND_Out ─────────────┼── MUX ── Result
│ (Op)
OR_Out ──────────────┘
Для полной схемы нужен MUX 4:1 (из двух 74HC157):
┌─────────────────────────────────────────────────┐
│ Первый уровень MUX (74HC157 #1): │
│ S = Op[0] │
│ ADD ──► A │
│ SUB ──► B ──► Y ── Arith_Result │
│ │
│ AND ──► A │
│ OR ──► B ──► Y ── Logic_Result │
├─────────────────────────────────────────────────┤
│ Второй уровень MUX (74HC157 #2): │
│ S = Op[1] │
│ Arith_Result ──► A │
│ Logic_Result ──► B ──► Y ── Final_Result │
└─────────────────────────────────────────────────┘
🔧 Полная сборка
Схема соединений
DIP A[3:0] ──┬── 74HC283 (A входы)
├── 74HC08 (A входы)
└── 74HC32 (A входы)
DIP B[3:0] ──┬── 74HC86 (для XOR с Op[0])
├── 74HC08 (B входы)
└── 74HC32 (B входы)
Op[0] (SUB) ── 74HC86 (все вторые входы)
└── 74HC283 C0
74HC86 out ──── 74HC283 (B входы)
74HC283 Σ ──── MUX (Arith input)
74HC08 out ─┬── MUX (AND input)
74HC32 out ─┴── MUX (OR input)
Op[1] ───────── MUX Select
MUX out ─────── LED × 4 (Result)
74HC283 C4 ──── LED (Carry)
✅ Тестирование
Тест ADD (Op = 00)
| A | B | Ожидание | Result | C |
|---|
| 0011 (3) | 0010 (2) | 5 | 0101 | 0 |
| 0111 (7) | 0001 (1) | 8 | 1000 | 0 |
| 1111 (15) | 0001 (1) | 16 | 0000 | 1 |
Тест SUB (Op = 01)
| A | B | Ожидание | Result | C |
|---|
| 0101 (5) | 0011 (3) | 2 | 0010 | 1 |
| 0011 (3) | 0101 (5) | -2 | 1110 | 0 |
Тест AND (Op = 10)
| A | B | Result |
|---|
| 1100 | 1010 | 1000 |
| 1111 | 0101 | 0101 |
Тест OR (Op = 11)
| A | B | Result |
|---|
| 1100 | 1010 | 1110 |
| 1000 | 0001 | 1001 |
💡 Расширение до 8 бит
Для 8-битного ALU:
- 2× 74HC283 (каскадом)
- 2× 74HC86
- 2× 74HC08
- 2× 74HC32
- 4× 74HC157 (или 2× 74HC257)
A[7:0] ─── [Low ALU 4-bit] ─┬── Result[3:0]
[High ALU 4-bit] ┴── Result[7:4]
│
Carry Low → Cin High
📝 Мини-задания
✅ Чеклист
➡️ Следующий урок
29. Программный счётчик →