Дешифратор команд (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 так же: он не считает и не хранит, зато читает код операции (старшие биты 7:4 байта инструкции Instr) и раздаёт девять управляющих сигналов. ALUOp0 и ALUOp1 задают операцию АЛУ, MemWr разрешает запись в RAM, RegLoad — запись в аккумулятор, JumpUncond и JumpCond управляют переходами, а IXLoad, IXInc и UseIX командуют индексным регистром.

Главное свойство: Decoder — комбинационная схема, у неё нет ни тактов, ни памяти. Сигналы зависят только от текущего байта Instr и меняются сразу за ним. Пример: байт 0001 0010 распадается на opcode 1 (ADD) и операнд 2; декодер выставит ALUOp = 00 (сложение) и RegLoad = 1, а операнд проследует мимо декодера — в АЛУ.

Нюанс: коды 0 (NOP) и 15 (HLT) дают нули на всех девяти выходах. Разница в последствиях: NOP — «ничего не делать один такт», программа идёт дальше, а HLT — команда останова: схема замирает, пока не сработает Reset.

Примеры (байт команды → сигналы)

Instr (bin / dec)OpcodeКомандаКлючевые сигналы
0001 0010 (18)1ADD 2ALUOp = 00 (сложение), RegLoad = 1
0110 0101 (101)6STA 5MemWr = 1 — запись аккумулятора в RAM
0111 0100 (116)7JMP 4JumpUncond = 1 — прыжок счётчика команд на 4
1001 0000 (144)9LDX 0IXLoad = 1 — загрузка индексного регистра

Во всех четырёх случаях младшие биты (операнд) проходят мимо декодера: он смотрит только на старшую четвёрку.

Применение

На уровне 15 дешифрация разбирается по косточкам, на уровне 17 Decoder собирается из вентилей вручную, а с уровня 18 работает готовым блоком внутри полного процессора. Это «переводчик» с языка команд (ADD, STA, JMP и остальных) на язык управляющих сигналов, который понимает остальная схема.

Конкретное подключение в CPU: ALUOp0 и ALUOp1 — к селектору операции ALU8; RegLoad — к WE аккумулятора; MemWr — к WE RAM; JumpUncond и JumpCond вместе с флагом нуля — к Load счётчика команд; IXLoad, IXInc и UseIX — к индексному регистру и мультиплексору адреса.

Собери это сам →

Смежные компоненты

Статьи по теме

Частые вопросы

Что делает дешифратор команд?

Превращает код операции в управляющие сигналы: какие регистры читать, куда писать и что делать АЛУ.

Почему Decoder не нужно тактировать?

Он комбинационный: не хранит состояния, поэтому выходы честно повторяют текущий байт инструкции. Тактирование нужно только элементам с памятью.

Какие сигналы отвечают за индексный регистр?

IXLoad — загрузка (команда LDX), IXInc — инкремент (INX), UseIX — косвенная адресация: читать или писать по адресу из IX (LDAX, STAX).