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
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的更多相关文章
- Rocket - debug - DebugCustomXbar再讨论
https://mp.weixin.qq.com/s/YPFa6kE6I_Ud_MJGvzmS-g 简单讨论输入边/输出边Bundle的方向. 1. 上游节点的地址不重复 仔细看了一下sourceFn ...
- Rocket - debug - Periphery
https://mp.weixin.qq.com/s/uGxn-Xec0LkwdaSsCtQBvw 简单介绍Periphery的实现. 1. ExportDebugDMI/ExportDebugJTA ...
- Rocket - debug - TLDebugModuleInner - Hart Bus Access
https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考 ...
- Rocket - debug - DebugTransport
https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTM ...
- Rocket - debug - TLDebugModule
https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA 简单介绍TLDebugModule中的实现. 1. device device是一个设备描述符,包含 ...
- Rocket - debug - TLDebugModuleInner - Drive Custom Access
https://mp.weixin.qq.com/s/1bIqzDYXM36MIfSsjvvYIw 简单介绍TLDebugModuleInner中的针对Custom的访问. 1. customNode ...
- Rocket - debug - TLDebugModuleInner - ROM Generation
https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...
- Rocket - debug - Custom
https://mp.weixin.qq.com/s/jkBP6ZjEbgm-SVDpLUMjlA 简单介绍Custom的实现. 1. DebugCustomParams 包含两个参数: a. add ...
- Rocket - debug - Example: DMI
https://mp.weixin.qq.com/s/7suuJ7m2BKCpsHk1K2FzJQ 介绍riscv-debug的使用实例:如何使用DMI. 1. dm Debug Module实现了调 ...
随机推荐
- JAVA基础篇 之 finalize()方法的作用
我们知道java有垃圾回收器负责回收无用对象占据的内存资源,但也有特殊情况:假设你的对象(并非使用new)获得了一块特殊的内存区域,由于垃圾回收器只知道回收那些经由new分配的内存,所以它不知道如 ...
- ReentrantLock源码解析
ReentrantLock 1 数据结构 从上图可以看出,ReentrantLock的功能都是通过sync这个对象提供的. public class ReentrantLock implements ...
- VA01销售订单批导问题解决
1业务场景 事务代码:VA01创建销售订单,VA02修改销售订单 可以通过BAPI_SALESORDER_CREATEFROMDAT2批量创建 可以通过BAPI_SALESORDER_CHANGE批量 ...
- Coda docs
a doc,反过来就是coda,有点冷. 对我而言,在线文档的好处在于在线数据库.存放代码等. Quip能高亮代码,但有时墙内不香,害得我用APP查看记录.Slite能高亮代码,但表格功能弱.号称al ...
- Linux安装tomcat并部署JavaWeb项目
前提条件: 安装tomcat前请确认一下信息: 系统安装了JDK,且JDK版本应与javaWeb所使用的JDK一致,具体操作可参见Linux下安装JDK. 打包了javaWeb的.war 文件,具体操 ...
- [hdu2222]ac自动机(模板)
题意:一个文本串+多个模板串的匹配问题 思路:裸的ac自动机. #pragma comment(linker, "/STACK:10240000,10240000") #inclu ...
- ssh chroot 设置
目的 让特定的用户登录linux服务器后,对其操作权限进行限制: 不能使用任何方式杀掉服务器现有的进程 最好只能查看相关的目录和文件 最好只能运行特定的命令,比如cat.ls.tail等 场景模拟 一 ...
- 数据库连接池Druid的介绍,配置分析对比总结
Druid的简介 Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBos ...
- Linux 命令行下搜索工具大盘点,效率提高不止一倍!
在 Linux 命令行下进行文本关键字的搜索,大家肯定第一时间会想到 grep 命令.grep 命令确实十分强大,但如果需要用到它更加灵活的功能时,可能命令就会显得十分复杂. 于是,为了简化 grep ...
- 关于idea的一次踩坑记录-Auto build completed with errors
maven项目添加pom依赖后,一直不能正常导入所依赖的jar包,并且报错“ Auto build completed with errors”