Могу ли я реализовать целевой буфер Branch в двухступенчатой ​​конвейерной архитектуре RISC? - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь реализовать BTB в низкоуровневом микроконтроллере, таком как PIC16.Я не знаю, возможно ли это или нет.Так хотел ваше предложение.

Спасибо.

1 Ответ

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

Базовый BTB довольно прост и эквивалентен

BTBEntry be = BTB[curAddr & BTBBitMask];
nextFetch = be.addr;

, который реализован в виде электроники, которая берет младшие биты curAddr, передает их в память BTB и выдает следующий адрес.

И когда ветвь разрешается, результат записывается обратно в BTB.

Поиск может быть выполнен параллельно с извлечением памяти и должен быть быстрее, поскольку должны быть выполнены дополнительные шаги.

struct BTBEntry {
  int addr;
  int curAddr; // upper address bits.
}

Чтобы не просто случайно перепрыгнуть в программе из-за сохраненного адреса, не соответствующего curAddr, нам также нужно проверить, является ли адрес, который мы ищем, для правильной ветви.

if ((curAddr & ~BTBBitMask) == be.curAddr)
  nextFetch = be.addr; // found in the BTB
else
  nextFetch = curAddr + instrutionSize; // not found, take next instruction

Так что это может быть сделано, если BTB достаточно мал и общее время используется меньше, чем выборка инструкции.Но эффект может быть не таким большим, как вы могли бы хотеть.

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