type
status
date
slug
summary
tags
category
icon
password
📌
Summary
本文以 VexRiscv 的仿真为例记录一下 openocd 的调试过程
调试的过程有三步:
  1. 编译 VexRiscv
  1. 编译 Spinal 魔改的 openocd
  1. 进行调试
调试使用的工具链为 verilator + openocd + telnet

1 编译 VexRiscv

根据 VexRiscv 的 Readme 文档,编译出 VexRiscv.v 即可

2 openocd_riscv

拉取 openocd_riscv 信息,按照以下命令编译即可
过程中可能需要补充一些系统库,主要是添加 --enable-ftdi --enable-dummy 选项,前者是实际测试时使用的 adapter driver,后者是仿真时使用的。
该版本的 openocd 与官方版本不同的是其为 vexriscv 定义了一个独立的体系结构及专用的命令,不再使用宽泛的 riscv 定义。

3 调试

3.1 准备工作

  1. cpu0.yaml 定义了一些 debug 相关的配置,目前就放在 VexRiscv 仓库中
  1. vexriscv_sim.cfg 是 openocd 的配置文件,定义了 adapter driver、jtag 接口和核的信息,vexriscv 的配置文件可以在 openocd_riscv/tcl/target 目录下找到

3.2 开始调试

  1. 启动 VexRiscv 仿真 cd VexRiscv/src/test/cpp/regression && make run DEBUG_PLUGIN_EXTERNAL=yes
  1. 在另一个终端启动 openocd,使用命令 openocd -c "set VEXRISCV_YAML VexRiscv/cpu0.yaml" -f vexriscv_sim.cfg。注:根据 VexRisv 的 issue 作者对于 verilator 的测试使用了方便的 debug 连接写法没有通过 jtag,所以 openocd 会报一些错,不用在意,只要 log 中出现了 Target successfully examined 就可以了。
    1. notion image
  1. 在另一个终端启动 telnet,telnet localhost 4444
    1. notion image
输出 Open On-Chip Debugger 证明链接成功。接下来就可以尝试一些命令,比如读写寄存器,单步执行等。
notion image
notion image
 
Chisel 官方文档翻译OpenOCD 源码分析
Loading...