如何将RISC-V SYSTEM指令实现为陷阱?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将RISC-V SYSTEM指令实现为陷阱?相关的知识,希望对你有一定的参考价值。
我目前正在研究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可以省略多少?
答案
- 无论如何,ECALL / EBREAK指令都是陷阱。需要仔细解析CSR指令,以确保它们指定在允许的模式下访问的现有寄存器,这听起来像是您喜欢的稀疏矩阵的工作,无论是PLA还是if / then。
- 您可以模拟所有SYSTEM指令,但是,如您所见,您需要能够访问不属于普通ISA的硬件内部的信息。这意味着您需要添加“指令扩展”。
- 我还建议使SYSTEM指令成为原子,这意味着应该在每个模拟指令中屏蔽或避免异常。
- 由于我不是一个非常信任的人,我将创建一个新模式,该模式将启用指令扩展,允许您直接从硬件读取异常地址,例如,从受保护的内存区域获取指令。中断将自动禁用。该模式将通过分支到epc + 4或非法指令处理程序退出。即使在M模式下,我也不希望有任何RISC-V规格以外的东西,只是为了安全起见。
- 根据我的经验,最好说“我做的一切”,而不是向每个客户解释,或者更糟糕的是,让竞争对手向您的客户解释,您不做的是什么。但也许更了解CSR的人可以提供帮助;这不是我做的事情。
以上是关于如何将RISC-V SYSTEM指令实现为陷阱?的主要内容,如果未能解决你的问题,请参考以下文章
Risc-V 前景如何?会形成与 x86ARM 三分天下的局面吗?