Skip to main content

29. Программный счётчик (PC)

29. Программный счётчик (PC)

🎯 Цель урока
Понять и собрать Program Counter — регистр, хранящий адрес текущей инструкции.

🎮 Фаза 1: Симулятор (10 мин)

Turing Complete

Пройди уровни с Program Counter — пойми как процессор “знает” какую команду выполнять.


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

Что такое Program Counter?

PC (Program Counter) — специальный регистр, содержащий адрес следующей инструкции.

    Память программ:
    
    Адрес    Инструкция
    ─────────────────────
    0000     LOAD A, 5     ◄── PC = 0000
    0001     LOAD B, 3
    0002     ADD
    0003     STORE C
    0004     HALT

Операции PC

ОперацияОписаниеКогда
PC++ИнкрементПосле каждой инструкции
PC = addrЗагрузкаКоманды перехода (JMP)
PC = 0СбросПри старте/сбросе

Цикл выполнения инструкции

    ┌──────────────────────────────────────────────────┐
    │                                                  │
    │  ┌─────────┐    ┌─────────┐    ┌─────────┐      │
    └─►│  FETCH  │───►│ DECODE  │───►│ EXECUTE │──────┘
       │         │    │         │    │         │
       │ PC → MAR│    │ IR анализ│   │ ALU/Mem │
       │ Mem → IR│    │         │    │ PC++    │
       └─────────┘    └─────────┘    └─────────┘

Структура PC

         ┌─────────────────────────────────────┐
         │                                     │
    D ───┤                                     │
   (8)   │           PC Register              ├─── Q (8)
         │            (74ACT377)               │    │
  Load ──┤                                     │    │
         │                                     │    │
   CLK ──┤►                                    │    │
         └─────────────────────────────────────┘    │
                      ┌─────────────────────────────┘
               ┌─────────────┐
               │   74HC283   │
               │     +1      ├─── PC+1
               └─────────────┘
         ┌────────────┴────────────┐
         │                         │
         ▼                         ▼
    ┌─────────┐              ┌─────────┐
    │  Jump   │              │ Normal  │
    │ Address │              │  (PC+1) │
    └────┬────┘              └────┬────┘
         │                        │
         │    ┌─────────┐         │
         └────┤   MUX   ├─────────┘
              │ (JMP?)  │
              └────┬────┘
              D вход PC

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

Компоненты

КомпонентКоличествоНазначение
74ACT37718-бит регистр PC
74HC2831Инкремент +1
74HC1572MUX для JMP
Кнопки3CLK, JMP, RESET
DIP-переключатель 8-поз1Jump Address
LED8Значение PC

Схема PC с инкрементом

    ┌─────────────────────────────────────────────────────┐
                                                         
      ┌───────────────────────────────────────────────┐  
                                                       
                    74ACT377 (PC)                      
                                                       
         D0-D7 ◄────────────────────────────────┐     
                                                     
         Q0-Q7 ───────────────────────┬─────────┼───┼──┴── LED × 8
                                                  
         ~EN ◄── GND                              
         CLK ◄── кнопка STEP                      
                                                  
      └────────────────────────────────┼─────────┼───┘
                                                
                                                
                                ┌───────────┐    
                                  74HC283      
                            1 ──┤  B = 1        
                                  A = Q        
                                               
                                  Σ = Q+1  ├────┴── PC+1
                                └───────────┘
                                       
             ┌─────────────────────────┘
             
                           JMP Address (DIP)
                                 
                                 
        ┌─────────────────────────────────┐
                 74HC157 × 2             
                   (MUX)                 
                                         
          S ◄── JMP signal               
                                         
          A ◄── PC+1 (normal)            
          B ◄── JMP Addr (jump)          
                                         
          Y ─────────────────────────────┼──► D входы PC
        └─────────────────────────────────┘
    
    └─────────────────────────────────────────────────────

Соединения

74ACT377 (PC Register):
    D0-D7 ── от MUX
    Q0-Q7 ── к LED и к 74HC283
    CLK ── кнопка STEP
    ~EN ── GND

74HC283 (Incrementer):
    A1-A4 ── Q0-Q3 от PC
    B1-B4 ── 0001 (константа 1)
    C0 ── GND
    Σ1-Σ4 ── к MUX (PC+1 low)
    C4 ── к второму 74HC283 или игнорируем

Для 8 бит: два 74HC283 каскадом (C4 первого → C0 второго)

74HC157 × 2 (MUX):
    S ── JMP сигнал
    A inputs ── PC+1 (от 74HC283)
    B inputs ── Jump Address (от DIP)
    Y outputs ── D входы PC

Проверка

  1. RESET: Установи DIP = 00000000, нажми JMP → PC = 0
  2. INCREMENT: Нажимай STEP → PC = 1, 2, 3, 4…
  3. JUMP: Установи DIP = 00001010 (10), нажми JMP → PC = 10
  4. Continue: Нажимай STEP → PC = 11, 12, 13…

💡 Условные переходы

JMP vs JZ (Jump if Zero)

    JMP — безусловный переход:
        PC = Jump_Address
    
    JZ — переход если Z=1:
        if (Z_flag == 1) then PC = Jump_Address
        else PC = PC + 1

Схема условного перехода

    Z_flag ───────────┐
    JMP_opcode ───────┼──► AND ──► JMP_enable
    JZ_opcode ────────┘

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

Что делает PC после выполнения обычной инструкции?

Ответ: PC = PC + 1 (инкремент)

Когда PC загружает новый адрес (не PC+1)?

Ответ: При командах перехода (JMP, JZ, CALL и т.д.)

Сколько бит нужно для PC, если память 256 байт?

Ответ: 8 бит ($2^8 = 256$)


✅ Чеклист

  • Понимаю роль PC в процессоре
  • Собрал PC с инкрементом
  • Реализовал загрузку адреса (JMP)
  • Проверил последовательный и произвольный переход

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

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