D:
Имеется сумматор (над буквой "D" на вашей схеме), добавляющий к ПК константу 4.
Это означает, чтострока «D» всегда будет содержать значение PC+4
- даже если текущая инструкция является командой перехода или перехода.
И если инструкция не является командой перехода или перехода, подается строка «D»обратно через два мультиплексора в левом верхнем углу схемы на вход регистра ПК.
Это означает, что следующее значение PC
будет старым значением PC+4
, если только не будет скачок иливыполняется команда перехода.
Кстати:
ЦП в вашей схеме не работает как настоящий ЦП MIPS (как они были обнаружены в маршрутизаторах WLAN 10 лет назад).
Если я правильно понимаю схему, есть только две инструкции, которые могут выполнить переход / переход: вариант j
и один из beq
(или beqz
) (оба варианта не используют интервалы задержки).
Используя такой процессор, вы не можете делать субобычные вызовы (вызовы функций), потому что нет инструкции, «возвращающейся назад» к вызывающей функции.
E:
«E» - это выход некоторого мультиплексора.Если вы не выполняете команду «MemToReg» (я предполагаю, что lw
подразумевается), сигнал «B» подается через мультиплексор.
Другими словами: если текущая инструкция не является lw
, «E» и «B» равны.
Если инструкция lw
, «E» - это значение, хранящееся в ОЗУ по адресу «B».
РЕДАКТИРОВАТЬ
Для E, все еще не уверен, как получить этот результат, хотя
Это действительно было бы программирование, а не вопрос электроники.Давайте посмотрим на вашу программу:
addi $t0,$zero,0x3ff0
Теперь t0
содержит 0x3FF0
addi $t0,$t0,16
Теперь t0
содержит 0x4000
sw $t0,-8($t0)
Значение 0x4000 записывается в адрес ОЗУ 0x3FF8 (Примечание: 0x4000-8 = 0x3FF8)
addi $t0,$t0,12
Теперь t0
содержит 0x400C
lw $s2,-20($t0)
Словочтение с адреса 0x3FF8 (Примечание: 0x400C-20 = 0x3FF8).
Две инструкции выше, значение 0x4000 записано в адрес 0x3FF8.
По этой причине значение 0x4000 читается изБАРАН.И поэтому значение 0x4000 подается через мультиплексор в линию «E».