SFC2020
SFC2020 管理员

482枚
铜币

581点
威望

0个
银元

RISC-V的特权级

2020-07-23 16:45

2490

RISC-V定义了四种特权级,不同特权级对处理器资源的访问权限不同,各个特权级有各自独立的CSR寄存器(control and status register)。四种特权级如下

图片:1.png



特权级提供了不同的软件栈之间的保护,试图执行当前特权模式不允许的操作,将导致一个软件异常。
● 机器模式是访问权限最大的特权级,也是所有RISC-V架构都必须实现的特权级,其他模式是硬件设计可选的特权级。
● 用户模式(U-mode)是访问权限最小的特权级,多任务操作系统中的应用程序可以运行在用户模式,而操作系统本身可以运行在管理员模式(S-mode)或者机器模式。
● Hypervisor 模式(H-mode)可以用于支持虚拟机监视器。
M-mode模式是RISC-V处理器必须支持的模式,该模式是唯一可以不受限制地访问所有资源的模式,最简单的 RISC-V 实现可以仅仅支持M-mode。对于事务性应用的RISC-V通常还会实现用户模(U-mode),这样不同级别的程序分别运行在M-MODE和U-mode模式,以实现对系统资源的保护,防止应用程序导致的系统崩溃。
RISC-V除了存储器空间外,还有一个CSR空间,CSR的地址编码是12位的(csr[11:0]);CSR寄存器用于配置或记录处理器的一些运行状态,CSR寄存器是处理器核内部的寄存器;在4096个CSR寄存器中目前绝大多数都未定义。CSR地址的高4位(csr[11:8])用于设置不同特权级对CSR空间的读写访问权限:
● 最高2位地址(csr[11:10])表示这个寄存器的读写特性:00、01或者10表示可以读、也可以写,而11表示只读。
● 后面2位地址(csr[9:8])表示能够访问这个CSR所需要的最低特权级,00表示所有权限都可以访问,01表示至少要管理员权限,10表示Hypervisor和M-mode才能访问,11表示只有M-mode才能访问。
● CSR寄存器的读写采用专用CSR指令,包括CSRRW、CSRRS、CSRRC、CSRRWI、CSRRSI以及CSRRCI六种指令。
试图访问一个不存在的CSR、访问一个没有相应特权的CSR或者写一个只读寄存器,都将产生一个非法指令异常。当可读/写的寄存器的某些位是只读的,此时写这些只读位将被忽略。
 
CSR的不同空间位置对应不同的权限、读写要求。
以下是具体的六条CSR操作指令介绍,其中rd/rs1是寄存器组x0~x31中的任意一个:
1)CSRRW指令
csrrw rd,csr,rs1  将csr索引的CSR寄存器读出,回写到rd寄存器中,然后将rs1寄存器的值写入csr索引的CSR寄存器。例如 csrrw x3,mstatus,x8
2)CSRRS指令
csrrs rd,csr,rs1  将csr索引的CSR寄存器读出,回写到rd中,然后以rs1寄存器的各位值为参考,如果rs1对应位为1时,将csr索引的CSR寄存器的对应位置1,如果rs1对应位为0时,则csr索引的CSR寄存器的对应位保持原值不变。
3)CSRRC指令
csrrc rd,csr,rs1  将csr索引的CSR寄存器读出,回写到rd中,然后以rs1寄存器的各位值为参考,如果rs1对应位为1时,将csr索引的CSR寄存器的对应位置0,如果rs1对应位为0时,则csr索引的CSR寄存器的对应位保持原值不变。
4)CSRRWI指令
csrrw rd,csr,imm[4:0]  将csr索引的CSR寄存器读出,回写到rd中,然后将imm[4:0]高位补0扩展为32位后,写入csr索引的CSR寄存器。
5)CSRRSI指令
csrrsi rd,csr,imm[4:0]  将csr索引的CSR寄存器读出,回写到rd中,然后以imm[4:0]的各位值为参考,如果imm[4:0]对应位为1时,将csr索引的CSR寄存器的对应位置1,如果imm[4:0]对应位为0时,则csr索引的CSR寄存器的对应位保持原值不变。
6)CSRRCI指令
csrrsi rd,csr,imm[4:0]  将csr索引的CSR寄存器读出,回写到rd中,然后以imm[4:0]的各位值为参考,如果imm[4:0]对应位为1时,将csr索引的CSR寄存器的对应位置0,如果imm[4:0]对应位为0时,则csr索引的CSR寄存器的对应位保持原值不变
 
本文源自 scuzy RiscV与IC设计 ,转载目的在于传递更多信息,版权归原作者所有。


返回顶部