Decoder (Дешифратор команд)
Входы (Inputs)
| Пин | Тип | Описание |
|---|---|---|
| Instr | bus8 | Байт инструкции из ROM (биты 7:4 = opcode, биты 3:0 = operand) |
Выходы (Outputs)
| Пин | Тип | Описание |
|---|---|---|
| ALUOp0 | bit | Младший бит кода операции АЛУ |
| ALUOp1 | bit | Старший бит кода операции АЛУ |
| MemWr | bit | Сигнал записи в RAM (1 = запись) |
| JumpUncond | bit | Безусловный переход (JMP) |
| JumpCond | bit | Условный переход (JZ, JN) |
| RegLoad | bit | Загрузка аккумулятора (1 = сохранить результат) |
| IXLoad | bit | Загрузка индексного регистра (LDX) |
| IXInc | bit | Инкремент индексного регистра (INX) |
| UseIX | bit | Использовать индексный регистр вместо операнда (LDAX, STAX) |
Логика работы
Decoder — комбинационная схема, преобразующая 4-битный opcode инструкции (биты 7:4 входного байта Instr) в набор из 9 управляющих сигналов. Каждый сигнал управляет определённой частью процессора: АЛУ, памятью, регистрами, счётчиком команд.
Таблица декодирования opcode → сигналы:
| Opcode | Мнемоника | ALUOp | RegLoad | MemWr | JumpUncond | JumpCond | IXLoad | IXInc | UseIX |
|---|---|---|---|---|---|---|---|---|---|
| 0 | NOP | — | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | ADD | [0,0] | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | SUB | [0,1] | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 | AND | [1,0] | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 4 | OR | [1,1] | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 5 | LDA | — | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 6 | STA | — | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 7 | JMP | — | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| 8 | JZ | — | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
| 9 | LDX | — | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 10 | LDAX | — | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
| 11 | STAX | — | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
| 12 | JN | — | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
| 13 | INX | — | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 15 | HLT | — | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Код операции АЛУ формируется двумя битами: ALUOp0 (младший) и ALUOp1 (старший):
| ALUOp[1:0] | Операция АЛУ |
|---|---|
| 00 | ADD (сложение) |
| 01 | SUB (вычитание) |
| 10 | AND (побитовое И) |
| 11 | OR (побитовое ИЛИ) |
Полная справка по всем командам и их семантике — см. руководство по ассемблеру.
Применение
Используется на уровнях 17–18. Decoder — мозг процессора: без него ни одна команда, кроме NOP, не будет выполняться. Все 9 выходных сигналов Decoder подключаются к соответствующим управляющим входам других компонентов:
- ALUOp0, ALUOp1 → ALU8: выбор арифметической/логической операции.
- RegLoad → Register8 (аккумулятор): разрешение записи нового значения.
- MemWr → RAM (WE): сигнал записи в память данных.
- JumpUncond, JumpCond → ProgramCounter (Load): управление переходами (через логику условного перехода с флагом Zero от АЛУ).
- IXLoad, IXInc, UseIX → индексный регистр: операции с косвенной адресацией.