如何将RISC-V SYSTEM指令实现为陷阱?

Car*_*ong 5 exception-handling interrupt cpu-architecture riscv

我目前正在研究RISC-V的规范,规范版本为2.2,Privileged Architecture版本为1.10.在RISC-V规范的第2章中,提到"......虽然简单的实现可能会覆盖8个SCALL/SBREAK/CSRR*指令,并且只有一条SYSTEM硬件指令总是陷阱......"

但是,当我查看特权规范时,该指令MRET也是一条SYSTEM指令,需要从陷阱返回.现在我很困惑需要多少机器级ISA:是否可以省略所有M级CSR并使用软件处理程序来处理任何SYSTEM指令,如规范中所述?如果是这样,如何传递返回地址和陷阱等信息?它们是通过常规寄存器x1-x31完成的

或者,如果我的目标是仅具有M级特权的简单嵌入式核心,那么仅仅实现以下M级CSR就足够了吗?

mvendorid
marchid
mimpid
mhartid
misa
mscratch
mepc
mcause
Run Code Online (Sandbox Code Playgroud)

最后,这些CSR可以省略多少?

Lur*_*rry 4

  1. ECALL/EBREAK 指令无论如何都是陷阱。CSR 指令需要仔细解析,以确保它们指定以允许的模式访问现有寄存器,这听起来像是您最喜欢的稀疏矩阵的工作,无论是 PLA 还是 if/then。

  2. 您可以模拟所有 SYSTEM 指令,但是,正如您所看到的,您需要能够访问不属于普通 ISA 的硬件内部的信息。这意味着您需要添加“指令扩展”。

  3. 我还建议使 SYSTEM 指令成为原子指令,这意味着在每个模拟指令中应该屏蔽或避免异常。

  4. 由于我不是一个非常容易信任的人,因此我将创建一种新模式,该模式将启用指令扩展,例如,允许您直接从硬件读取异常地址,并从内存的受保护区域获取指令。中断将自动被禁用。通过分支到 epc+4 或非法指令处理程序可以退出该模式。为了安全起见,即使在 M 模式下,我也不希望使用 RISC-V 规范之外的任何内容。

  5. 根据我的经验,最好说“我做了所有事情”,而不是向每个客户解释,或者更糟糕的是,让竞争对手向您的客户解释您不做的事情。但也许更了解企业社会责任的人可以提供帮助;这不是我做的事。