https://mp.weixin.qq.com/s/PSeMVZjSjEFHJgCYZzfa9Q

简单介绍TLDebugModuleOuterAsync的实现。

1. dmi2tl

dmi2tl是TLDebugModuleOuterAsync中的一个子模块,用于把dmi接口转换为tilelink接口。

其结构图如下:

2. dmiXbar

dmiXbar是一个TLXbar模块,用于连接多个TileLink模块:

3. dmOuter

dmOuter也是一个子模块:

4. intnode

intnode是一个别名,dmOuter.intnode经过一个IntSyncCrossingSource生成的结构:

结构示意如下:

5. dmiInnerNode

dmiInnerNode是dmiXbar.node经过TLAsyncCrossingSource之后生成的结构:

结构示意如下:

6. 内部子节点

1) TLDebugModuleOuterAsync各个内部子节点如下:

2) 对内部部分节点进行了连接:

结构示意图如下:

可以看到io.dmi经过dmi2tl转换为tilelink接口,连接到dmiXbar节点。

a. 进而连接到dmOuter节点的dmiNode访问dmOuter中的寄存器;

b. 也经过TLAsyncCrossingSource节点跨域与inner节点连接;

7. lazy val module

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

1) 这里声明了IO接口:

2) 又进行了一定的接口连接:

示意图如下(可以单独打开图片查看):

8. 总结

1) io.dmi

io.dmi用于实现DMI访问。通过DMI接口读写DMI地址空间的寄存器对调试模块进行控制。

在实现中,DMI地址空间被分为了outer和inner两个部分。outer部分对应的是dmiNode:TLRegisterNode;inner部分通过TLAsyncCrossingSource模块跨域进行访问。

2) io.ctrl

io.ctrl的定义如下:

其方向无论是在TLDebugModuleOuter中还是在TLDebugModuleOuterSync中都没有进行转向(flip)。所以这里就是:

a. debugUnavail从outerSync输出到outer

debugUnavail用于从外部控制调试模块是否可用,在outerSync内部并没有被使用。

b. ndreset从outer输出到outerSync

ndreset的值来自于DMCONTROL寄存器的ndmcontrol位:

其意义在于复位系统中除调试模块之外的其他部分:

ndreset最终用于控制系统其他模块复位:

c. dmactive从outer输出到outerSync;

dmactive的值来自于DMCONTROL寄存器的dmactive位:

用于复位调试模块:

3) io.innerCtrl

io.innerCtrl定义如下:

根据注释,用于从outer传递控制信息到inner。因为其定义中没有方向信息,所以整个结构全部信号值传递的方向是一致的:都是从outer到inner。

Rocket - debug - TLDebugModuleOuterAsync的更多相关文章

  1. Rocket - debug - TLDebugModule

    https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA 简单介绍TLDebugModule中的实现. 1. device device是一个设备描述符,包含 ...

  2. Rocket - debug - TLDebugModuleInner - Hart Bus Access

    https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考 ...

  3. Rocket - debug - Periphery

    https://mp.weixin.qq.com/s/uGxn-Xec0LkwdaSsCtQBvw 简单介绍Periphery的实现. 1. ExportDebugDMI/ExportDebugJTA ...

  4. Rocket - debug - DebugTransport

    https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTM ...

  5. Rocket - debug - TLDebugModuleInner - ROM Generation

    https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...

  6. Rocket - debug - Example: DMI

    https://mp.weixin.qq.com/s/7suuJ7m2BKCpsHk1K2FzJQ 介绍riscv-debug的使用实例:如何使用DMI. 1. dm Debug Module实现了调 ...

  7. Rocket - debug - Example: Triggers

    https://mp.weixin.qq.com/s/zPNyrBOhsytkRrZTDTEvpw 介绍riscv-debug的使用实例:配置Triggers功能. 1. Trigger Trigge ...

  8. Rocket - debug - Example: Accessing Registers Using Program Buffer

    https://mp.weixin.qq.com/s/8yYLVg-RXX3XX0T431lxeA 介绍riscv debug接口的使用实例:使用Program Buffer读取寄存器. 1. Wri ...

  9. Rocket - debug - Example: Accessing Registers Using Abstract Command

    https://mp.weixin.qq.com/s/RdJzE06mMkh2x__vVj_fEA 介绍riscv debug接口的使用实例:使用抽象命令读取寄存器. 1. Read s0 using ...

随机推荐

  1. js上传文件过大导致上传失败原因以及解决办法

    背景:项目需要用到上传视频功能,由于视频有知识产权,要求必须上传到自己的服务器上不允许用第三方视频网站接口上传,于是一开始开始用的是input type=file去上传,小的视频上传没有问题,上传将近 ...

  2. FreeAnchor:抛弃单一的IoU匹配,更自由的anchor匹配方法 | NIPS 2019

    论文抛弃以往根据IoU硬性指定anchor和GT匹配关系的方法,提出FreeAnchor方法来进行更自由的匹配,该方法将目标检测的训练定义为最大似然估计(MLE)过程,端到端地同时学习目标分类.目标检 ...

  3. IDEA打包JavaWeb项目

    IDEA打包JavaWeb项目 步骤: 1.配置项目->2.Build Artifacts->3.找到.war文件 具体操作: 首先,单击顶部工具栏的“File”选项,在弹出选项中选择“P ...

  4. 设计模式之GOF23享元模式

    享元模式FlyWeight 场景:如果有很多个完全相同或者相似的对象,可以节省内存资源 核心: 享元模式以共享的方式高效地支持大量细粒对象的重用 享元对象做到共享的关键是区分了内部状态和外部状态: 内 ...

  5. sql查重去除id最小值

    select order_id FROM yzj_store_order t WHERE (t.user_id,t.order_status) IN ( SELECT user_id,order_st ...

  6. CSS解决border影响元素宽高的问题(box-sizing属性)

    修改 box-sizing 属性.将 box-sizing 设置为 border-box 即可.

  7. SpringMVC 设置全局DateTime json返回格式

    对于部分返回DateTime的项目,只需要在指定属性上添加@JsonSerialize 使用自定义的json转换格式即可自定义返回DateTime格式 但是对于项目中返回有多个DateTime字段来说 ...

  8. 力扣题解-面试题58 - II. 左旋转字符串

    题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能. 比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转 ...

  9. node的querystring

    querystring.stringify({name:''scott",course:['jade','java'],from=''}); => 'name=scott&co ...

  10. 2.4 Go与包

    1.1Go与包 1.1.1.  Go与包 1)开发中,往往要在不同的文件中调用其他文件的函数 2)Go代码最小粒度单位是"包" 3)Go的每一个文件都属于一个包,通过package ...