Уровень 17: Анатомия дешифратора

Задание

Соберите логику распознавания 3 опкодов (ADD, STA, JMP) для дешифратора. На выходах LED-индикаторы покажут, какая линия активна.

Дешифратор команд превращает код инструкции в управляющие сигналы. На холсте уже есть КАРКАС: - Splitter (pre:spl) — разбирает входную шину Instr на 8 битов. - 4 инвертора NOT: ~Bit0 (pre:not0), ~Bit1 (pre:not1), ~Bit2 (pre:not2), ~Bit3 (pre:not3).

Решение

Вход Instr — это байт. Биты 4-7 содержат КОМАНДУ (opcode): - ADD = 0001 (opcode 1, hex 0x10). - STA = 0110 (opcode 6, hex 0x60) — запись в память. - JMP = 0111 (opcode 7, hex 0x70) — безусловный переход.

Ваша задача: добавить AND-элементы, чтобы «узнавать» эти коды. Для каждого опкода нужна цепочка из ТРЁХ AND (один AND принимает только 2 входа, а нужно проверить 4 бита).

═══════ STA (opcode 6 = 0110) → выход MemWr ═══════ Нужно, чтобы срабатывало когда: Bit0=0, Bit1=1, Bit2=1, Bit3=0.

AND#1: вход A = pre:not0 (~Bit0), вход B = Splitter.Bit5 (Bit1 опкода). AND#2: вход A = выход AND#1, вход B = Splitter.Bit6 (Bit2 опкода). AND#3: вход A = выход AND#2, вход B = pre:not3 (~Bit3). Выход AND#3 подключите к выходу MemWr.

═══════ JMP (opcode 7 = 0111) → выход JumpUncond ═══════ Нужно, чтобы срабатывало когда: Bit0=1, Bit1=1, Bit2=1, Bit3=0.

AND#4: вход A = Splitter.Bit4 (Bit0 опкода), вход B = Splitter.Bit5 (Bit1). AND#5: вход A = выход AND#4, вход B = Splitter.Bit6 (Bit2). AND#6: вход A = выход AND#5, вход B = pre:not3 (~Bit3). Выход AND#6 подключите к выходу JumpUncond.

═══════ ADD (opcode 1 = 0001) ═══════ Все выходы должны быть 0 — просто ничего не подключайте к ALUOp0, ALUOp1, JumpCond. Неподключённый Output всегда читается как 0.