Skip to main content

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

Входы и выходы

СигналРазрядностьОписание
A8 битПервый операнд
B8 битВторой операнд
Op3-4 битКод операции
Result8 битРезультат
Flags4 битФлаги состояния

Флаги состояния

ФлагНазваниеУсловие
ZZeroResult = 0
CCarryПеренос из старшего бита
NNegativeСтарший бит Result = 1
VOverflowПереполнение знакового

Набор операций (пример)

Op[2:0]ОперацияОписание
000ADDA + B
001SUBA - B
010ANDA & B
011ORA | B
100XORA ^ B
101NOT~A
110SHLA « 1
111SHRA » 1

🏗️ Архитектура ALU

Блок-схема

                    Op[2:0]
         ┌─────────────────────────────────┐
         │           Декодер               │
         │         операций                │
         └──────────────┬──────────────────┘
         ┌──────────────┼──────────────────┐
         │              │                  │
         ▼              ▼                  ▼
    ┌─────────┐   ┌─────────┐        ┌─────────┐
    │  Adder  │   │ Logic   │        │ Shifter │
    │(сумматор│   │ (AND,   │        │ (сдвиги)│
    │  /вычит)│   │ OR,XOR) │        │         │
    └────┬────┘   └────┬────┘        └────┬────┘
         │             │                  │
         └──────────────┼──────────────────┘
               ┌─────────────────┐
               │   Мультиплексор │
               │   результата    │
               └────────┬────────┘
                     Result

Компоненты

  1. Арифметический блок:

    • 74HC283 — сумматор
    • XOR для вычитания (дополнительный код)
  2. Логический блок:

    • 74HC08 — AND
    • 74HC32 — OR
    • 74HC86 — XOR
  3. Блок сдвига:

    • Мультиплексоры или спец. чипы
  4. Мультиплексор результата:

    • 74AC251 (8:1) × 8 или 74HC157 (2:1) × N

📐 Проектирование 4-битного ALU

Упрощённый набор команд

Op[1:0]Операция
00ADD
01SUB
10AND
11OR

Схема

    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 с 3-битным кодом Op?

Ответ: $2^3 = 8$ операций

Какой флаг установится при результате 11111111?

Ответ: N=1 (Negative), Z=0

Как ALU выбирает между ADD и AND?

Ответ: Мультиплексор на выходе, управляемый кодом операции Op


✅ Чеклист

  • Понимаю структуру ALU
  • Знаю основные операции
  • Понимаю назначение флагов
  • Могу спроектировать простой ALU

➡️ Следующий урок

28. ALU: Сборка →