Rocket - debug - TLDebugModule

Posted wjcdx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rocket - debug - TLDebugModule相关的知识,希望对你有一定的参考价值。

https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA

 

简单介绍TLDebugModule中的实现。

 

技术图片

 

1. device

 

device是一个设备描述符,包含了设备的各种信息:

技术图片

 

2. dmOuter

 

dmOuter是一个TLDebugModuleOuterAsync模块:

技术图片

 

其结构示意图如下:

技术图片

 

3. dmInner

 

dmInner是一个TLDebugModuleInnerAsync模块:

技术图片

 

其结构示意图如下:

技术图片

 

4. node

 

node是dmInner.tlNode的别名:

技术图片

 

5. intnode

 

intnode是dmOuter.intnode的别名:

技术图片

 

6. 连接DMI同步接口

 

连接dmOuter的dmi同步接口(source)和dmInner的dmi同步接口(sink):

技术图片

 

7. lazy val module

 

lazy val module实现了TLDebugModule的内部逻辑。

 

1) io

 

lazy val module定义了一组IO接口:

技术图片

 

其示意图如下:

技术图片

 

2) 为dmOuter指定时钟和复位信号

 

dmOuter模块使用外部供入的时钟和复位信号:

技术图片

 

从目前的实现看,这里的外部是指TestHarness:

技术图片

 

TestHarness是顶层模块,其reset信号是最外层的复位信号:

a. dut也就是RocketSystem的复位信号来自于TestHarness.reset和调试模块的ndreset;

b. TestHarness的复位信号和时钟信号同时也输出给dut.debug模块:

技术图片

技术图片

 

如果是不需要调试模块,则不需要驱动时钟信号,同时一直保持复位信号即可:

技术图片

 

3) 内部连接

 

将io与dmOuter/dmInner相连,将dmOuter与dmInner相连:

技术图片

 

8. 总结

 

TLDebugModule总体结构示意图(可以单独打开图片查看)如下:

技术图片

其中:

a. TLDebugModuleOuterAsync使用外部供入的时钟和复位信号;

b. TLDebugModuleOuterAsync的io.innerCtrl连接到TLDebugModuleInnerAsync的io.innerCtrl,中间有时钟同步逻辑。io.innerCtrl中包含了调试器通过写DMCONTROL寄存器传递的控制信息;

c. io.ctrl.debugUnavail同时传递给TLDebugModuleOuterAsync和TLDebugModuleInnerAsync;只是TLDebugModuleOuterAsync中不使用;

d. dmOuter.intnode用于对核心发起中断请求,这里暂时没有连接;

e. dmInner.tlNode中包含了调试模式下核心要执行的代码,需要连接到核心的总线,并入核心的地址空间;

 

以上是关于Rocket - debug - TLDebugModule的主要内容,如果未能解决你的问题,请参考以下文章

Rocket - debug - DebugTransport

Rocket - debug - Custom

Rocket - debug - DebugCustomXbar

Rocket - debug - TLDebugModule

Rocket - debug - SBA

Rocket - debug - DMI