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

问题描述 投票:5回答:1

我目前正在研究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

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

exception-handling interrupt cpu-architecture riscv
1个回答
2
投票
  1. 无论如何,ECALL / EBREAK指令都是陷阱。需要仔细解析CSR指令,以确保它们指定在允许的模式下访问的现有寄存器,这听起来像是您喜欢的稀疏矩阵的工作,无论是PLA还是if / then。
  2. 您可以模拟所有SYSTEM指令,但是,如您所见,您需要能够访问不属于普通ISA的硬件内部的信息。这意味着您需要添加“指令扩展”。
  3. 我还建议使SYSTEM指令成为原子,这意味着应该在每个模拟指令中屏蔽或避免异常。
  4. 由于我不是一个非常信任的人,我将创建一个新模式,该模式将启用指令扩展,允许您直接从硬件读取异常地址,例如,从受保护的内存区域获取指令。中断将自动禁用。该模式将通过分支到epc + 4或非法指令处理程序退出。即使在M模式下,我也不希望有任何RISC-V规格以外的东西,只是为了安全起见。
  5. 根据我的经验,最好说“我做的一切”,而不是向每个客户解释,或者更糟糕的是,让竞争对手向您的客户解释,您不做的是什么。但也许更了解CSR的人可以提供帮助;这不是我做的事情。
© www.soinside.com 2019 - 2024. All rights reserved.