码迷,mamicode.com
首页 > 其他好文 > 详细

Rocket - debug - DebugCustomXbar再讨论

时间:2020-01-23 09:28:34      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:存在   Requires   val   cer   get   anti   bdd   width   f11   

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/DUWhUd3liY1hBcWdh

 

5. 总结

 

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

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

技术图片

技术图片

 

 

Rocket - debug - DebugCustomXbar再讨论

标签:存在   Requires   val   cer   get   anti   bdd   width   f11   

原文地址:https://www.cnblogs.com/wjcdx/p/12230027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!