Rocket - debug - DebugCustomXbar再讨论

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

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

时间: 2024-10-05 16:32:07

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

Rocket - debug - DebugCustomXbar

https://mp.weixin.qq.com/s/7h9Bdb0x4_clyigMU_0B7Q 讨论DebugCustomXbar中的几个问题. 1. sources/sourceParams node.in.unzip解出来输入边中的BI, EI参数,分别是sources和sourceParams: 其中,sourceParams的类型为Seq[DebugCustomParams],其中包含了每一条输入边的地址列表(addrs:List[Int])和数据宽度: 2. decoded dec

getch()和getchar()之再讨论

原文:getch()和getchar()之再讨论 在C语言的字符处理函数中,getch()和getchar()是经常让人迷惑的两个函数,他们都有一些“奇怪的”特点让初学者摸不着头脑.两个函数有很多相似之处,却又有很大的不同.下面是两个函数的说明: int getch( void ); Get a character from the console without echo int getchar ( void );   Get character from stdin, Returns the

Rocket - debug - Periphery

https://mp.weixin.qq.com/s/uGxn-Xec0LkwdaSsCtQBvw 简单介绍Periphery的实现. 1. ExportDebugDMI/ExportDebugJTAG 这是两个参数,用于进行参数查找: ExportDebugDMI表示导出DMI接口: ExportDebugJTAG表示导出JTAG接口: 2. DebugIO 定义系统调试模块接口: 其中:clockeddmi和systemjtag只有一个存在: 3. HasPeripheryDebug Has

算法初步:再讨论一点动态规划

原创 by zoe.zhang 动态规划真的很好用啊,但是需要练习,还有很多技巧要学习. 1.滚动数组 动态规划是用空间换取时间,所以通常需要为DP数组开辟很大的内存空间来存放数据,但有的时候空间太大超过内存限制,特别是在OJ的时候,容易出现MLE的问题.而在一些动规的题目中,我们可以利用滚动数组来优化空间. 适用条件:DP状态转移方程中,仅仅需要前面若干个状态,而每一次转移后,都有若干个状态不会再被用到,也就是废弃掉,此时可以使用滚动数组来减少空间消耗. 优点:节约空间. 缺点:在时间消耗上没

Rocket - debug - Example: Selecting Harts

https://mp.weixin.qq.com/s/HjG5S9binyniG_amC3Dr5Q 介绍riscv-debug的使用实例:如何选择核心,执行Halt/Resume请求. 1. Selecting Harts 可以有多个核心连接在一个调试模块上,如果要让一个核心暂停.重新执行.复位,或者执行调试命令,需要先选择目标核心. A. Selecting a Single Hart 可以在hartsel中填入目标核心的编号,选择单个核心: B. Selecting Multiple Har

Rocket - debug - Custom

https://mp.weixin.qq.com/s/jkBP6ZjEbgm-SVDpLUMjlA 简单介绍Custom的实现. 1. DebugCustomParams 包含两个参数: a. addrs: 地址: b. width: 数据宽度: 2. DebugCustomNull 定义向上游传递的空参数: 3. DebugCustomBundle 定义DebugCustom节点连接所需要的Bundle: 从一个节点的角度看,其定义如下: 其中: a. 相连节点发送输入地址(addr),以及地

Rocket - debug - TLDebugModuleOuter

https://mp.weixin.qq.com/s/9nMo6IYmDCz7S-ALFx824g 简单介绍TLDebugModuleOuter的实现. 1. DebugModuleAccessType 定义调试模块访问宽度: 2. DebugAbstractCommandError 定义抽象命令访问错误: 3. DebugAbstractCommandType 定义抽象命令类型: 4. DebugModuleParams 定义调试模块参数: 其中: a. nDMIAddrSize:调试总线地址

Rocket - debug - TLDebugModuleInner - ROM Generation

https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbstract是一条指令,跳转到抽象命令的指令: Instruction.JAL是jump and link指令: GeneratedUJ用于生成一个UJ格式的指令结构: JAL属于J-format. GeneratedUJ的定义如下: jalAbstract.setImm(ABSTRACT(cfg)

Scratch 3.6角色碰到边缘反弹方向再讨论

引言 在Scratch中角色的移动是按一定方向移动的,所以方向在角色的移动中很重要,特别是在绘制一些几何图案的时候,不仅要考虑好移动距离,还必须确定好移动方向.下图给出Scratch 3.X中精灵的方向规定. Scratch积木"碰到边缘就反弹" Scratch的基本积木模块"碰到边缘就反弹",其反弹遵循物理学上光线的反射规律,即"入射角等于反射角"(入射方向与法线夹角为入射角:反射方向与法线夹角为反射角).参考下图: 为了下面讨论方便,我们特别