3.8.4 技术特征

3.8.4 技术特征

3.8.4.1 权限模式

RISC-V指令集架构必须工作在一种确定的权限模式下。根据RISC-V权限规范,目前共有以下4种权限模式:机器模式(machine,M模式)、用户模式(user,U模式)、管理模式(supervisor,S模式)、监视模式(hypervisor,H模式)。其中,H模式暂时处于草案状态,因此通常设计时仅考虑前3种特权模式。RISC-V通过CSR来控制当前的权限模式。通过设置CSR中特定2位的值,可以切换到不同的模式。RISC-V权限模式见表3-7。

表3-7 RISC-V权限模式

(1)机器模式(M模式)。机器模式是RISC-V指令集架构中最高级别的权限模式,具有执行任何机器操作的权限,也是在系统设计中必须被实现的一个工作模式。相比之下,U/S/H等其他权限模式都是可选的,不同的系统可以根据运行环境和实际需要,决定是否支持实现某一级别的权限模式。

(2)用户模式(U模式)。用户模式是RISC-V特权系统中最低级别的权限模式,又被称为“非特权模式”。它通常用于执行来自用户等外部环境的不可信操作,通过对其操作范围的限制来保护系统内的各种资源不受侵害。

(3)管理模式(S模式)。管理模式具有比用户级更高的操作权限,可用于操作一台机器中的敏感资源。RISC-V管理模式需要与机器模式和用户模式共同实现,因此,不能出现系统中只存在S模式而不存在U模式的情况。

(4)监视模式(H模式)。监视模式可用于管理跨机器的资源,或者将机器整体作为组件承担更高级别的任务。如H模式可以协助实现一台机器系统的虚拟化操作。

3.8.4.2 寄存器组织形式

RISC-V指令集架构具有32位和64位,其寄存器宽度也分别是32位和64位。RISC-V的基本整数指令集中包含32个整数寄存器x0~x31以及一个程序计数器保存当前指令的地址。基本RISC-VISA具有32位固定长度指令,并且必须在32位边界对齐。然而,标准RISC-V编码模式被设计成支持变长指令的扩展,在这个扩展中,每条指令长度可以是16位指令包裹(parcel)长度的整数倍,并且这些指令包裹必须在16位边界对齐。

基本RISC-VISA具有一个小端存储器系统,但是非标准变种可以提供大端或双端存储器系统。指令被保存在存储器中,每个16位包裹以实现的端字节顺序,被保存到一个存储器半字中。包含一条指令的包裹,被保存到递增的半字地址,其中最低寻址的包裹保存着指令规范中最低位的二进制值,也就是说,指令总是按照一系列包裹的小端顺序保存,而不管存储器的端字节顺序。

3.8.4.3 中断和异常管理

1)RISC-V异常处理

RISC-V定义的三种模式(U/S/M),均可发生异常。但是只有特权模式(S/M)才能处理异常。当处理器的程序在正常执行当中发生了异常,处理器就会强行跳转到一个指定的PC地址。这个过程定义为“陷阱(trap)”。

2)RISC-V中断类型

RISC-V架构一共定义了4种中断类型:

(1)外部中断。指处理器核的一个单比特输入信号,如果要支持更多的外部中断,就需要在这个单比特信号的基础之上引入中断控制器。

(2)计时器中断。RISC-V架构定义了两个64位的寄存器mtime与mtimecmp。mtime寄存器里的值以恒定频率递增,当mtime的值大于等于mtimecmp的值时,就会产生计时器中断。

(3)软件中断。指软件自己触发的中断。

(4)调试中断。用于调试器实现调试功能。

3)RISC-V中断屏蔽与等待

RISC-V架构中MIE寄存器可以使能或屏蔽外部中断、计时器中断、软件中断,但是调试中断无法屏蔽。RISC-V架构中MIP寄存器可以用来查询:外部中断、计时器中断、软件中断,是否处于等待状态。

RISC-V架构在硬件上没有中断嵌套机制,需要在软件上来实现。因为在进入异常之后,mstatus寄存器的MIE全局中断使能位会被置0(也即中断被全局关闭,再也无法响应新的中断)。如果硬要有中断嵌套的机制,就需要从软件角度在异常服务程序中将MIE全局中断使能位打开,以及嵌套保存上下文。这一设计让处理器硬件设计变得简单,但是软件的设计就变得复杂。