跳转至

特权模式与控制状态寄存器

处理器模式

昆明湖 V2R2 支持 RISC-V 特权架构手册规定的以下 6 种特权模式。

昆明湖 V2R2 支持的特权模式列表
名称 缩写 PRV V
机器模式(Machine mode) M 3 0
监管模式(Supervisor mode) HS/S 1 0
用户模式(User mode) U 0 0
虚拟监管模式(Virtual supervisor mode) VS 1 1
虚拟用户模式(Virtual user mode) VU 0 1
调试模式(Debug mode) D

昆明湖 V2R2 初始化时处在 M 模式。对于一般场景,各模式权限高低为 M > S > U;对于虚拟化场景,各模式权限高低为 M > HS > VS > VU。

机器模式

机器模式(Machine mode,M 模式)由机器级 ISA 规定,具有最高的权限。M 模式通常用于机器固件,具有以下特性:

  • M 模式下可以访问全部的 M、S、H、VS、U CSR,但不可访问部分调试模式 CSR。
  • M 模式通常以物理地址取指、访存,不进行虚拟地址翻译,但以下情况除外:
  • mstatus .MPRV = 1 时,加载(Load)和存储(Store)操作按 MPP 字段指定的模式进行虚拟地址翻译。
  • 使用 HLV、HLVX、HSV 等虚拟机加载存储指令时,按照 hstatus 字段的 SPVP 字段指定的虚拟模式(VS 或 VU)进行两阶段地址翻译。
  • M 模式取指、访存通常不进行 PMP 检查,默认情况下具有权限,但以下情况除外:
  • 加载、存储操作按照上述条件以其他特权模式执行时,按照其特权模式进行 PMP 检查。
  • 某个 PMP 项被锁定时,取指、访存操作均需检查此 PMP 项权限。

监管模式

监管模式(Supervisor mode,S 模式)由监管级 ISA 规定,虚拟化扩展将之扩充为为虚拟机管理扩展的监管模式(Hypervisor-extended supervisor mode,HS 模式)。S/HS 模式通常用于操作系统和虚拟机管理程序,其具有以下特性:

  • S/HS 模式下可访问 S、H、VS、U CSR,不可访问 M CSR 和调试模式 CSR。
  • S 模式的取指、访存通常需要根据 satp 寄存器进行虚拟地址翻译,但以下情况除外:
  • 使用 HLV、HLVX、HSV 等虚拟机加载存储指令时,按照 hstatus .SPVP 字段指定的虚拟模式(VS 或 VU)进行两阶段地址翻译。
  • S 模式总是需要进行 PMP 检查。
  • S 模式不可执行 M 模式特权指令。

用户模式

用户模式(User mode,U 模式)具有以下特性:

  • U 模式仅可访问非特权 CSR,主要包括浮点、向量和非特权计数器 CSR。
  • U 模式的取指、访存通常需要根据 satp 寄存器进行虚拟地址翻译,但以下情况除外:
  • hstatus .HU = 1 时,使用 HLV、HLVX、HSV 等虚拟机加载存储指令时,按照 hstatus .SPVP 字段指定的虚拟模式(VS 或 VU)进行两阶段地址翻译。
  • U 模式总是需要进行 PMP 检查。
  • U 模式通常不可执行特权指令,部分情况下存在例外。

虚拟监管模式

虚拟监管模式(Virtual supervisor mode,VS 模式)由虚拟化扩展引入,具有以下特性:

  • VS 模式下可访问 S、U CSR,但不可访问 M、H、VS CSR。
  • VS 模式下访问特定的 S 模式寄存器,会被重定向到对应的 VS 寄存器。
  • VS 模式下的取指、访存通常需要根据 hgatp、vsatp 寄存器进行两阶段地址翻译。
  • VS 模式总是需要进行 PMP 检查。
  • VS 模式不可执行 M 模式特权指令,亦不可执行 H 特权指令。

虚拟用户模式

