2关于Risc-V-Privileged-Spec-v1.7的问题

时间:2015-06-27 17:32:09

标签: riscv

  1. 第16页,表3.1: mcpuid中的基本字段:RV32I RV32E RV64I RV128I

    • 什么是“RV32E”?
    • 是否有“E”分机?
  2. ECALL(第30页)没有说明电脑的行为。 虽然mepc(第28页)和mbadaddr(第29页)声称“mepc将指向指令的开头”。我认为ECALL应该将mepc设置为导致指令的末尾,以便ERET转到下一条指令。是吗?

2 个答案:

答案 0 :(得分:4)

正如CliffordVienna所回答的,RV32E(" embedded")是一个新的基础ISA,它使用16个寄存器并使一些计数器寄存器可选。

建议实现RV32E核心,因为它可能是核心大小的不必要的过度优化,这限制了您使用大量RV * I代码的能力。但是如果不需要性能,并且真的需要核心稍微小一些,并且核心没有连接到一个主导区域/电源的内存层次结构,而且你愿意处理工具链问题...然后可能RV32E核心是合适的。

ECALL被视为异常,并将根据当前权限级别将PC重定向到相应的陷阱处理程序。 MEPC将被设置为ecall指令的当前PC。

您可以通过分析Berkeley RV64G 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年6月27日,关于特权规范的代码仍然不稳定。

如果我们看看Spike如何处理eret(例如#34; s {":https://github.com/riscv/riscv-isa-sim/blob/master/riscv/insns/sret.h),我们必须要小心一点。 PC被设置为" mepc",但它是陷阱处理程序将PC推进4的工作。我们可以看到,例如,通过某些代理内核完成这里的处理函数(https://github.com/riscv/riscv-pk/blob/master/pk/handlers.c)。

答案 1 :(得分:1)

可在此处找到RV32E(嵌入式)规范的草稿(通过isa-dev mailing list):

https://lists.riscv.org/lists/arc/isa-dev/2015-06/msg00022/rv32e.pdf

它是RV32I,有16个而不是32个寄存器,没有计数器指令。