Восстановление ошибочного прогноза ветвления в RIS C -V - PullRequest
0 голосов
/ 27 мая 2020

Сейчас я пытаюсь реализовать конвейерный ЦП на основе RV32I ISA.

Мой ЦП имеет алгоритм переименования для опасностей данных и предсказания ветвей для опасностей управления.

Это мой пример кода для алгоритм переименования и прогноз ветвления:

addi x1, x0, 25     
addi x2, x0, 50     

bne x1, x2, LABLE

addi x1, x0, 200
addi x2, x0, 300

LABLE:
addi x1, x1, 1  
addi x2, x2, 1

Позвольте мне объяснить свой процессор.

В строке 1, «addi x1, x0, 25», тег x1 равен 15.

В строке 2, «addi x2, x0, 50», тег x2 равен 14.

В строке 3, «bne x1, x2, LABLE», результат предсказания не берется. Итак, инструкция в строке 4 выполняется.

В строке 4, «addi x1, x0, 200», тег x1 равен 13. (Эта инструкция не должна выполняться в истинном следовании)

В строке 5, «addi x2, x0, 300», тег x2 равен 12. (Эта инструкция не должна выполняться в истинном следовании)

В строках 6 и 7 эти инструкции должны читать x1, x2 с истинным тегом - 15, 14, но в этом случае считываемые теги - это 13, 12. Итак, ЦП выходит из строя.

Итак, когда "bne" выполняется на этапе выполнения, как можно он восстанавливает теги x1 и x2 до 15, 14?

На какие книги или источники мне следует обратиться для решения этой проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...