虚拟用户模式(Virtual user mode,VU 模式)由虚拟化扩展引入,具有以下特性:

  • VU 模式仅可访问非特权 CSR,主要包括浮点、向量和非特权计数器 CSR。
  • VU 模式下的取指、访存通常需要根据 hgatp、vsatp 寄存器进行两阶段地址翻译。
  • VU 模式总是需要进行 PMP 检查。
  • VU 模式通常不可执行特权指令。

调试模式

调试模式(Debug mode,Debug 模式)由调试扩展(Debug 扩展)引入,其特性和细节请参考 调试

控制和状态寄存器(Control and Status Registers)

我们将以权限的不同对控制和状态寄存器(CSRs)进行分组介绍。

用户模式可读写的 CSRs

昆明湖 V2R2 中实现的权限为用户模式可读写(URW)的 RISC-V 的 CSRs 如下表所示:

昆明湖 V2R2 支持的 URW 的 CSRs 列表
名称 特权级 编号 描述 组别
fflags U 0x001 浮点异常累积状态寄存器 非特权浮点
frm U 0x002 浮点动态舍入模式寄存器 非特权浮点
fcsr U 0x003 浮点控制和状态寄存器 非特权浮点
vstart U 0x008 向量起始位置寄存器 非特权向量
vxsat U 0x009 定点溢出标志位寄存器 非特权向量
vxrm U 0x00A 定点舍入模式寄存器 非特权向量
vcsr U 0x00F 向量控制和状态寄存器 非特权向量
vl U 0xC20 向量长度寄存器 非特权向量
vtype U 0xC21 向量数据类型寄存器 非特权向量
vlenb U 0xC22 向量寄存器字节数寄存器 非特权向量

用户模式只读的 CSRs

昆明湖 V2R2 中实现的权限为用户模式只读(URO)的 RISC-V 的 CSRs 如下表所示:

昆明湖 V2R2 支持的 URO 的 CSRs 列表
名称 特权级 编号 描述 组别
cycle U 0xC00 用户模式周期计数器 用户模式计数器
time U 0xC01 用户模式时间计数器 用户模式计数器
instret U 0xC02 用户模式退休指令计数器 用户模式计数器
hpmcounter3 U 0xC03 用户模式计数器3 用户模式计数器
... ... ... ... ...
hpmcounter31 U 0xC1F 用户模式计数器31 用户模式计数器

监管模式可读写的 CSRs

昆明湖 V2R2 中实现的权限为监管模式可读写(SRW)的 RISC-V 的 CSRs 如下表所示:

昆明湖 V2R2 支持的 SRW 的 CSRs 列表
名称 特权级 编号 描述 组别
sstatus S 0x100 监管模式处理器状态寄存器 监管陷入设置
sie S 0x104 监管模式中断使能控制寄存器 监管陷入设置
stvec S 0x105 监管模式陷入向量基址寄存器 监管陷入设置
scounteren S 0x106 监管模式计数器使能控制寄存器 监管陷入设置
senvcfg S 0x10A 监管模式环境配置寄存器 监管环境配置
sscratch S 0x140 监管模式陷入临时数据备份寄存器 监管陷入处理
sepc S 0x141 监管模式陷入保留程序计数器 监管陷入处理
scause S 0x142 监管模式陷入事件原因寄存器 监管陷入处理
stval S 0x143 监管模式陷入事件向量寄存器 监管陷入处理
sip S 0x144 监管模式陷入事件等待状态寄存器 监管陷入处理
stimecmp S 0x14D 监管模式计时器中断比较值寄存器 监管陷入设置
siselect S 0x150 监管模式间接寄存器选择信号寄存器 监管间接访问寄存器
sireg S 0x151 监管模式间接寄存器别名寄存器 监管间接访问寄存器
stopei S 0x15C 监管模式顶部外部中断寄存器 监管中断
satp S 0x180 监管模式虚拟地址转换和保护寄存器 监管保护和转换
scontext S/Debug 0x5A8 监管模式上下文寄存器 调试寄存器
sbpctl S 0x5C0 推测状态分支预测控制寄存器 推测状态分支预测控制
spfctl S 0x5C1 推测状态预取控制寄存器 推测状态分支预测控制
slvpredctl S 0x5C2 推测状态LOAD违例预测控制寄存器 推测状态分支预测控制
smblockctl S 0x5C3 推测状态内存阻塞控制寄存器 推测状态分支预测控制
srnctl S 0x5C4 推测状态运行时控制寄存器 推测状态运行时控制

