zoukankan      html  css  js  c++  java
  • Rocket

    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。

     

  • 相关阅读:
    About Inside the Azure Storage Outage of November 18th
    Microsoft Azure 的一些限制 Global
    js递归遍历树形json数据,根据关键字查找节点
    如何修改 WordPress 的默认 Gravatar 头像
    flatpickr功能强大的日期时间选择器插件
    express框架,使用 static 访问 public 内静态文件
    nodejs实时的检测系统文件的变化(无需重启服务)
    redis的常用命令
    NPM install -save 和 -save-dev 傻傻分不清
    Git的使用--如何将本地项目上传到Github
  • 原文地址:https://www.cnblogs.com/wjcdx/p/12639751.html
Copyright © 2011-2022 走看看