Путь данных на 32-разрядном процессоре MIPS с одним циклом - PullRequest
0 голосов
/ 19 мая 2019

Я делаю домашнее задание, которое мне нужно, чтобы ответить на значения сигналов в отмеченных A, B, C, D, E на пути данных ниже, который является 32-разрядным процессором MIPS с одним циклом, однако у меня есть некоторые вопросы относительно к D и E,

Предположим, что были выполнены первые четыре строки и что процессор в настоящее время выполняет инструкцию lw. Первый addi Инструкция находится по адресу памяти 0x00040210

addi $t0,$zero,0x3ff0
addi $t0,$t0,16
sw $t0,-8($t0)
addi $t0,$t0,12
lw $s2,-20($t0)

Для D:

Таким образом, это путь после счетчика программ, и мы уже выполнили четыре инструкции, первые инструкции начинаются с адреса 0x00040210, ведущего к:

address 0x00040210: addi $t0,$zero,0x3ff0
address 0x00040214: addi $t0,$t0,16
address 0x00040218: sw $t0,-8($t0)
address ???: addi $t0,$t0,12
address ???: lw $s2,-20($t0)

Я застрял в адресе, отмеченном вопросом, как мне отсчитать адрес оттуда?

Для E:

Я не уверен, как мне поступить там, надеюсь, кто-то может меня просветить?

enter image description here

1 Ответ

1 голос
/ 19 мая 2019

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».

...