CSR 位字段

RISC-V dcsr CSR 寄存器详解

地址 0x7B0特权级 仅 Debug 模式访问 读写 / 32Debug、Trace 与 trigger CSR

dcsr(地址 0x7B0)是仅 Debug 模式可见的 Debug Control and Status CSR。

位作用速览
bit 3 = 只有第 3 位;bits 12..11 = 第 12 到第 11 位
高位 MSB低位 LSB
字段映射

按 bit 字段理解 dcsr

19 个关键字段
31:28

debugver

只读

调试规范版本编码。

这个字段控制什么

  • - 调试规范版本编码。

常见取值

dcsr.debugver
0无调试支持

没有外部调试支持。

1-3保留

RISC-V Debug Specification 1.0 未定义这些编码的当前可移植含义。

4Debug 1.0

存在符合 RISC-V Debug Specification 1.0 的调试支持。

5-14保留

保留编码;可移植软件不应写入或依赖。

15自定义

存在调试支持,但不符合任何可用版本的 RISC-V Debug Specification。

打开官方手册
15

ebreakm

读写

M 模式执行 EBREAK 时进入 Debug Mode。

这个字段控制什么

  • - M 模式执行 EBREAK 时进入 Debug Mode。

常见取值

dcsr.ebreakm
0异常路径

M 模式 执行 EBREAK 时按特权架构的断点异常路径处理。

1进入 Debug Mode

M 模式 执行 EBREAK 时进入 Debug Mode。

打开官方手册
13

ebreaks

WARL

控制 S 模式 EBREAK 是否进入 Debug Mode;不支持 S 模式时硬连为零。

这个字段控制什么

  • - 控制 S 模式 EBREAK 是否进入 Debug Mode;不支持 S 模式时硬连为零。

常见取值

dcsr.ebreaks
0异常路径

S 模式 执行 EBREAK 时按特权架构的断点异常路径处理。

1进入 Debug Mode

S 模式 执行 EBREAK 时进入 Debug Mode。

打开官方手册
12

ebreaku

WARL

控制 U 模式 EBREAK 是否进入 Debug Mode;不支持 U 模式时硬连为零。

这个字段控制什么

  • - 控制 U 模式 EBREAK 是否进入 Debug Mode;不支持 U 模式时硬连为零。

常见取值

dcsr.ebreaku
0异常路径

U 模式 执行 EBREAK 时按特权架构的断点异常路径处理。

1进入 Debug Mode

U 模式 执行 EBREAK 时进入 Debug Mode。

打开官方手册
11

stepie

WARL

单步期间是否允许中断(包括 NMI);实现可将其硬连为零,且调试器不得在 hart 运行时修改它。

这个字段控制什么

  • - 单步期间是否允许中断(包括 NMI);实现可将其硬连为零,且调试器不得在 hart 运行时修改它。

常见取值

dcsr.stepie
0单步时屏蔽中断

单步执行期间中断被屏蔽。

1单步时允许中断

单步执行期间允许中断。

打开官方手册
10

stopcount

WARL

控制 Debug Mode 中 hart-local 计数器是否冻结;实现可将其硬连为零或一。

这个字段控制什么

  • - 控制 Debug Mode 中 hart-local 计数器是否冻结;实现可将其硬连为零或一。

常见取值

dcsr.stopcount
0计数器继续

Debug Mode 中 hart-local 计数器照常递增。

1冻结计数器

Debug Mode 中以及导致进入 Debug Mode 的 EBREAK 上,hart-local 计数器不递增。

打开官方手册
9

stoptime

WARL

控制 Debug Mode 中 time 是否冻结;实现可将其硬连为零或一。

这个字段控制什么

  • - 控制 Debug Mode 中 time 是否冻结;实现可将其硬连为零或一。

常见取值

dcsr.stoptime
0计时继续

time 继续反映 mtime。

1冻结计时

time 在进入 Debug Mode 时冻结,离开时再次反映最新 mtime;若所有 hart 都以此值处于 Debug Mode,mtime 可以停止递增。

打开官方手册
8:6

cause

只读

进入 Debug Mode 的原因编码。

这个字段控制什么

  • - 进入 Debug Mode 的原因编码。

常见取值

dcsr.cause
0保留

保留编码;可移植软件不应依赖其含义。

1EBREAK

由于 EBREAK 指令进入 Debug Mode。

2Trigger

由于 trigger 模块进入 Debug Mode。

3Halt request

由于 debugger halt request 进入 Debug Mode。

4Step

由于单步执行进入 Debug Mode。

5Reset halt request

