Rocket - debug - Periphery

https://mp.weixin.qq.com/s/uGxn-Xec0LkwdaSsCtQBvw

简单介绍Periphery的实现。

1. ExportDebugDMI/ExportDebugJTAG

这是两个参数,用于进行参数查找:

ExportDebugDMI表示导出DMI接口;

ExportDebugJTAG表示导出JTAG接口;

2. DebugIO

定义系统调试模块接口:

其中:clockeddmi和systemjtag只有一个存在:

3. HasPeripheryDebug

HasPeripheryDebug是一个trait,引入该trait,即添加一个调试模块:

1) debug

生成一个调试模块:

将其连接到cbus上:

cbus是外设控制总线:

cbus.coupleTo则是把cbus.outwardNode作为上游节点,连接到TLFragmenter节点上,再连接到debug.node节点上:

debug.node即是dmInner.tlNode:

核心通过这一个连接访问ROMBASE等地址空间,示意图如下:

2) debugCustomXbar

用于连接custom sink/source节点:

示意图如下:

目前debugCustomXbar没有连接上游节点。

3) sb2tl

把sb2tl.node连接到fbus上:

示意图如下:

4) getOMDebugModule

用于获取调试设备的描述信息:

4. HasPeripheryDebugModuleImp

用于实现与调试模块的接口连接逻辑。根据要导出的接口类型,有两种情况:

1) 导出DMI接口

直接导出DMI接口,DTM由外部自行实现:

示意图如下:

2) 导出JTAG接口

引入一个DTM模块,外部直接使用JTAG接口连接:

instantiateJtagDTM中创建一个DTM模块,并与调试模块进行相关连接:

示意图如下:

3) 其他连接

连接ndreset/dmactive/debugUnavail信号:

示意图如下:

5. SimDTM

如果导出的是DMI接口,则使用SimDTM模块仿真一个DTM模块,与DMI接口相连接:

6. SimJTAG

如果导出的是JTAG接口,则使用SimJTAG仿真一个JTAG接口。

1) io

定义SimJTAG模块的IO接口:

其中:jtag是标准的JTAG接口:

2) connect

把SimJTAG的IO接口与系统debug接口相连接:

其中主要的是连接jtag接口,时钟和复位信号:

注:这里tbclock/tbreset中的tb,应该是testbench的意思。

7. Debug

Debug对象用于辅助连接调试模块,或者关闭调试模块:

1) 连接调试模块

根据导出的两种不同的接口,调用不同的连接方法:

在TestHarness中调用:

2) 关闭调试模块

如果不需要调试模块,则可以选择将其关闭:

8. 总体结构图

BaseSubSystem中调试模块部分的总体结构图如下(可以单独打开图片查看):

参考链接:https://docs.qq.com/pdf/DUXVXcG54S3RHZExV

原文地址:https://www.cnblogs.com/wjcdx/p/12683365.html

时间: 2024-10-18 12:46:32

Rocket - debug - Periphery的相关文章

Rocket - debug - TLDebugModuleInner - ROM Generation

https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbstract是一条指令,跳转到抽象命令的指令: Instruction.JAL是jump and link指令: GeneratedUJ用于生成一个UJ格式的指令结构: JAL属于J-format. GeneratedUJ的定义如下: jalAbstract.setImm(ABSTRACT(cfg)

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.tlN

Rocket - debug - DebugTransport

https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTMConfig 这是关于JtagDTM的配置: 其中: a. idcodeVersion:表示Jtag模块的版本号: b. idcodePartNum:表示Jtag模块的Part number; c. idcodeManfId:表示设计者或制造者的编号: d. debugIdleCycles:表示需要

Rocket - debug - Example: Selecting Harts

https://mp.weixin.qq.com/s/HjG5S9binyniG_amC3Dr5Q 介绍riscv-debug的使用实例:如何选择核心,执行Halt/Resume请求. 1. Selecting Harts 可以有多个核心连接在一个调试模块上,如果要让一个核心暂停.重新执行.复位,或者执行调试命令,需要先选择目标核心. A. Selecting a Single Hart 可以在hartsel中填入目标核心的编号,选择单个核心: B. Selecting Multiple Har

Rocket - debug - dm registers

https://mp.weixin.qq.com/s/P48K17TyRoZC7xBMltbXKQ 简单介绍调试模块中每个寄存器的定义. 1. DMI_RegAddrs 记录DMI访问的各个寄存器的地址: 在规范中定义如下: 2. DMSTATUSFields 在规范中定义如下: 3. DMCONTROLFields 寄存器dmcontrol中各个域的定义如下: 4. HARTINFOFields 寄存器hartinfo中各个域的定义如下: 5. HAWINDOWSELFields 寄存器haw

Rocket - debug - Custom

https://mp.weixin.qq.com/s/jkBP6ZjEbgm-SVDpLUMjlA 简单介绍Custom的实现. 1. DebugCustomParams 包含两个参数: a. addrs: 地址: b. width: 数据宽度: 2. DebugCustomNull 定义向上游传递的空参数: 3. DebugCustomBundle 定义DebugCustom节点连接所需要的Bundle: 从一个节点的角度看,其定义如下: 其中: a. 相连节点发送输入地址(addr),以及地

Rocket - debug - DebugCustomXbar

https://mp.weixin.qq.com/s/7h9Bdb0x4_clyigMU_0B7Q 讨论DebugCustomXbar中的几个问题. 1. sources/sourceParams node.in.unzip解出来输入边中的BI, EI参数,分别是sources和sourceParams: 其中,sourceParams的类型为Seq[DebugCustomParams],其中包含了每一条输入边的地址列表(addrs:List[Int])和数据宽度: 2. decoded dec

Rocket - debug - DebugCustomXbar再讨论

https://mp.weixin.qq.com/s/YPFa6kE6I_Ud_MJGvzmS-g 简单讨论输入边/输出边Bundle的方向. 1. 上游节点的地址不重复 仔细看了一下sourceFn的实现: 其中要求上游节点中不存在重复的地址: 这样也就不存在decoded中存在两个元素同时为真的情况: 2. source.addr := sink.addr 在lazy module的实现中,把sink.addr输入到source.addr中: 而在DebugCustomBundle的定义中,

Rocket - debug - DMI

https://mp.weixin.qq.com/s/70BoeS7z4aBZK24zxdZzXA 简单介绍DMI的实现. 1. DMIConsts 定义DMI使用的常量: 其中: a. dmiDataSize为数据宽度: b. dmiOpSize为操作宽度: 2. DMIReq 定义DMI请求的结构: 其中: a. addr为请求地址,其宽度由参数传入: b. data为请求时使用的数据: c. op为请求的操作类型: 3. DMIResp 定义DMI响应的结构: 其中: a. data为响应