• Rocket


    https://mp.weixin.qq.com/s/1bIqzDYXM36MIfSsjvvYIw

     

    简单介绍TLDebugModuleInner中的针对Custom的访问。

     

     

    1. customNode

     

    customNode定义为DebugCustomSink类型的节点:

     

    根据DebugCustomSink的定义,customNode所属的模块为调试模块:

    这与customNode所属的模块为TLDebugModuleInner相符。

     

    Custom相关节点到连接图如下,供参考:

     

    2. needCustom

     

    needCustom标志着是否需要生成Custom逻辑:

    其中到两个条件为:

    a. 包含一个以上的输入边;

    b. 包含一个以上的地址可供访问;

     

    customNode代表调试模块,customNode.in代表与被调试模块到连接。这两个条件到意义也就是存在被调试模块,被调试模块存在可被访问到地址。

     

    3. accessRegIsCustom

     

    accessRegIsCustom表示抽象命令访问到寄存器是否属于Custom节点:

    其中:

    a. 如果customNode没有输入边,也就是没有被调试模块,则直接返回假;

    b. 如果存在输入边,则把访问到寄存器地址与输入边中的地址相比较;

     

    这里只比较了customNode.in.head的地址,也就是第一个输入边相对应到模块到地址。难道不能有多个被调试模块吗?

     

    可以有,他们都通过DebugCustomXbar与调试模块相连,所以与调试模块相连到也就只有DebugCustomXbar这一个模块了:

     

    DebugCustomXbar也限定了只有一个输出边连接一个Sink节点:

    也就是只有一个调试模块与之相连。

     

    4. goCustom

     

    在检测生成的命令阶段,如果访问到寄存器地址在Custom源节点,那么会进入Custom状态:

    否则,进入命令执行状态。也就是命令由Custom相关节点执行。

     

    在Custom状态,设置goCustom为真:

    如果custom.ready和custom.valid同时为真,也就是命令执行结束(数据从Custom源节点返回),就进入下一个状态(Waiting)。

     

    5. Drive Custom Access

     

    抽象命令中的寄存器编号就是要访问的地址(custom.addr):

    根据地址是否属于Custom源节点(goCustom)确定custom.valid是否为真。

     

    6. abstractDataMem

     

    当数据从Custom源节点返回时,将其存入abstractDataMem中:

    参考注释:

                 

     

  • 相关阅读:
    ES2017中的修饰器Decorator
    ES6中的模块
    代理(Proxy)和反射(Reflection)
    ES2017中的async函数
    ES6数字扩展
    Promise和异步编程
    ES6定型数组
    ES6数组扩展
    ES6中的类
    ES6中的Set和Map集合
  • 原文地址:https://www.cnblogs.com/wjcdx/p/12595214.html
Copyright © 2020-2023  润新知