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中:

Rocket - debug - DebugCustomXbar再讨论的更多相关文章

  1. Rocket - debug - DebugCustomXbar

    https://mp.weixin.qq.com/s/7h9Bdb0x4_clyigMU_0B7Q 讨论DebugCustomXbar中的几个问题. 1. sources/sourceParams n ...

  2. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  3. getch()和getchar()之再讨论

    原文:getch()和getchar()之再讨论 在C语言的字符处理函数中,getch()和getchar()是经常让人迷惑的两个函数,他们都有一些“奇怪的”特点让初学者摸不着头脑.两个函数有很多相似 ...

  4. 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 数据库连接不释放测试 连接池 释放连接 关闭连接 有关 redis-py 连接池会导致服务器产生大量 CLOSE_WAIT 的再讨论以及一个解决方案

    import pymysqlfrom redis import Redisimport time h, pt, u, p, db = '192.168.2.210', 3306, 'root', 'n ...

  5. Rocket - debug - Periphery

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

  6. Rocket - debug - TLDebugModuleInner - Hart Bus Access

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

  7. Rocket - debug - DebugTransport

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

  8. Rocket - debug - TLDebugModule

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

  9. Rocket - debug - TLDebugModuleInnerAsync

    https://mp.weixin.qq.com/s/Xf4VFTHIDFh1NHmfwlTX3w 简单介绍TLDebugModuleInnerAsync的实现. 1. dmInner dmInner ...

随机推荐

  1. P1680 奇怪的分组(组合数+逆元)

    传送门戳我 首先将n减去所有的Ci,于是是原问题转换为:n个相同的球放入m个不同盒子里,不能为空,求方案数. 根据插空法:n个球,放到m个箱子里去不能为空,也就是有m-1块板子放在n-1个空隙之间 那 ...

  2. 动态代理学习(二)JDK动态代理源码分析

    上篇文章我们学习了如何自己实现一个动态代理,这篇文章我们从源码角度来分析下JDK的动态代理 先看一个Demo: public class MyInvocationHandler implements ...

  3. 王颖奇 201771010129《面向对象程序设计(java)》第一周学习总结

    <面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com wangyingqi 程序 ...

  4. Java Stream 流如何进行合并操作

    1. 前言 Java Stream Api 提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为流进行操作.今天我们来看看如何合并 Stream 流. 2. Stream 流的合并 ...

  5. 移动端H5支付(微信和支付宝)

    我们直接进入主题吧,先说功能: 1.用户通过我们的页面输入充值帐号和金额调起支付(微信或者支付宝),支付成功返回获取支付结果. 2.微信支付成功后重定向到指定页面(没有设置重定向地址的话,默认返回调起 ...

  6. 内网穿透访问Vue项目的时候出现Invalid Host header解决办法

    适用场景: 在本地的Vue-cli3项目, 需要其他人浏览. 如果没有外网的服务器, 可以把自己的电脑当做服务器. 这时候需要外网的人能访问到自己的电脑. Mac内网穿透工具:natapp Inval ...

  7. equals方法和 == 的使用

    equals方法的使用 equals方法 源码展示: public boolean equals(Object obj) { return (this == obj); } 解析: equals方法默 ...

  8. Git与GitHub常用操作

    --------------------------基本操作--------------------------clone 拷贝远程仓库commit 本地提交push 远程提交pull 更新本地--- ...

  9. java ->大的数据运算(BigInteger)

    大数据运算 BigInteger java中long型为最大整数类型,对于超过long型的数据如何去表示呢.在Java的世界中,超过long型的整数已经不能被称为整数了,它们被封装成BigIntege ...

  10. 手把手教系列之IIR滤波器设计

    [导读]:在嵌入式系统中经常需要采集模拟信号,采集模拟信号的信号链中难免引入干扰,那么如何滤除干扰呢?今天就来个一步一步描述如何设计部署一个IIR滤波器到你的系统. 何为IIR滤波器? 无限冲激响应( ...