mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
Исправление микроархитектурной реализации jalr
Предыдущая реализация не выполняла требование спецификации по обнулению младшего бита суммы, используемой в качестве нового значения программного счетчика. Подробнее см. RISC-V Unprivileged ISA V20191213 стр. 21 Closes #12
This commit is contained in:
Binary file not shown.
Before Width: | Height: | Size: 289 KiB After Width: | Height: | Size: 292 KiB |
Binary file not shown.
Before Width: | Height: | Size: 462 KiB After Width: | Height: | Size: 464 KiB |
Binary file not shown.
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 468 KiB |
@@ -29,7 +29,7 @@
|
||||
|
||||
Обратите внимание на константу `imm_U`. В отличие от всех остальных констант, она не знакорасширяется, вместо этого к ней приклеивается справа 12 нулевых бит.
|
||||
|
||||
Программный счетчик (`PC`) теперь также изменяется более сложным образом. Поскольку появился еще один вид безусловного перехода (`jalr`), программный счетчик может не просто увеличиться на значение константы из инструкции, но и получить совершенно новое значение в виде суммы константы и значения из регистрового файла (см. на самый левый мультиплексор схемы).
|
||||
Программный счетчик (`PC`) теперь также изменяется более сложным образом. Поскольку появился еще один вид безусловного перехода (`jalr`), программный счетчик может не просто увеличиться на значение константы из инструкции, но и получить совершенно новое значение в виде суммы константы и значения из регистрового файла (см. на самый левый мультиплексор схемы). Обратите внимание, что младший бит этой суммы должен быть обнулен — таково требование спецификации.
|
||||
|
||||
Поскольку обращение во внешнюю память требует времени, необходимо останавливать программный счетчик, чтобы до конца обращения в память не начались исполняться последующие инструкции. Для этого у программного счетчика появился управляющий сигнал `stall_i`. Программный счетчик может меняться только когда этот сигнал равен нулю (иными словами, инверсия этого сигнала является сигналом `enable` для регистра `PC`).
|
||||
|
||||
|
Reference in New Issue
Block a user