type
status
date
slug
summary
tags
category
icon
password
Summary
本文以 VexRiscv 的仿真为例记录一下 openocd 的调试过程
调试的过程有三步:
- 编译 VexRiscv
- 编译 Spinal 魔改的 openocd
- 进行调试
调试使用的工具链为 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 准备工作
- cpu0.yaml 定义了一些 debug 相关的配置,目前就放在 VexRiscv 仓库中
- vexriscv_sim.cfg 是 openocd 的配置文件,定义了 adapter driver、jtag 接口和核的信息,vexriscv 的配置文件可以在 openocd_riscv/tcl/target 目录下找到
3.2 开始调试
- 启动 VexRiscv 仿真
cd VexRiscv/src/test/cpp/regression && make run DEBUG_PLUGIN_EXTERNAL=yes
- 在另一个终端启动 openocd,使用命令
openocd -c "set VEXRISCV_YAML VexRiscv/cpu0.yaml" -f vexriscv_sim.cfg
。注:根据 VexRisv 的 issue 作者对于 verilator 的测试使用了方便的 debug 连接写法没有通过 jtag,所以 openocd 会报一些错,不用在意,只要 log 中出现了 Target successfully examined 就可以了。
- 在另一个终端启动 telnet,telnet localhost 4444
输出 Open On-Chip Debugger 证明链接成功。接下来就可以尝试一些命令,比如读写寄存器,单步执行等。
- 作者:Light-ly
- 链接:notion.light-liuyi.top/article/openocd-use-flow
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。