监管模式只读的 CSRs

昆明湖 V2R2 中实现的权限为监管模式只读(SRO)的 RISC-V 的 CSRs 如下表所示:

昆明湖 V2R2 支持的 SRO 的 CSRs 列表
名称 特权级 编号 描述 组别
stopi S 0xDB0 监管模式顶层中断 监管中断

虚拟监管模式可读写的 CSRs

昆明湖 V2R2 中实现的权限为虚拟监管模式可读写(HRW)的 RISC-V 的 CSRs 如下表所示:

昆明湖 V2R2 支持的 HRW 的 CSRs 列表
名称 特权级 编号 描述 组别
vsstatus VS 0x200 虚拟监管模式处理器状态寄存器 虚拟监管
vsie VS 0x204 虚拟监管模式中断使能控制寄存器 虚拟监管
vstvec VS 0x205 虚拟监管模式陷入向量基址寄存器 虚拟监管
vsscratch VS 0x240 虚拟监管模式陷入临时数据备份寄存器 虚拟监管
vsepc VS 0x241 虚拟监管模式陷入保留程序计数器 虚拟监管
vscause VS 0x242 虚拟监管模式陷入事件原因寄存器 虚拟监管
vstval VS 0x243 虚拟监管模式陷入事件向量寄存器 虚拟监管
vsip VS 0x244 虚拟监管模式陷入事件等待状态寄存器 虚拟监管
vstimecmp VS 0x24D 虚拟监管模式计时器中断比较值寄存器 虚拟监管
vsiselect VS 0x250 虚拟监管模式间接寄存器选择信号寄存器 虚拟监管间接访问寄存器
vsireg VS 0x251 虚拟监管模式间接寄存器别名寄存器 虚拟监管间接访问寄存器
vstopei VS 0x25C 虚拟监管模式顶部外部中断寄存器 虚拟监管中断
vsatp VS 0x280 虚拟监管模式虚拟地址转换和保护寄存器 虚拟监管
hstatus HS 0x600 虚拟机模式处理器状态寄存器 虚拟机陷入设置
hedeleg HS 0x602 虚拟机模式陷入降级控制寄存器 虚拟机陷入设置
hideleg HS 0x603 虚拟机模式中断降级控制寄存器 虚拟机陷入设置
hie HS 0x604 虚拟机模式中断使能寄存器 虚拟机陷入设置
htimedelta HS 0x605 虚拟机模式虚拟化计时器 虚拟机计时器
hcounteren HS 0x606 虚拟机模式计数器使能寄存器 虚拟机陷入设置
hgeie HS 0x607 虚拟机模式客户机外部中断启用寄存器 虚拟机陷入设置
hvien HS 0x608 虚拟机模式虚拟中断使能寄存器 虚拟机陷入设置
hvictl HS 0x609 虚拟机模式虚拟中断控制寄存器 虚拟机陷入设置
henvcfg HS 0x60A 虚拟机模式环境配置寄存器 虚拟机配置
htval HS 0x643 虚拟机模式陷入事件向量寄存器 虚拟机陷入处理
hip HS 0x644 虚拟机模式陷入事件等待状态寄存器 虚拟机陷入处理
hvip HS 0x645 虚拟机模式虚拟中断挂起寄存器 虚拟机陷入处理
hviprio1 HS 0x646 虚拟机模式VS-Level中断优先级寄存器1 虚拟机陷入处理
hviprio2 HS 0x647 虚拟机模式VS-Level中断优先级寄存器2 虚拟机陷入处理
htinst HS 0x64A 虚拟机模式陷入指令寄存器 虚拟机陷入处理
hgatp HS 0x680 虚拟机模式客户地址转换和保护寄存器 虚拟机保护和转换
hcontext HS/Debug 0x6A8 虚拟机模式上下文寄存器 调试寄存器

