用telnet+openocd+jtag_dpi+vcs仿真调试RISCV的cpu

本文介绍了如何使用tcl通过telnet连接openocd,结合JTAG_DPI和VCS仿真调试RISC-V CPU。详细阐述了配置target.cfg文件、连接和调试过程,包括目标 hart 的设置和调试命令的使用。调试过程中关注了target examine等中间过程。

目录

背景:

需要了解的基础知识,此处不做介绍:

如何连结和调试

一些中间过程需要关心,记录

背景:

  1. Server    :tcl+telnet
  2. SW         :openocd+JTAG_DPI+VCS仿真(riscv base+1core+multi_harts)

用tcl,通过telnet连接openocd,与JTAG_DPI连接,JTAG_DPI的verilog model 例化在testbench中,DUT是riscv的core,具有JTAG的调试接口,遵循riscv-debug-spec

这个文章的介绍只是我操作过程中的一些理解和整理,也有很多不涉及的或者有偏差的地方,如果大家又发现问题,可以随时私信沟通交流,多谢。

需要了解的基础知识,此处不做介绍:

  1. Riscv-spec
  2. Riscv-spec-privileged
  3. Riscv-debug-stable
  4. JTAG spec
  5. Openocd user guide
  6. Openocd如何通过JTAG_DPI和VCS 仿真连接,网络有教程

我是用的下边的JTAG_DPI

GitHub - yaozhaosh/e200_opensource: The Ultra-Low Power RISC Core

About (OpenOCD User’s Guide)

如何连结和调试

配置target.cfg 文件

       ##配置interface,bitbang和jtag_dpi相连,telnet_port是telnet和openocd相连

interface remote_bitbang

    ##注意,bitbanghostport要和jtag_dpi设置为相同的配置

remote_bitbang_port 44853

remote_bitbang_host t01n70

tcl_port 6667                  #自行更改

telnet_port 44441              #自行更改,如果是window界面,可以在windows打开telnet服务

    ##以下是配置chipnametap_ID

if { [info exists CHIPNAME] } {

   set  _CHIPNAME $CHIPNAME

} else {

OpenOCD 是一个开源的片上调试器,广泛用于嵌入式系统开发,特别是在 RISC-V 架构中。在与 VCS(Synopsys Verdi 的编译仿真工具)集成时,可能会遇到一些配置或集成问题,尤其是在涉及 JTAG DPI(Direct Programming Interface)进行仿真调试时。 在使用 Telnet + OpenOCD + JTAG_DPI + VCS仿真调试环境中,需要确保 JTAG_DPI 的 Verilog 模型正确例化在测试平台中,并且 DUT(Design Under Test)具备符合 RISC-V Debug Specification 的 JTAG 调试接口。调试过程中,TCL 脚本通过 Telnet 连接 OpenOCD,并与 JTAG_DPI 进行通信[^2]。 对于 JTAG TAP(Test Access Port)的连接问题,例如多个 TAP 设备的菊花链配置,需要确保 TAP 的 IR(Instruction Register)地址和 DR(Data Register)宽度配置正确。例如,IR 地址 0x1 对应 IDCODE 寄存器,其宽度为 32 位;0x10 对应 DTMCS(Debug Module Control and Status)寄存器,宽度也为 32 位;0x11 对应 DMI(Debug Module Instruction)寄存器,宽度为 40 位;而 0x1f 对应 BYPASS 寄存器,宽度为 1 位[^3]。 此外,OpenOCD 在与硬件或仿真环境连接时,可能会遇到连接失败的问题。例如,在使用 Nuclei Studio IDE 进行 GPIO 实验时,可能会出现 OpenOCD 失败的情况。这通常与硬件连接错误有关,例如接线错误或者 IDE 的稳定性问题。解决这类问题的方法包括检查接线是否正确、尝试不同的连接方式以及确保 IDE 的稳定性[^1]。 ### 配置示例 以下是一个简单的 TCL 脚本示例,用于配置 OpenOCDJTAG_DPI 进行通信: ```tcl # openocd.cfg source [find interface/jtag_dpi.cfg] jtag_dpi_port 4444 jtag_dpi_host localhost # Target configuration target_create cortex_m0_target cortex_m0 -chain-position 1 cortex_m0_target configure -work-area-phys 0x20000000 -work-area-size 0x10000 -work-area-backup 0 ``` 在运行此配置之前,确保 JTAG_DPI 的 Verilog 模型已正确例化,并且 VCS 仿真环境已准备好。使用以下命令启动 OpenOCD: ```bash openocd -f openocd.cfg ``` 然后,使用 Telnet 连接到 OpenOCD: ```bash telnet localhost 4444 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值