Skip to main content

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

31. Блок управления (Control Unit)

🎯 Цель урока
Понять как декодируются инструкции и генерируются управляющие сигналы.

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

Роль блока управления

Control Unit — “дирижёр” процессора:

  1. Читает инструкцию из памяти
  2. Декодирует её (понимает что делать)
  3. Генерирует сигналы для всех компонентов
    ┌─────────────────────────────────────────────────────────┐
                        CONTROL UNIT                         
                                                             
       Instruction ──►[Decoder]──► Control Signals           
                                                             
            CLK ──►[Sequencer]──► Timing                     
                                                             
          Flags ──►[Logic]──► Conditional Branching          
                                                             
    └─────────────────────────────────────────────────────────┘
                              
                              
         ┌────────────────────────────────────────┐
                   УПРАВЛЯЮЩИЕ СИГНАЛЫ           
         ├────────────────────────────────────────┤
          PC_inc, PC_load, Reg_A_en, Reg_B_en,   
          ALU_op, Mem_read, Mem_write, ...       
         └────────────────────────────────────────┘

Формат инструкции

Простая 8-битная инструкция:

    7  6  5  4  3  2  1  0
   ┌──┬──┬──┬──┬──┬──┬──┬──┐
   │  OPCODE  │   OPERAND  │
   └──┴──┴──┴──┴──┴──┴──┴──┘
    └────┬────┘ └────┬────┘
      4 бита      4 бита
    код операции  аргумент

Набор инструкций

OpcodeМнемоникаОписание
0000NOPНичего не делать
0001LDA nЗагрузить n в A
0010LDB nЗагрузить n в B
0011ADDA = A + B
0100SUBA = A - B
0101OUTВывести A
0110JMP addrПерейти к адресу
0111JZ addrПерейти если Z=1
1111HLTОстановить

Микрооперации

Каждая инструкция состоит из микроопераций (шагов):

    Инструкция ADD (OPCODE = 0011):
    
    Шаг 0 (Fetch):
        PC_out = 1       ; PC на адресную шину
        Mem_read = 1     ; Читать память
        IR_load = 1      ; Загрузить в регистр инструкций
        PC_inc = 1       ; PC++
        
    Шаг 1 (Execute):
        RegA_out = 1     ; A на шину (к ALU)
        RegB_out = 1     ; B на шину (к ALU)
        ALU_op = ADD     ; Операция сложения
        RegA_load = 1    ; Результат в A
        
    Шаг 2:
        Reset_step       ; Следующая инструкция

🏗️ Архитектура Control Unit

Вариант 1: Hardwired (на логике)

    ┌─────────────────────────────────────────────────────┐
    │                                                     │
    │   OPCODE[3:0] ──► [74HC138] ──► Сигнал инструкции   │
    │                    Decoder                          │
    │                       │                             │
    │                       ▼                             │
    │   STEP[1:0] ────► [Комбинационная] ──► Control      │
    │   (от счётчика)    логика (AND/OR)     Signals      │
    │                                                     │
    │   FLAGS ────────►                                   │
    │                                                     │
    └─────────────────────────────────────────────────────┘

Вариант 2: Микропрограммный

    ┌─────────────────────────────────────────────────────┐
    │                                                     │
    │   OPCODE + STEP ──► [ROM/EEPROM] ──► Control Word   │
    │      (адрес)         (таблица)      (сигналы)       │
    │                                                     │
    └─────────────────────────────────────────────────────┘
    
    ROM содержит "микропрограмму" для каждой инструкции

🔧 Фаза 3: Hardwired Control Unit (25 мин)

Компоненты

КомпонентКоличествоНазначение
74HC1381Декодер opcode (3:8)
74HC002NAND для логики
74HC321OR для логики
74HC1611Счётчик шагов
LED8Индикация сигналов

Схема декодера инструкций

    OPCODE[2:0] ──► 74HC138 ──► Instruction Lines
                        ├── I0 (NOP)
                        ├── I1 (LDA)
                        ├── I2 (LDB)
                        ├── I3 (ADD)
                        ├── I4 (SUB)
                        ├── I5 (OUT)
                        ├── I6 (JMP)
                        └── I7 (JZ)

Счётчик микрошагов

    74HC161 (4-bit counter):
    
    CLK ──► счёт 0, 1, 2, 3, 0, 1, 2, 3, ...
    
    Q[1:0] = номер микрошага (Step 0-3)
    
    Reset: при завершении инструкции

Генерация сигналов

    Пример: сигнал RegA_load
    
    RegA_load = (I1 AND Step1)    ; LDA: загрузить в A
             OR (I3 AND Step1)    ; ADD: результат в A
             OR (I4 AND Step1)    ; SUB: результат в A
    
    Схема:
    
    I1 ──┐
         ├─► AND ─┐
    S1 ──┘        
                  ├─► OR ──► RegA_load
    I3 ──┐        
         ├─► AND ─┤
    S1 ──┘        
                  
    I4 ──┐        
         ├─► AND ─┘
    S1 ──┘

Таблица управляющих сигналов

StepСигналNOPLDALDBADDSUBOUTJMP
0PC_out1111111
0Mem_rd1111111
0IR_load1111111
0PC_inc1111110
1A_load0101100
1B_load0010000
1OUT_en0000010
1PC_load0000001
1ALU_sub0000100

💡 Микропрограммный вариант (EEPROM)

Вместо логических элементов используем ROM:

    Адрес ROM = {OPCODE[3:0], STEP[1:0]}
    
    ROM[адрес] = {PC_out, Mem_rd, IR_load, PC_inc,
                  A_load, B_load, OUT_en, ALU_sub, ...}
    
    Пример:
    ROM[0x30] = 0b11110000  ; ADD, Step 0: Fetch
    ROM[0x31] = 0b00001000  ; ADD, Step 1: Execute

Преимущество: легко менять набор инструкций (перепрограммировать ROM).


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

Что делает Control Unit на шаге Fetch?

Ответ: Читает инструкцию из памяти по адресу PC, загружает в IR, увеличивает PC

Чем hardwired отличается от микропрограммного CU?

Ответ: Hardwired — на логических элементах (быстрее, но сложнее менять). Микропрограммный — на ROM (гибче, но медленнее)

Сколько микрошагов нужно для простой инструкции?

Ответ: Минимум 2: Fetch (чтение инструкции) + Execute (выполнение)


✅ Чеклист

  • Понимаю роль Control Unit
  • Знаю формат инструкции
  • Могу составить таблицу микроопераций
  • Понимаю разницу hardwired vs микропрограммный

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

32. Система команд →