RISC-V debug专栏1 --- Introduction

  • 设计调试需求:当设计从仿真转向硬件实现时,用户对系统状态的控制和理解能力大幅下降,因此硬件内置良好的调试支持至关重要。虽然在有健壮操作系统(OS)运行时,软件可处理许多调试任务,但在很多场景中,硬件支持仍是必不可少的。
  • 平台:由一个或多个组件组成的单个集成电路,这些组件可能是 RISC-V 核心或其他功能模块,通常都连接到单个系统总线。单个 RISC-V 核心包含一个或多个硬件线程(harts)。
  • DXLEN:一个 hart 支持的最宽 XLEN

Feature

介绍一种调试接口所支持的功能特性,下面用大白话给你解释:

  1. 寄存器读写:所有硬件线程(hart)的寄存器(包括控制状态寄存器 CSRs),都能随便读和写。
  2. 内存访问方式:访问内存有两种选择,要么从硬件线程的 “视角” 去访问,要么直接通过系统总线去访问,也可以两种方式一起用。
  3. 支持多种 RISC - V 类型:不管是 32 位(RV32)、64 位(RV64),还是未来可能出的 128 位(RV128)的 RISC - V,这个调试接口都能支持。
  4. 独立调试每个硬件线程:平台里的任何一个硬件线程(hart),都可以单独进行调试,互相不干扰。
  5. 调试器自动发现信息:调试器自己就能找到几乎所有它需要知道的东西,不需要用户去手动配置。
  6. 从第一条指令开始调试:每个硬件线程(hart)从执行第一条指令的时候,就可以开始调试了,一开始就能 “盯着” 它。
  7. 软件断点暂停:当执行到软件断点指令时,硬件线程(hart)能停下来。
  8. 硬件单步执行:可以一次只执行一条指令,慢慢走,方便观察每一步的情况。
  9. 调试功能与传输方式无关:不管用什么方式来传输调试相关的数据,调试功能都能正常用。
  10. 调试器无需了解内部结构:调试器不需要知道它正在调试的硬件线程(hart)内部的复杂构造

下面带 (Optional) 是可选特性,不是必须有的:
11. 任意硬件线程同时停 / 恢复:可以让任意几个硬件线程(hart)同时停下来或者恢复运行。
12. 停了的硬件线程执行任意指令:硬件线程(hart)停下来后,可以让它执行任意指令。只要有办法把相关状态移到通用寄存器(GPRs),就算核心有额外或自定义指令 / 状态,也不需要新的调试功能。
13. 不暂停访问寄存器:不用让硬件线程(hart)停下来,就能访问它的寄存器。
14. 运行时执行短指令序列:正在运行的硬件线程(hart),可以被指挥去执行一小段指令,而且这么做不会太 “麻烦”(开销小)。
15. 系统总线主设备访问内存:有个系统总线主设备,能直接访问内存,不用经过任何硬件线程(hart)。
16. 触发条件暂停:当触发条件(比如程序计数器 PC、读写地址 / 数据、指令操作码)满足时,硬件线程(hart)能停下来。

system overview

外部调试支持的组成图,虚线部分可有可无。用户用运行调试器(如 gdb)的笔记本(调试主机)。调试器通过调试翻译器(如 OpenOCD,带硬件驱动)和调试传输硬件(如特定适配器)连接到平台的调试传输模块(DTM)。DTM 用 DMI 接口连调试模块(DM)。每个 hart 由一个 DM 管,hart 可以不一样,通常一个核心的 hart 被同一个 DM 控制,多数平台一个 DM 管所有 hart。DM 控制 hart 运行,用抽象命令访问通用寄存器,其他寄存器可通过命令或给程序缓冲区写程序访问。程序缓冲区能让调试器在 hart 执行任意指令,也能访问内存。还有个可选的系统总线访问块,不通过 hart 就能访问内存。每个 hart 还可能有触发模块,满足条件就停下并告诉调试模块。

  • 整体连接关系
    你就像一个 “指挥官”,通过一台笔记本电脑(调试主机,比如它运行着调试器软件 gdb)来发起调试操作。调试器会和一个 “翻译官”(调试翻译器,例如 OpenOCD,它可能还包含硬件驱动)沟通,这个 “翻译官” 再和一个 “硬件桥梁”(调试传输硬件,比如 Olimex USB - JTAG 适配器这种硬件)交流。最后,这个 “硬件桥梁” 把笔记本电脑和平台里的 “调试传输模块”(DTM)连起来。DTM 呢,又能通过 “调试模块接口”(DMI)去访问一个或多个 “调试模块”(DM)。

  • 调试模块(DM)与硬件线程(hart)的关系
    平台里的每个 “硬件线程”(hart,可理解为芯片里的一个 “工作单元”)都由且只由一个 DM 控制。这些 hart 可以是 “不一样的”(异构)。虽然对 hart 和 DM 怎么配对没太多死规定,但一般来说,同一个核心里的 hart 会被同一个 DM 控制。大多数平台里,往往就一个 DM 来控制平台里所有的 hart。

  • DM 的功能
    DM 能对它控制的 hart 进行 “运行控制”(比如让 hart 开始、停止运行)。通过 “抽象命令” 可以访问通用寄存器(GPRs,好比是 hart 的 “小笔记本”,用来临时记数据)。其他额外的寄存器呢,要么也通过 “抽象命令” 访问,要么给一个 “程序缓冲区”(可选的,相当于一个临时的 “指令小仓库”)写程序来访问。

  • 程序缓冲区与系统总线访问
    “程序缓冲区” 很有用,它允许调试器让 hart 执行任意指令,就像给 hart 下任意的小任务。这个机制还能用来访问内存。另外,有个 “可选的系统总线访问块”(相当于一个特殊通道),它允许不通过 RISC - V 的 hart 去访问内存,绕开 hart 直接操作内存。

  • 触发模块
    每个 RISC - V 的 hart 还可以有一个 “触发模块”。打个比方,它就像一个 “门卫”,当满足特定条件(比如特定的指令、地址操作等)时,hart 就会停下来,并且告诉调试模块 “我停下啦”。

这样一整套机制,就构成了从外部电脑通过各种桥梁和模块,对芯片里的 hart 进行调试的能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值