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

decoded是对sourceParams中的每一个元素做map操作:

而sourceParams中的每一个元素代表了一个输入边的参数,这个输入边的参数中包含了多个地址,每一个地址都与sink.addr进行比较,最后输出一个结果(Bool)。

sourceParams中的所有元素,亦即所有边的比较结果(Bool)集合在一起,成为decoded(Seq[Bool])。也就是说,decoded中的每一个掩码表示了sink.addr与相应输入边中地址参数比对的结果,即sink.addr是否选择输入边连接的source。

3. sourceParams与dSeq

diplomacy node的sourceFn中的dSeq也是Seq[DebugCustomParams]:

这里的dSeq与sourceParams是什么关系?相同吗?

sourceFn是把当前节点即DebugCustomXbar节点看到的上游节点的参数,转换为下游节点看到的DebugCustomXbar节点的参数。

即dSeq是DebugCustomXbar节点看到的上游节点的参数,DebugCustomXbar节点根据这组参数生成lazy module。所以lazy module中的sourceParams,其实就是这sourceFn中的dSeq。

sourceFn把dSeq中全部的地址集合到一起进行了去重操作,然后传递给下游节点(调试模块)。所以这里默认dSeq中不同的source节点可能包含重复的地址。

综合这两点:decoded中可能存在两个或更多个为真的值。从这个结论出发,会导致很多问题。

4. source.addr & source.valid

可能存在多个source.valid为真,进而sink.addr输入到source.addr中被认为合法:

5. sink.ready

可能存在多个d & i.ready为真,进而向sink.ready中输入真:

6. sink.data

即便把i.ready更改为d & i.ready,也可能存在多个i.data输出相或在一起,从而导致sink.data错误:

7. 总结

这里存在两种情况:

a. 存在一个假设,即上游节点的地址不互相重复,那么sourceFn中去重的代码多余;

b. 上游节点的地址可以互相重复,那么decoded需要使用带优先级的掩码(参考仲裁器的实现);

8. 勘误及补充:

sourceFn中有限制各个source节点的地址不重复:require(all_addrs.size == all_addrs.distinct.size, "Different Custom sources can't use the same addresses.")。

Rocket - debug - DebugCustomXbar的更多相关文章

  1. Rocket - debug - DebugCustomXbar再讨论

    https://mp.weixin.qq.com/s/YPFa6kE6I_Ud_MJGvzmS-g 简单讨论输入边/输出边Bundle的方向. 1. 上游节点的地址不重复 仔细看了一下sourceFn ...

  2. Rocket - debug - Periphery

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

  3. Rocket - debug - TLDebugModuleInner - Hart Bus Access

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

  4. Rocket - debug - DebugTransport

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

  5. Rocket - debug - TLDebugModule

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

  6. Rocket - debug - TLDebugModuleInner - Drive Custom Access

    https://mp.weixin.qq.com/s/1bIqzDYXM36MIfSsjvvYIw 简单介绍TLDebugModuleInner中的针对Custom的访问. 1. customNode ...

  7. Rocket - debug - TLDebugModuleInner - ROM Generation

    https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...

  8. Rocket - debug - Custom

    https://mp.weixin.qq.com/s/jkBP6ZjEbgm-SVDpLUMjlA 简单介绍Custom的实现. 1. DebugCustomParams 包含两个参数: a. add ...

  9. Rocket - debug - Example: DMI

    https://mp.weixin.qq.com/s/7suuJ7m2BKCpsHk1K2FzJQ 介绍riscv-debug的使用实例:如何使用DMI. 1. dm Debug Module实现了调 ...

随机推荐

  1. tp5中提示错误A non well formed numeric value encountered

    问题因为自动完成时间导致的 原来我的数据库是这样的 修改成下面这样就好了

  2. LTE网络概述

    LTE主要由两部分组成:无线接入技术演进(E-UTRAN)+系统架构演进(SAE):其中,SAE主要含有的是演进型分组交换核心网(EPC),其控制处理部分为移动性管理实体(MME),数据承载部分称为业 ...

  3. .Net Core WPF之XAML概述

    原文链接,机器翻译,有误处参看原文. XAML overview in WPF 2019/08/08 What is XAML XAML syntax in brief Case and white ...

  4. Qt之分模块log

    说明 对于一般的log,使用 qInstallMessageHandler 重定向到文件即可,甚至可以根据日志等级,分类存储.但是并不是适用所有情况,比如,程序运行时动态创建模块,而每个模块需要创建不 ...

  5. 【跟我一起读 linux 源码 01】boot

    计算机启动流程在我的上一个学习计划<自制操作系统>系列中,已经从完全不知道,过渡到了现在的了如指掌了,虽然有些夸张,但整个大体流程已经像过电影一样在我脑海里了,所以在看 linux 源码的 ...

  6. 00005-js 获取uuid

    admin.guid = function () { function S4() { return (((1+Math.random())*0x10000)|0).toString(16).subst ...

  7. P1880 [NOI1995]石子合并 区间dp

    P1880 [NOI1995]石子合并 #include <bits/stdc++.h> using namespace std; ; const int inf = 0x3f3f3f3f ...

  8. css3复杂选择器

    一.复杂选择器 1.兄弟选择器 兄弟元素,具备相同父元素的平级元素之间称为兄弟元素 兄弟选择器,只能找弟弟,不能找哥哥,只能往后找,不能往前找 ①相邻兄弟选择器 选择器 + 选择器{} 获取紧紧挨在某 ...

  9. JS函数和对象

    1.函数 isNaN(数据)/parseInt/parseFloat/Number/prompt... 函数分为系统函数和自定义函数 function: 功能体,函数(方法),可以接受若干个数据,返回 ...

  10. Java中JVM相关面试题-整理

    1.JVM内存模型 •程序计数器:当前线程字所执行节码的行号指示器,用于记录正在执行的虚拟机字节指令地址,线程私有. •Java虚拟机栈:存放基本数据类型,对象的引用,方法出口等,线程私有. •本地方 ...