Decoder (Дешифратор команд)

Входы (Inputs)

ПинТипОписание
Instrbus8Байт инструкции из ROM (биты 7:4 = opcode, биты 3:0 = operand)

Выходы (Outputs)

ПинТипОписание
ALUOp0bitМладший бит кода операции АЛУ
ALUOp1bitСтарший бит кода операции АЛУ
MemWrbitСигнал записи в RAM (1 = запись)
JumpUncondbitБезусловный переход (JMP)
JumpCondbitУсловный переход (JZ, JN)
RegLoadbitЗагрузка аккумулятора (1 = сохранить результат)
IXLoadbitЗагрузка индексного регистра (LDX)
IXIncbitИнкремент индексного регистра (INX)
UseIXbitИспользовать индексный регистр вместо операнда (LDAX, STAX)

Логика работы

Decoder — комбинационная схема, преобразующая 4-битный opcode инструкции (биты 7:4 входного байта Instr) в набор из 9 управляющих сигналов. Каждый сигнал управляет определённой частью процессора: АЛУ, памятью, регистрами, счётчиком команд.

Таблица декодирования opcode → сигналы:

OpcodeМнемоникаALUOpRegLoadMemWrJumpUncondJumpCondIXLoadIXIncUseIX
0NOP0000000
1ADD[0,0]1000000
2SUB[0,1]1000000
3AND[1,0]1000000
4OR[1,1]1000000
5LDA1000000
6STA0100000
7JMP0010000
8JZ0001000
9LDX0000100
10LDAX1000001
11STAX0100001
12JN0001000
13INX0000010
15HLT0000000

Код операции АЛУ формируется двумя битами: ALUOp0 (младший) и ALUOp1 (старший):

ALUOp[1:0]Операция АЛУ
00ADD (сложение)
01SUB (вычитание)
10AND (побитовое И)
11OR (побитовое ИЛИ)

Полная справка по всем командам и их семантике — см. руководство по ассемблеру.

Применение

Используется на уровнях 17–18. Decoder — мозг процессора: без него ни одна команда, кроме NOP, не будет выполняться. Все 9 выходных сигналов Decoder подключаются к соответствующим управляющим входам других компонентов: