Skip to content

RISC-V 的特权指令

Control Status Registers (CSRs)

状态控制寄存器域的规范

大致有以下几种对控制状态寄存器域的行为的定义

  • WPRI: Reserved Writes Preserve Values, Reads Ignore Values
    • 针对保留的 CSR 域
    • 应当忽略从中读出的值并且在写入时保留
  • WLRL: Write/Read Only Legal Values
  • WARL: Write Any Values, Reads Legal Values

Supervisor Scratch sscratch Register

sscratch 寄存器为一个长度为 SXLEN 比特的可读写寄存器。官方标准的描述为

Typically, sscratch is used to hold a pointer to the hart-local supervisor context while the hart is executing user code. At the beginning of a trap handler, sscratch is swapped with a user register to provide an initial working register.

+--------------------------------+
|            sscratch            |
+--------------------------------+
           (SXLEN bits)                 

Supervisor Exception Program Counter sepc

Supervisor Cause Register scause

Supervisor Trap Value stval Register

Supervisor Address Translation and Protection satp Register

在 RISCV 的特权指令集中,satp 寄存器长度为 SXLEN 位比特,当 SXLEN 为 32 位时,satp 的布局如下:

+-+---------+----------------------+
| |   ASID  |          PPN         |
+-+---------+----------------------+
 |  (9 bits)        (22 bits)
 |
 `- MODE (1bit)

SXLEN 为 64 位时,satp 的布局如下:

+----+----------------+--------------------------------------------+
|MODE|      ASID      |                    PPN                     |
+----+----------------+--------------------------------------------+
  |       (16 bits)                     (44 bits)
  |
  `- (4 bits)

其中 MODE 域 可以表示如下:

Value Name Description
SXLEN = 32
0 Bare 直接访问物理地址
1 Sv32 Sv32 分页模式
SXLEN = 63
0000 Bare 直接访问物理地址
0001 - 0111 - 保留
1000 Sv39 Sv39 分页模式
1001 Sv48 Sv48 分页模式
1010 Sv57 Sv57 分页模式
1011 Sv64 保留给 Sv64 分页模式
1100 - 1101 - 保留给标准
1110 - 1111 - 保留给自定义

PPN 域记录了页表根节点开始的物理页号,将 PPN 左移 12 位可得到页表根节点的物理地址。

Comments