34. 🏆 Финальный проект: 8-битный компьютер
🏆 Финальный проект: 8-битный компьютер SAP-1
🎯 Цель проектаСобрать работающий 8-битный компьютер, способный выполнять программы!
🎉 Поздравляю!
Ты прошёл путь от NAND до CPU:
Акт I: NAND → NOT → AND/OR → XOR
Акт II: Сумматор → ALU → Калькулятор
Акт III: Защёлка → Триггер → Регистр → Память
Акт IV: ALU + PC + Control = CPU!
Теперь собираем всё вместе.
🏗️ Архитектура SAP-1
Блок-схема
┌─────────────────────────────────────────────────────────────────────────────┐
│ SAP-1 COMPUTER │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────── W-BUS (8 бит) ──────────────────────┐ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ │
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │ PC │ │ MAR │ │ RAM │ │ IR │ │ A │ │ ALU │ │ B │ │ OUT │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ ┌──┴──┐ │
│ │ │ │ │ │ │ │ │7-seg│ │
│ │ │ │ │ │ │ │ │Disp │ │
│ │ │ │ │ │ │ │ └─────┘ │
│ │ │ │ │ │ │ │ │
│ └────────┴────────┴────────┴────────┴────────┴────────┘ │
│ │ │
│ │ │
│ ┌──────┴──────┐ │
│ │ CONTROL │ │
│ │ UNIT │◄──── CLK │
│ │ │◄──── RESET │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Компоненты
| Модуль | Микросхемы | Количество |
|---|---|---|
| Clock | TLC555, 74LS04 | 2 |
| PC | 74HC161 | 1 |
| MAR | 74HC173 | 1 |
| RAM | 74HC189 или EEPROM | 1-2 |
| IR | 74HC173 | 1 |
| Register A | 74ACT377 | 1 |
| Register B | 74ACT377 | 1 |
| ALU | 74HC283, 74HC86 | 2-3 |
| Output | 74ACT377 | 1 |
| Display | 74HC4511, 7-seg | 2-4 |
| Control | 74HC138, 74HC00, EEPROM | 3-5 |
| Bus Buffer | 74HC245 | 4-6 |
Всего: ~25-30 микросхем
📋 Спецификация
Характеристики
| Параметр | Значение |
|---|---|
| Разрядность | 8 бит |
| Адресное пространство | 16 байт (4-бит адрес) |
| Тактовая частота | 1 Hz - 1 kHz (регулируемая) |
| Число инструкций | 16 |
| Регистры | A, B, IR, OUT |
| Флаги | Zero (Z), Carry (C) |
Набор инструкций
0000 NOP 1000 JZ addr
0001 LDA addr 1001 AND addr
0010 ADD addr 1010 OR addr
0011 SUB addr 1011 XOR addr
0100 STA addr 1100 NOT
0101 LDI n 1101 OUT
0110 JMP addr 1110 INP
0111 JC addr 1111 HLT
🔧 Сборка по модулям
Модуль 1: Тактовый генератор
TLC555 в astable режиме:
┌─────────┐
│ 555 │──► CLK
│ ~1Hz │
└────┬────┘
│
[Потенциометр] — регулировка скорости
+ кнопка STEP для single-step
+ переключатель AUTO/MANUAL
Модуль 2: Program Counter
74HC161 (4-bit счётчик):
CLK ──► счёт
~CLR ── сброс
LOAD ── загрузка (для JMP)
Q[3:0] ──► на шину адреса
Модуль 3: RAM / ROM
Вариант A: 74HC189 (16×4 RAM) × 2
Вариант B: AT28C16 EEPROM (программируется через T48)
Для обучения лучше DIP-переключатели:
- Видно содержимое
- Легко менять программу
Модуль 4: Регистры A и B
74ACT377 × 2:
D[7:0] ◄── W-BUS
Q[7:0] ──► к ALU
CLK ◄── Load сигнал
~EN ◄── от Control Unit
Модуль 5: ALU
74HC283 (сумматор)
+ 74HC86 (XOR для SUB)
+ 74HC08 (AND)
+ 74HC32 (OR)
+ 74HC157 (MUX)
A_in ◄── от Reg A
B_in ◄── от Reg B
Result ──► на W-BUS
Модуль 6: Control Unit
Микропрограммный вариант:
AT28C16 EEPROM:
Адрес = {OPCODE[3:0], STEP[2:0], FLAGS[1:0]}
Данные = Control Word (16 бит)
Control Word:
┌────┬────┬────┬────┬────┬────┬────┬────┐
│HLT │MI │RI │RO │IO │II │AI │AO │
├────┼────┼────┼────┼────┼────┼────┼────┤
│ΣO │SU │BI │OI │CE │CO │J │FI │
└────┴────┴────┴────┴────┴────┴────┴────┘
Модуль 7: Output Display
74ACT377 ──► 74HC4511 ──► 7-segment
Показывает содержимое регистра OUT
в десятичном виде (0-255)
📊 Микрокод
Control Word биты
| Бит | Сигнал | Описание |
|---|---|---|
| 0 | HLT | Остановить clock |
| 1 | MI | MAR in (загрузка адреса) |
| 2 | RI | RAM in (запись) |
| 3 | RO | RAM out (чтение) |
| 4 | IO | Instruction operand out |
| 5 | II | Instruction register in |
| 6 | AI | A register in |
| 7 | AO | A register out |
| 8 | ΣO | ALU out |
| 9 | SU | Subtract |
| 10 | BI | B register in |
| 11 | OI | Output register in |
| 12 | CE | Counter enable (PC++) |
| 13 | CO | Counter out |
| 14 | J | Jump (load PC) |
| 15 | FI | Flags in |
Микропрограмма для ADD
ADD addr (opcode 0010):
Step 0 (Fetch):
CO | MI ; PC → MAR
Step 1:
RO | II | CE ; RAM → IR, PC++
Step 2 (Execute):
IO | MI ; Operand → MAR
Step 3:
RO | BI ; RAM → B
Step 4:
ΣO | AI | FI ; ALU → A, update flags
✅ Тестовые программы
Тест 1: Мигалка
0: LDI 0 ; 50
1: OUT ; D0
2: LDI 255 ; 5F
3: OUT ; D0
4: JMP 0 ; 60
Ожидание: дисплей чередует 0 и 255.
Тест 2: Счётчик
0: LDI 0 ; 50
1: OUT ; D0
2: ADD 15 ; 2F
3: JMP 1 ; 61
15: 01 ; (data) шаг
Ожидание: дисплей считает 0, 1, 2, 3…
Тест 3: Фибоначчи
0: LDI 1 ; 50
1: STA 14 ; 4E
2: OUT ; D0
3: ADD 15 ; 2F
4: STA 15 ; 4F
5: LDA 14 ; 1E
6: JMP 2 ; 62
14: 00 ; F(n-1)
15: 01 ; F(n)
Ожидание: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233 (переполнение!)
🎓 Итоги курса
Что ты создал
┌─────────────────────────────────────────────────┐
│ │
│ 🖥️ РАБОТАЮЩИЙ 8-БИТНЫЙ КОМПЬЮТЕР │
│ │
│ • Выполняет программы из RAM/ROM │
│ • 16 инструкций (вычисления, логика, ветвл.) │
│ • Отображает результат на 7-сегментнике │
│ • Пошаговая отладка │
│ │
└─────────────────────────────────────────────────┘
Путь от NAND до CPU
| Урок | Тема | Микросхема |
|---|---|---|
| 1-10 | Логика | 74HC00, 04, 08, 32, 86 |
| 11-18 | Арифметика | 74HC283, 138, AC251 |
| 19-26 | Память | 74ACT377, HC595, HCT4060, TLC555 |
| 27-34 | Процессор | Всё вместе! |
Навыки
✅ Цифровая логика
✅ Комбинационные схемы
✅ Последовательностные схемы
✅ Архитектура CPU
✅ Машинный код и ассемблер
✅ Отладка аппаратуры
✅ Работа с осциллографом
✅ Программирование EEPROM
🚀 Куда двигаться дальше?
Улучшения SAP-1
- Больше памяти: 256 байт (8-бит адрес)
- Стек: PUSH/POP/CALL/RET
- Прерывания: реакция на внешние события
- Ввод: клавиатура, датчики
Следующие проекты
- SAP-2: расширенная версия с подпрограммами
- 6502 на FPGA: классический процессор на Tang Nano
- RISC-V: современная открытая архитектура
Рекомендуемые ресурсы
- 📚 “Code” by Charles Petzold — от телеграфа до CPU
- 📚 “But How Do It Know?” by J. Clark Scott — простое объяснение CPU
- 🎥 Ben Eater YouTube — видео сборки SAP-1
- 🎮 Turing Complete — полная версия игры
- 🔧 Tang Nano 25K — FPGA для своего CPU
🏆 Сертификат
╔═══════════════════════════════════════════════════════════════╗
║ ║
║ 🎓 СЕРТИФИКАТ ║
║ ║
║ Курс "От NAND до CPU" завершён! ║
║ ║
║ Ученик успешно: ║
║ • Освоил цифровую логику ║
║ • Собрал ALU, регистры, счётчики ║
║ • Спроектировал и собрал 8-битный CPU ║
║ • Написал и выполнил программы ║
║ ║
║ ⭐⭐⭐⭐⭐ ║
║ ║
╚═══════════════════════════════════════════════════════════════╝
🎉 Поздравляю с завершением курса!
Прогресс:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100%
Акт I: ██████████ 10/10 ✓
Акт II: ██████████ 8/8 ✓
Акт III: ██████████ 8/8 ✓
Акт IV: ██████████ 8/8 ✓
🏆 КУРС ЗАВЕРШЁН! 🏆
Ты теперь понимаешь, как работает компьютер изнутри — от транзистора до программы. Это фундамент для любой карьеры в IT, электронике или робототехнике.
Удачи в дальнейших проектах! 🚀
