我目前正在研究RISC-V的规范,规范版本为2.2,Privileged Architecture版本为1.10。在RISC-V规范的第2章中,提到" ...尽管一个简单的实现可能会覆盖8个SCALL / SBREAK / CSRR *指令,并且只有一条SYSTEM硬件指令总是陷阱......&#34 ;
但是,当我查看特权规范时,指令MRET
也是一条SYSTEM指令,需要从陷阱返回。现在我很困惑需要多少机器级ISA:是否可以省略所有M级CSR并使用软件处理程序来处理任何SYSTEM指令,如规范中所述?如果是这样,如何传递返回地址和陷阱等信息?它们是通过常规寄存器x1-x31
或者,如果我的目标是只有M级特权的简单嵌入式核心,那么是否足以实现以下M级CSR?
mvendorid
marchid
mimpid
mhartid
misa
mscratch
mepc
mcause
最后,这些CSR可以省略多少?
答案 0 :(得分:2)
ECALL / EBREAK指令无论如何都是陷阱。需要仔细解析CSR指令,以确保它们指定在允许模式下访问的现有寄存器,这听起来像是您最喜欢的稀疏矩阵的工作,无论是PLA还是if / then。
您可以模拟所有SYSTEM指令,但是,如您所见,您需要能够访问不属于普通ISA的硬件内的信息。这意味着您需要添加“指令扩展名”。
我还建议将SYSTEM指令设为原子,这意味着应在每个模拟指令中屏蔽或避免异常。
由于我不是一个非常信任的人,我会创建一个新模式,启用指令扩展,允许您直接从硬件读取异常地址,例如,从受保护的方式获取指令记忆区。中断将自动禁用。该模式将通过分支到epc + 4或非法指令处理程序退出。即使在M模式下,我也不希望有任何RISC-V规格以外的东西,只是为了安全。
根据我的经验,最好说“我做的一切”,而不是向每位客户解释,或者更糟糕的是让竞争对手向您的客户解释您不做的事情。但也许更了解CSR的人可以提供帮助;这不是我做的事情。