虚拟监管模式只读的 CSRs

昆明湖 V2R2 中实现的权限为虚拟监管模式只读(HRO)的 RISC-V 的 CSRs 如下表所示:

昆明湖 V2R2 支持的 HRO 的 CSRs 列表
名称 特权级 编号 描述 组别
hgeip HS 0xE12 虚拟机模式客户机外部中断挂起寄存器 虚拟机陷入处理
vstopi VS 0xEB0 虚拟监管模式顶层中断 虚拟监管级中断

机器模式可读写的 CSRs

昆明湖 V2R2 中实现的权限为机器模式可读写(MRW)的 RISC-V 的 CSRs 如下表所示:

昆明湖 V2R2 支持的 MRW 的 CSRs 列表
名称 特权级 编号 描述 组别
mstatus M 0x300 机器模式处理器状态寄存器 机器陷入设置
misa M 0x301 机器模式处理器指令集寄存器 机器陷入设置
medeleg M 0x302 机器模式陷入降级控制寄存器 机器陷入设置
mideleg M 0x303 机器模式中断降级控制寄存器 机器陷入设置
mie M 0x304 机器模式中断使能寄存器 机器陷入设置
mtvec M 0x305 机器模式陷入向量基址寄存器 机器陷入设置
mcounteren M 0x306 机器模式计数器使能寄存器 机器陷入设置
mvien M 0x308 机器模式虚拟中断使能寄存器 机器陷入设置
mvip M 0x309 机器模式虚拟中断挂起寄存器 机器陷入设置
menvcfg M 0x30A 机器模式环境配置寄存器 机器配置
mstateen0 M 0x30C 机器模式状态使能寄存器 机器状态使能扩展
mcountinhibit M 0x320 机器模式计数禁止寄存器 机器计数器配置
mhpmevent3 M 0x323 机器模式性能监测事件选择寄存器3 机器计数器配置
... ... ... ... ...
mhpmevent31 M 0x33F 机器模式性能监测事件选择寄存器31 机器计数器配置
mscratch M 0x340 机器模式陷入临时数据备份寄存器 机器陷入处理
mepc M 0x341 机器模式陷入保留程序计数器 机器陷入处理
mcause M 0x342 机器模式陷入事件原因寄存器 机器陷入处理
mtval M 0x343 机器模式陷入事件向量寄存器 机器陷入处理
mip M 0x344 机器模式陷入事件等待状态寄存器 机器陷入处理
mtinst M 0x34A 机器模式陷入指令寄存器 机器陷入处理
mtval2 M 0x34B 机器模式陷入事件向量寄存器2 机器陷入处理
miselect M 0x350 机器模式间接寄存器选择信号寄存器 机器间接访问寄存器
mireg M 0x351 机器模式间接寄存器别名寄存器 机器间接访问寄存器
mtopei M 0x35C 机器模式顶部外部中断寄存器 机器中断
pmpcfg0 M 0x3A0 物理内存保护配置寄存器0 机器内存保护
pmpcfg2 M 0x3A2 物理内存保护配置寄存器2 机器内存保护
... ... ... ... ...
pmpcfg14 M 0x3AE 物理内存保护配置寄存器14 机器内存保护
pmpaddr0 M 0x3B0 物理内存保护基址寄存器0 机器内存保护
... ... ... ... ...
pmpaddr63 M 0x3EF 物理内存保护基址寄存器63 机器内存保护
mnscratch M 0x740 机器模式不可屏蔽中断临时数据备份寄存器 机器不可屏蔽中断处理
mnepc M 0x741 机器模式不可屏蔽中断保留程序计数器 机器不可屏蔽中断处理
mncause M 0x742 机器模式不可屏蔽中断事件原因寄存器 机器不可屏蔽中断处理
mnstatus M 0x744 机器模式不可屏蔽处理器状态寄存器 机器不可屏蔽中断处理
mseccfg M 0x747 机器模式安全配置寄存器 机器配置
tselect M/Debug 0x7A0 Debug/Trace 触发器选择寄存器 调试寄存器
tdata1 M/Debug 0x7A1 第一个 Debug/Trace 触发器数据寄存器 调试寄存器
tdata2 M/Debug 0x7A2 第二个 Debug/Trace 触发器数据寄存器 调试寄存器
tdata3 M/Debug 0x7A3 第三个 Debug/Trace 触发器数据寄存器 调试寄存器
tinfo M/Debug 0x7A4 Debug/Trace 触发器信息寄存器 调试寄存器
tcontrol M/Debug 0x7A2 机器模式触发器使能寄存器 调试寄存器
mcontext M/Debug 0x7A3 机器模式上下文寄存器 调试寄存器
pmacfg0 M 0x7C0 PMA配置寄存器0 PMA配置
pmacfg2 M 0x7C2 PMA配置寄存器2 PMA配置
pmaaddr0 M 0x7C8 PMA地址寄存器0 PMA地址
... ... ... ... ...
pmaaddr15 M 0x7D7 PMA地址寄存器15 PMA地址
mcycle M 0xB00 机器模式周期计数器 机器计数器
minstret M 0xB02 机器模式退役指令计数器 机器计数器
mhpmcounter3 M 0xB03 机器模式性能监测计数器3 机器计数器
... ... ... ... ...
mhpmcounter31 M 0xB1F 机器模式性能监测计数器31 机器计数器
mcorepwr M 0xBC0 机器模式处理器核功耗控制寄存器 机器功耗控制

