跳转至

调试

本章是昆明湖的调试模块的设计文档。昆明湖 debug 兼容 RISC-V Debug V0.13 手册标准。对外调试接口支持 JTAG。调试接口是软件与处理器交互的通道。用户可以通过调试接口获取CPU的状态,包括寄存器和存储器内容,以及其他片上设备的信息。支持程序下载。

Debug Module

如下图所示。昆明湖的 debug 工作是由调试软件(GDB)、调试代理服务程序(openocd)、调试器(debug module wrapper)等组件一起配合完成的, 其中调试器包括 JtagDTM, DMI, DM。 调试接口在整个 CPU 调试环境中的位置如下图所示。 其中,调试软件和调试代理服务程序通过网络互联,调试代理服务程序与调试器通过 Jtag 仿真器连接, 调试器与 Jtag 仿真器的调试接口以 JTAG 模式通信。

debug module

调试器与hart之间的连接以及时钟域关系如下图所示:

debug2harts

当前昆明湖debug module实现的情况如下:

  • 支持从第一条指令开始的调试,在 cpu 复位之后进入调试模式。
  • 支持单步调试。
  • 支持软断点(ebreak 指令)、硬断点(trigger)和内存断点(trigger)。
  • 支持读写CSR和内存,支持 progbuf 和 sysbus 两种访存方式。

Trigger Module

当前昆明湖 trigger module 的实现情况如下:

  • 昆明湖 trigger module 当前实现的 debug 相关的 CSR 如下表所示。
  • trigger 的默认配置数量是 4 (支持用户自定义配置)。
  • 支持 mcontrol6 类型的指令、访存的 trigger。
  • match 支持相等,大于等于,小于三种类型(向量访存当前只支持相等类型匹配)。
  • 仅支持 address 匹配,不支持 data 匹配。
  • 仅支持 timing = before。
  • 支持一对 trigger 的 chain。
  • 为了防止 trigger 的二次产生 breakpoint 的异常,支持通过 xSTATUS.xIE 控制。
  • 支持H扩展的软硬件断点,watchpoint 调试手段。
  • 支持原子指令的访存 trigger。
昆明湖实现的 debug 相关的 csr
名称 地址 读写 介绍 复位值
Tselect 0x7A0 RW trigger 选择寄存器 0X0
Tdata1(Mcontrol6) 0x7A1 RW trigger data1 0xF0000000000000000
Tdata2 0x7A2 RW trigger data2 0x0
Tinfo 0x7A4 RO trigger info 0x40
Dcsr 0x7B0 RW Debug Control and Status 0x40000003
Dpc 0x7B1 RW Debug PC 0x0
Dscratch0 0x7B2 RW Debug Scratch Register 0 -
Dscratch1 0x7B3 RW Debug Scratch Register 1 -