Skip to main content

30. Шина данных

30. Шина данных

🎯 Цель урока
Понять шинную архитектуру — как компоненты процессора обмениваются данными.

🧠 Фаза 2: Теория (20 мин)

Проблема: как соединить всё?

    Без шины:                      С шиной:
    
    [ALU]───[Reg A]                 [ALU]
      │ ╲   ╱ │                       │
      │  ╲ ╱  │                    ═══════════ BUS
      │   ╳   │                    │  │  │  │
      │  ╱ ╲  │                  [Reg][Reg][PC][Mem]
    [Reg B]──[PC]
    
    O(n²) проводов!               O(n) проводов!

Шинная архитектура

Шина (Bus) — общий набор проводов для передачи данных между компонентами.

    ┌──────────────────────────────────────────────────────────┐
    │                    DATA BUS (8 бит)                      │
    └──────────────────────────────────────────────────────────┘
         │           │           │           │           │
         ▼           ▼           ▼           ▼           ▼
    ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
    │   ALU   │ │  Reg A  │ │  Reg B  │ │   PC    │ │   RAM   │
    └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘

Правило шины

Только один источник может выводить данные на шину в любой момент!

Иначе — короткое замыкание (если оба выдают разные уровни).

Tri-State (третье состояние)

    Обычный выход:        Tri-State выход:
    
    ┌───┐                 ┌───┐
    │   ├── 0 или 1       │   ├── 0, 1 или Z
    └───┘                 └─┬─┘
                           OE (Output Enable)
    
    Z = высокоимпедансное состояние (отключён)

Буфер с тремя состояниями

    74HC245 — 8-битный двунаправленный буфер:
    
        ┌───────────────────┐
    OE ─┤                   │
        │   A ◄────────► B  │
   DIR ─┤                   │
        └───────────────────┘
    
    OE = 0: буфер активен
    OE = 1: выходы в Z-состоянии
    DIR: направление (A→B или B←A)

🏗️ Типичные шины

1. Шина данных (Data Bus)

Передаёт данные между компонентами.

  • Обычно 8, 16, 32, 64 бита
  • Двунаправленная

2. Шина адреса (Address Bus)

Указывает, к какой ячейке памяти обращаемся.

  • Обычно 16, 20, 32 бита
  • Однонаправленная (CPU → Memory)

3. Шина управления (Control Bus)

Сигналы управления: Read, Write, Clock и т.д.

    ┌─────────────────────────────────────────────────────────┐
    │                  ADDRESS BUS (16 бит)                   │
    └─────────────────────────────────────────────────────────┘
    
    ┌─────────────────────────────────────────────────────────┐
    │                   DATA BUS (8 бит)                      │
    └─────────────────────────────────────────────────────────┘
    
    ┌─────────────────────────────────────────────────────────┐
    │        CONTROL BUS (RD, WR, CLK, RST, ...)              │
    └─────────────────────────────────────────────────────────┘

🔧 Фаза 3: Собираем шину (25 мин)

Компоненты

КомпонентКоличествоНазначение
74HC2452-3Tri-state буферы
74ACT3772Регистры
LED8Индикация шины
Резистор 10 кОм8Подтяжки
DIP-переключатель 8-поз2Источники данных

Распиновка 74HC245

        ┌───────────────────┐
  DIR ──┤ 1          20 ├── VCC
   A1 ──┤ 2          19 ├── ~OE
   A2 ──┤ 3   74HC245 18 ├── B1
   A3 ──┤ 4          17 ├── B2
   A4 ──┤ 5          16 ├── B3
   A5 ──┤ 6          15 ├── B4
   A6 ──┤ 7          14 ├── B5
   A7 ──┤ 8          13 ├── B6
   A8 ──┤ 9          12 ├── B7
  GND ──┤ 10         11 ├── B8
        └───────────────────┘
ПинОписание
A1-A8Сторона A
B1-B8Сторона B
DIRНаправление: 1=A→B, 0=B→A
~OEOutput Enable (LOW=активен)

Схема шины

                    DATA BUS (8 проводов)
    ═══════════════════════════════════════════════════
         │              │              │              │
         │              │              │              │
    ┌────┴────┐    ┌────┴────┐    ┌────┴────┐    ┌────┴────┐
    │ 74HC245 │    │ 74HC245 │    │ 74HC245 │    │ 74HC245 │
    │  REG A  │    │  REG B  │    │  INPUT  │    │ OUTPUT  │
    │  Buffer │    │  Buffer │    │  Buffer │    │  Buffer │
    └────┬────┘    └────┬────┘    └────┬────┘    └────┬────┘
         │              │              │              │
      ~OE_A          ~OE_B          ~OE_IN         ~OE_OUT
    
    Правило: только один ~OE = LOW в любой момент!

Управление шиной

    Декодер команд генерирует сигналы:
    
    Команда "Загрузить из A":
        ~OE_A = 0
        ~OE_B = 1
        ~OE_IN = 1
        Данные из Reg A появляются на шине
        
    Команда "Загрузить из INPUT":
        ~OE_A = 1
        ~OE_B = 1
        ~OE_IN = 0
        Данные с переключателей на шине

Подтяжки на шине

    Когда все буферы отключены (Z-состояние),
    шина должна иметь определённый уровень:
    
    DATA BUS
       [10kΩ] ─── VCC (подтяжка к HIGH)
       [10kΩ]
       ...
        
    Или к GND (подтяжка к LOW)

💡 Протокол обмена

Запись в регистр

    Время  ─────────────────────────────────────────►
    
    CLK    ___________╱╲____________╱╲____________
    
    ~OE_X  ────────╲______________________________
           (источник выдаёт данные)
    
    BUS    ─────────────╱ ДАННЫЕ ╲────────────────
    
    REG_EN ───────────────────╲___________╱───────
           (регистр захватывает по CLK)

Чтение из памяти

    1. Выставить адрес на ADDRESS BUS
    2. Активировать ~RD (Read)
    3. Память выдаёт данные на DATA BUS
    4. Регистр-приёмник захватывает данные
    5. Деактивировать ~RD

📝 Мини-задания

Что такое Z-состояние (Hi-Z)?

Ответ: Высокоимпедансное состояние, когда выход электрически отключён от шины

Почему нельзя активировать два источника на шине одновременно?

Ответ: Конфликт уровней — если один выдаёт 0, а другой 1, будет короткое замыкание

Для чего нужны подтяжки на шине?

Ответ: Чтобы шина имела определённый уровень, когда все источники отключены (Z)


✅ Чеклист

  • Понимаю преимущества шинной архитектуры
  • Знаю принцип tri-state
  • Собрал шину с несколькими источниками
  • Проверил управление ~OE сигналами

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

31. Блок управления →