• Rocket


    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的定义中,addr的方向是Input:

     

    也就是说DebugCustomXbar节点的输入边对应的DebugCustomBundle的方向被反转了,而输出边对应的DebugCustomBundle的方向没有被反转。就是下图的情况:

     

    输入边对应的Bundle的方向在哪里被反转的呢?

     

    3. 一个例子:TLBundle & TLBundleA

     

    TLBundleA中没有定义方向:

     

    TLBundle中使用Decoupled来定义方向:

     

    Decoupled->DecoupledIO->ReadyValidIO的方向使用的是Producer的视角:

     

    一般情况下,一个TileLink节点N包含两个TLBundleA:分别与输入边和输出边对应。

    与输出边对应的TLBundleA连接下游节点,节点N的角色是Producer,所以TLBundleA不需要反转方向。

    与输入边对应的TLBundleA连接上游节点,节点N的角色是Consumer,所以TLBundleA需要反转方向。

     

    也就是说,输入边对应的Bundle应该反转方向。

     

    4. 在哪里反转方向?

     

    跟踪LazyModule的使用和初始化代码,确定在哪里反转的。

     

     

    因为流程较长,放在其他文件中了,下面以参考链接的形式列出。

     

    A. Level 0

     

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

     

    B. new DebugCustomXbar(outputRequiresInput = false)

     

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

     

    C. 引用xbar.module

     

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

     

    5. 总结

     

    a. 输入边对应的Bundle的方向会被反转;

    b. 反转的位置在LazyModuleImpLike.instantiate()中调用的AutoBundle.makeElements中:

     

     

  • 相关阅读:
    2020.05.27
    static{}静态代码块与{}普通代码块之间的区别
    Spring 注解@Autowired注解
    java:List的深拷贝
    IDEA中MAVEN无法自动加载的问题
    java Comparator接口
    JAVA ArrayList<E>
    JAVA BigInteger
    JAVA输入输出
    JAVA String,StringBuilder的一些API
  • 原文地址:https://www.cnblogs.com/wjcdx/p/12230027.html
Copyright © 2020-2023  润新知