Конкретный случай опасности данных (когда инструкция R-типа появляется после двух последовательных LW)

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

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

Я использую конвейер, и мой dataPath выглядит примерно так: https://raw.githubusercontent.com/mhyousefi/MIPS-pipeline-processor/master/docs/MIPS_diagram.png У меня 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 ответ

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

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

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

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

Другие вопросы по тегам