Page 16, Таблица 3.1: Базовое поле в mcpuid: RV32I RV32E RV64I RV128I2 Вопросы о Risc-V-Spec привилегированного-v1.7
- Что такое "RV32E"?
- Есть ли расширение «E»?
ECALL (стр. 30) ничего не говорит о поведении ПК. Хотя mepc (стр. 28) и mbadaddr (стр. 29) утверждают, что «mepc будет указывать на начало инструкции». Я думаю, что ECALL должен установить mepc до конца вызывающей команды, чтобы ERET перешла к следующей инструкции. Это правильно?
ответ
Как указано CliffordVienna, RV32E («встроенный») представляет собой новую базовую ISA, которая использует 16 регистров и делает некоторые из регистров счетчиков необязательными.
Я бы не рекомендую реализовать ядро RV32E, так как это, вероятно, ненужная чрезмерная оптимизация в размере ядра, что ограничивает вашу способность использовать большое количество кода RV * I. Но если производительность не нужна, и вам нужно действительно, необходимо, чтобы ядро было чуть меньше, а ядро не подключено к иерархии памяти, которая в любом случае доминировала бы в области/мощности, и вы были готовы иметь дело с инструментом- Цепные головные боли ... тогда, возможно, ядро RV32E подходит.
ECALL обрабатывается как исключение и перенаправляет ПК на соответствующий обработчик ловушки на основе текущего уровня привилегий. MEPC будет установлен на текущий ПК инструкции ecall.
Вы можете это проверить, проанализировав Rocket64 Rocket Ricoh Berkeley Rocket (https://github.com/ucb-bar/rocket/blob/master/src/main/scala/csr.scala) или просмотрев симулятор Spike ISA (начало здесь: https://github.com/riscv/riscv-isa-sim/blob/master/riscv/insns/scall.h). Осторожно: от 2015 года 27 июня код все еще находится в движении относительно Привилегированного Spec.
Если мы посмотрим, как Spike обрабатывает eret («sret»: https://github.com/riscv/riscv-isa-sim/blob/master/riscv/insns/sret.h), например, мы должны быть немного осторожны. ПК настроен на «mepc», но это задача обработчика ловушки для продвижения ПК на 4. Мы можем видеть, что это сделано, например, прокси-ядром в некоторых функциях обработчика здесь (https://github.com/riscv/riscv-pk/blob/master/pk/handlers.c).
Черновик RV32E() вложенной спецификации можно найти здесь (через isa-dev mailing list):
https://lists.riscv.org/lists/arc/isa-dev/2015-06/msg00022/rv32e.pdf
Это RV32I с 16 вместо 32 регистров и без инструкций счетчика.