机器模式只读的 CSRs

昆明湖 V2R2 中实现的权限为机器模式只读(MRO)的 RISC-V 的 CSRs 如下表所示:

昆明湖 V2R2 支持的 MRO 的 CSRs 列表
名称 特权级 编号 描述 组别
mvendorid M 0xF11 供应商编号寄存器 机器信息
marchid M 0xF12 架构编号寄存器 机器信息
mimpid M 0xF13 机器模式硬件实现编号寄存器 机器信息
mhartid M 0xF14 机器模式逻辑内核编号寄存器 机器信息
mconfigptr M 0xF15 配置数据结构指针 机器信息
mtopi M 0xFB0 机器模式顶层中断 机器陷入设置

调试模式可读写的 CSRs

昆明湖 V2R2 中实现的权限为调试模式可读写(DRW)的 RISC-V 的 CSRs 如下表所示:

昆明湖 V2R2 支持的 DRW 的 CSRs 列表
名称 特权级 编号 描述 组别
dcsr Debug 0x7B0 调试模式控制与状态寄存器 调试模式寄存器
dpc Debug 0x7B1 调试模式程序计数器 调试模式寄存器
dscratch0 Debug 0x7B2 调试模式暂存寄存器0 调试模式寄存器
dscratch1 Debug 0x7B3 调试模式暂存寄存器1 调试模式寄存器

自定义 CSRs(Custom CSRs)

在上述实现的控制状态寄存器表中可以发现, 昆明湖 V2R2 扩展了 RISC-V 的 CSRs,实现了一些 RISC-V 手册中未定义的 CSR,下面将对这些 CSR 进行介绍。

sbpctl

sbpctl 的地址为 0x5C0,其初始化值为下表的默认值,其每一 bit 的功能如下表所示

sbpctl 的 bit 功能
功能 默认值
0 UBTB_ENABLE  设1代表开启uftb 1
1 BTB_ENABLE  设1代表开启主ftb 1
2 BIM_ENABLE  设1代表开启bim预测器1 1
3 TAGE_ENABLE  设1代表开启TAGE预测器 1
4 SC_ENABLE  设1代表开启SC预测器 1
5 RAS_ENABLE  设1代表开启RAS预测器 1
6 LOOP_ENABLE  设1代表开启loop预测器2 1
7-31 WARL 0

spfctl

