Дешифратор команд (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 так же: он не считает и не хранит, зато читает код операции (старшие биты 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) | 1 | ADD 2 | ALUOp = 00 (сложение), RegLoad = 1 |
| 0110 0101 (101) | 6 | STA 5 | MemWr = 1 — запись аккумулятора в RAM |
| 0111 0100 (116) | 7 | JMP 4 | JumpUncond = 1 — прыжок счётчика команд на 4 |
| 1001 0000 (144) | 9 | LDX 0 | IXLoad = 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).