由于 reset halt request 直接从 reset 后进入 Debug Mode。

6Halt group

由于 halt group 请求进入 Debug Mode。

7其他/扩展原因

Debug Mode 由其他原因进入;若实现 extcause,可由 extcause 给出更具体原因。

打开官方手册
2

step

读写

单步执行控制位。

这个字段控制什么

  • - 单步执行控制位。

常见取值

dcsr.step
0不单步

恢复后不请求单步执行。

1单步

恢复后 hart 执行一条指令后重新进入 Debug Mode。

打开官方手册
1:0

prv

WARL

记录进入 Debug Mode 前的特权级,并可控制恢复时的特权级;不支持或不能切换到所写级别时,hart 可切换到任一支持级别。

这个字段控制什么

  • - 记录进入 Debug Mode 前的特权级,并可控制恢复时的特权级;不支持或不能切换到所写级别时,hart 可切换到任一支持级别。

常见取值

dcsr.prv
0User

恢复执行时使用 User 特权级。

1Supervisor

恢复执行时使用 Supervisor 特权级。

2保留

保留特权级编码;可移植软件不应写入或依赖。

3Machine

恢复执行时使用 Machine 特权级。

打开官方手册
27, 23:20, 14

Reserved

只读零

保留位,读为零。

这个字段控制什么

  • - 保留位,读为零。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

打开官方手册
26:24

extcause

只读

仅当 cause=7 时,可选地给出更具体的停止原因;否则为零。当前定义的 0 表示 Smdbltrp critical error。

这个字段控制什么

  • - 仅当 cause=7 时,可选地给出更具体的停止原因;否则为零。当前定义的 0 表示 Smdbltrp critical error。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

打开官方手册
19

cetrig

WARL(仅 Smdbltrp)

Smdbltrp 的 critical-error 调试进入控制;扩展未实现时不存在。

这个字段控制什么

  • - Smdbltrp 的 critical-error 调试进入控制;扩展未实现时不存在。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

打开官方手册
18

pelp

WARL(仅 Zicfilp)

Zicfilp 的先前 ELP 状态;未实现 Zicfilp 时不存在。

这个字段控制什么

  • - Zicfilp 的先前 ELP 状态;未实现 Zicfilp 时不存在。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

打开官方手册
17

ebreakvs

WARL

控制 VS 模式 EBREAK 是否进入 Debug Mode;无虚拟化模式时硬连为零。

这个字段控制什么

  • - 控制 VS 模式 EBREAK 是否进入 Debug Mode;无虚拟化模式时硬连为零。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

打开官方手册
16

ebreakvu

WARL

控制 VU 模式 EBREAK 是否进入 Debug Mode;无虚拟化模式时硬连为零。

这个字段控制什么

  • - 控制 VU 模式 EBREAK 是否进入 Debug Mode;无虚拟化模式时硬连为零。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

打开官方手册
5

v

WARL

进入 Debug Mode 前的虚拟化模式,并可控制恢复时的虚拟化模式;无虚拟化模式时硬连为零。

这个字段控制什么

  • - 进入 Debug Mode 前的虚拟化模式,并可控制恢复时的虚拟化模式;无虚拟化模式时硬连为零。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

打开官方手册
4

mprven

WARL

控制 Debug Mode 中 mstatus.MPRV 是否生效;该可选位可硬连为 0 或 1。

这个字段控制什么

  • - 控制 Debug Mode 中 mstatus.MPRV 是否生效;该可选位可硬连为 0 或 1。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

打开官方手册
3

nmip

只读

NMI pending 指示;置位后可靠调试可能不再可行,具体取决于实现。

这个字段控制什么

  • - NMI pending 指示;置位后可靠调试可能不再可行,具体取决于实现。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

打开官方手册

读这个 CSR 时先看什么

  • - 先确认当前 hart 和调试实现是否提供 dcsr。
  • - dcsr 位于 0x7B0-0x7BF Debug-mode-only CSR 区间;普通 M 模式软件不能把它当作 Machine CSR 直接访问。
  • - 在 Debug 模式或调试规范定义的上下文中访问,并按 Debug Specification 和实现规则解释字段。

写入前的风险检查

  • - 写入前保留未修改的位,避免把保留位或实现定义位写成非规范值。
  • - 优先使用 CSRRS/CSRRC 做局部置位或清位,避免 CSRRW 覆盖并发更新的状态位。

放回真实流程里理解

1

进入 Debug 模式后按 Debug Specification 读取 dcsr。

2

只修改目标调试字段,保留未修改位和实现定义字段。

3

通过 resume、单步或调试模块行为验证设置是否生效。