spfctl 的地址为 0x5C1,其初始化值为下表的默认值 ,其每一 bit 的功能如下表所示:

spfctl 的 bit 功能
功能 默认值
0 控制 L1 指令预取器的开关:设 1 代表开启预取 1
1 控制 L2 预取器的开关,包括 L1 预取器直接发到 L2 缓存的预取,V/PBOP,TP:设 1 代表开启预取 1
2 控制 L1 预取器的开关,包括 Stream,Stride,SMS:设 1 代表开启预取 1
3 控制 SMS 预取器是否在 hit 时也接受训练:设 1 代表 hit 也会接受训练,设 0 代表只有 miss 才会训练 0
4 控制 SMS 预取器的 agt 表的预取开关:设 1 代表开启 agt 表预取 1
5 控制 SMS 预取器的 pht 表的预取开关:设 1 代表开启 pht 表预取 1
6-9 控制 SMS 预取器的 active page 的预取激活阈值 12
10-15 控制 SMS 预取器的 active page 的预取跨度 30
16 控制 L1 预取器中的 Stream, Stride 的开关:设为 1 代表开启该预取 1
17 控制 L2 预取器是否只对发下来的 store L1 miss 的请求做训练:设 1 代表是 0
18 控制 L2 预取器中的 L1 预取器直接发到 L2 缓存的预取的开关:设 1 代表开启该预取 1
19 控制 L2 预取器中的 PBOP 的开关:设 1 代表开启该预取 1
20 控制 L2 预取器中的 VBOP 的开关:设 1 代表开启该预取 1
21 控制 L2 预取器中的 TP 的开关:设 1 代表开启该预取 1
22-31 控制 L2 预取器中的 V/PBOP 的请求滞后更新的延迟:设为 0 则采用系统默认值(当前是300),设为非 0 则采用该延迟 0
高位 保留位 0

slvpredctl

slvpredctl 的地址为 0x5C2,其初始化值为下表的默认值 ,其每一 bit 的功能如下表所示

slvpredctl 的 bit 功能
功能 默认值
0 控制访存违例预测器是否禁用,设 1 代表禁用 0
1 控制访存违例预测器是否禁止 load 指令推测执行,设 1 代表禁止 0
2 控制访存违例预测器是否会阻塞 store 指令,设 1 代表会阻塞 0
4-8 访存违例预测器的 reset 间隔,设该位域的值为 x,则间隔为 2^(10+x) 6
其余位 目前其余位无功能 0

smblockctl

smblockctl 的地址为 0x5C3,其初始化值为下表的默认值 ,其每一 bit 的功能如下表所示

smblockctl 的 bit 功能
功能 默认值
0-3 控制 sbuffer 的 flush 阈值 7
4 控制是否开启 ld-ld 违例检查,设 1 代表开启 1
5 控制是否开启 soft prefetch,设 1 代表开启 1
6 控制是否上报 cache 发生的 ecc 错误,设 1 代表开启 1
7 控制是否支持 uncache 的 outstanding 访问,设 1 代表开启 0
其余位 目前其余位无功能 0

srnctl

srnctl 的地址为 0x5C4,其初始化值为下表的默认值 ,其每一 bit 的功能如下表所示

srnctl的 bit 功能
功能 默认值
0 fusion decoder是否开启,1开启 1
1 speculative virtual address inv 是否开启 1
2 wfi 指令是否开启 1
其余位 目前其余位无功能 0

mcorepwr

mcorepwr 的地址为 0xBC0,其初始化值为下表的默认值,其每一 bit 的功能如下表所示:

mcorepwr 的 bit 功能
功能 默认值
0 控制是否允许处理器核发起 power-down 请求,设 1 代表允许 0
1 控制是否开启 ROB commit stuck 超时检查并在超时时上报 critical error,设 1 代表开启,设 0 代表关闭 0
其余位 目前其余位无功能 0

  1. 当前 bim 已被移除,该位无实际功能。 

  2. 当前 Loop 预测器尚未合入主线,该位无实际功能