конкретный случай опасности данных (когда инструкция R-типа появляется после двух последовательных LW) - PullRequest
0 голосов
/ 06 июня 2018

Я проектирую MIPS-подобный процессор с Verilog, и теперь я работаю с опасностями данных.У меня есть следующие инструкции:

Ins[0] = LW r1 r0(100)
Ins[1] = LW r2 r0(101)
Ins[2] = ADD r3 r2 r1

Я использую конвейер, и мой dataPath выглядит примерно так: enter image description here У меня 5 ступеней, с 4 буферами-защелками, разделяющими их.

Проблема в том, что когда инструкция ADD достигает стадии 3 (где ALU должен вычислять r1 + r2), инструкция 1 (второй LW) находится на стадии 4 и еще не прочитала адрес памяти r0 + 101,поэтому я должен остановить один цикл, и после этого Ins1 достигнет последней стадии.

В этой ситуации первый LW завершил свою работу, и новое значение r1 отсутствует в dataPath, но мне нужно передать этозначение для входа B ALU.

(Это называется пересылкой данных, потому что когда третья инструкция находилась на этапе 2, значение r1 не было готово, и я должен переслать его с более поздних этапов (синие провода, которые приходятиз последнего MUX и перейдите к ALU MUX), но из-за остановки второго LW у меня нет значения r1.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 07 июня 2018

Я сделал ошибку.Моя ошибка в том, что когда за инструкцией LDM следует RType, я задерживаю процессор, когда Rtype находится на стадии 3, а LDM на стадии 4.но вместо этого я должен обнаружить зависимость за один такт до этого, когда RType находится в stage2 (декодирование), а LDM находится в stage3 (exec).

В этой ситуации я должен остановить конвейер.

Таким образом, в результате, когда Rtype находится на этапе 2, второй LDM находится на этапе 3, а первый LDM находится на этапе 4, я обнаруживаю зависимость и выполняю конвейер одного цикла.

Таким образом, на следующих тактах Rtype все еще находится вstage2, второй LDM на stage4 и первый LDM выполняет обратную запись в регистр и, таким образом, поскольку RType все еще находится на stage2, он может читать данные, записанные в файл регистров.(Обратная запись завершается в нужное время. В posedge первый аргумент RType готов.)

...