Skip to main content

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                      │
│                            └─────────────┘                                 │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

Компоненты

МодульМикросхемыКоличество
ClockTLC555, 74LS042
PC74HC1611
MAR74HC1731
RAM74HC189 или EEPROM1-2
IR74HC1731
Register A74ACT3771
Register B74ACT3771
ALU74HC283, 74HC862-3
Output74ACT3771
Display74HC4511, 7-seg2-4
Control74HC138, 74HC00, EEPROM3-5
Bus Buffer74HC2454-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 биты

БитСигналОписание
0HLTОстановить clock
1MIMAR in (загрузка адреса)
2RIRAM in (запись)
3RORAM out (чтение)
4IOInstruction operand out
5IIInstruction register in
6AIA register in
7AOA register out
8ΣOALU out
9SUSubtract
10BIB register in
11OIOutput register in
12CECounter enable (PC++)
13COCounter out
14JJump (load PC)
15FIFlags 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

  1. Больше памяти: 256 байт (8-бит адрес)
  2. Стек: PUSH/POP/CALL/RET
  3. Прерывания: реакция на внешние события
  4. Ввод: клавиатура, датчики

Следующие проекты

  1. SAP-2: расширенная версия с подпрограммами
  2. 6502 на FPGA: классический процессор на Tang Nano
  3. 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, электронике или робототехнике.

Удачи в дальнейших проектах! 🚀