RISCV Debug Module功能解读

最近做的项目里有RISCV的IP,笔者负责了Debug Module相关的验证工作。Debug Module不是RISCV的核心功能,所以很多人觉得它无足轻重。但是做完项目我发现它的功能非常强大,当处理器发生故障变成砖头,Debug Module可以化腐朽为神奇。Debug Module需要的知识很多,软硬件都有涉及,包括但不限于嵌入式编程、汇编、RV*指令集、JTAG、RISCV工作模式、各种Debug操作等。也就是说,学习Debug Module可以顺便对整个RISCV的工作原理有个入门的了解。

最值得参考的资料是riscv-debug-release spec英文版spec,如果觉得英文文档读起来很吃力,可以对照着中文书籍《手把手教你RISCV CPU处理器设计》第14章--最不起眼的其实是最难的——调试机制。不过这本书因为篇幅只对Debug Module简略介绍,仅用于辅助理解宏观概念。

另外,光看文档是很抽象的,最好能找个实验做一做。笔者的项目中有Debug Module的RTL代码和验证环境,因此可以结合spec练习,碰到有的功能不理解,就创建testcase去验证一下,这是RTL级的仿真,非常底层。如果你没有这个条件,可以买一块RISCV开发板,连上自己的PC用OpenOCD来练习JTAG调试,也可以更好地理解各种调试功能。

下图是debug module在risc-v架构中的整体概览图,一开始看到这个图会一脸懵逼,因为不知道箭头表示的数据流向,也不知道各个方框中的module是什么含义。但是仔细观察3分钟,根据名称大致能猜出来Debug Module是如何工作的。比如数据(debug opertion)是从芯片外部的Debug Host(例如PC的OpenOCD软件)经过Debug Transport流向RISCV芯片的,芯片暴露给外部的接口是JTAG(也可以是cJTAG或APB),而Debug Module可以理解为一个中转站,用来把JTAG过来的低级的信号转换成高级的debug操作,如读写寄存器,访问内存,设置断点等,最终的目的是访问&控制RISCV Core。

对Debug Module有了宏观的认知后,接下来就是理解各个子模块的工作原理了。为了让文章不太长,我把各个子模块在单独的文章中介绍,定期更新,本文只放传送门。

  • JTAG接口协议简介
  • Debug Module Interface(DMI)
  • 重要的Debug Module寄存器
  • 一些常用的Debug操作

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值