https://mp.weixin.qq.com/s/X0s5CWN84GEiwpNR7tiRgA

基于AddressAdjuster介绍LazyModule的实现。

 
 
1. AddressAdjuster
 
 
地址适配器,根据chip_id & mask对地址进行区分:
a. 与chip_id & mask相同的在本地(local)处理;
b. 不同的使用远端(remote)处理;
 
2. LazyModule的实现:lazy val module
 
1) AddressAdjuster是一个中间节点,他有一个上游节点(对应一个输入边),两个下游节点(对应两个输出边):
 
2) 计算需要Local节点处理的地址:
效果相当于:local_address = chip_id & mask
 
以channel A为例:
根据地址是否应当由local处理:val a_local: Bool = local_address === (parent.a.bits.address & mask.U)
a. 设置parent.a.ready由谁输入;
b. 设置parent.a.valid输出到谁;
c. 把parent.a.bits输出到local.a.bits/remote.a.bits;
 
3) 错误处理
 
计算local能处理的地址范围:
 
parent的地址是否包含在local中:
 
地址没在范围内,或者执行不支持的操作,则为错误:
 
对local节点channel A的地址进行适配:
a. 如果没出错,则使用parent.a.bits.address;
b. 如果出错,则使用错误地址:errorSet.base.U;
 
错误的地址会把操作导向错误处理设备:errorDev。
 
4) 小结
 
这里有两层适配:
a. 根据parent.a.bits.address & mask是否与chip_id & mask相等,决定parent对接的是local还是remote;
b. 根据local是否能处理对接到他的地址,决定是否把地址适配成为错误处理地址;
 
3. Node的实现:val node
 
AddressAdjuster中的node,用于与其他节点相连接以组成拓扑结构,以及用于协商参数。
 
 
1) clientFn & managerFn
 
clientFn为dFn,用于把参数向下游传递,managerFn为uFn,用于把参数向上游传递:
 
 
 
clientFn和managerFn返回一个参数:val a = uFn(p),
然后复制成n个:Seq.fill(n)(a)
 
这里,clientFn的返回值被复制成2个,managerFn的返回值被复制成1个。
 
2) managerFn
 
managerFn是uFn,使用两个输出边的参数(UO),生成一个输入边的参数(UI):
 
生成的参数如下:
很遗憾的是,因为AddressAdjuster没有被使用,所以也无法得知这个新生成的参数(UI)如何使用。
 
从其实现上,可以得到如下信息:
a. endSinkId:AddressAdjuster的endSinkId是local和remote的endSinkId之和;
b. minLatency:AddressAdjuster的minLatency是local和remote中的较小值;
c. managers:这个下面单看;
 
从endSinkId和minLatency两个参数看,UI是对两个UO的综合。
 
3) managers
 
a. checkMask
 
AddressAdjuster的mask中的所有比特位,都在local/remote的AddressSet的mask中。
也就是说AddressAdjuster的mask中的比特,是local/remote的所有AddressSet的mask中比特的共同子集。
 
b. 使用AddressAdjuster的mask的AddressSet
 
mask之外的地址集合:AddressSet(id, ~mask)
其中,id从ids中取值:
 
c. local的地址集合是remote的子集
 
 
d. AddressSet(0, ~mask)中的地址漏洞(holes)
 
ra: remote中的地址漏洞;
la: la中的地址漏洞;
holes: ra中的地址集合减去la中的地址集合;
 
这些地址漏洞中的地址要转发(route)到local中去处理,所以la就不算是漏洞,需要从ra中减掉。
 
e. newLocal
 
 
newLocal的地址集合是原地址集合与(0, ~mask)的交集。如果是errorDev,那么还要处理ra的地址漏洞。
 
f. newRemote
 
newRemote的地址集合是原地址集合与(id, ~mask)的交集。
 
问题1:为什么这里没有减去local与(id, ~mask)的交集?
 
g. newLocal + newRemote
 
UI的managers如下:
 
问题2:为什么UI参数的managers中的地址集合,都是原local/remote地址集合与mask之外地址集合的交集呢?
 
因为不知道这个参数如何使用,所以这两个问题就不得而知了。
 
4. 另外一个Node:val chip_id
 
这也是一个Node。
所以AddressAdjuster中包含两个节点(node, chip_id),都可以与其他节点相连接。
 
5. 附录
 
AddressAdjuster.scala:
 

Rocket - diplomacy - AddressAdjuster的更多相关文章

  1. Rocket - diplomacy - AddressAdjuster分析

    https://mp.weixin.qq.com/s/UYVSO3XFJmhe5bUD_XbMLg   先介绍如何使用AddressAdjuster,然后分析UI参数的生成及使用.   ​​   1. ...

  2. Rocket - diplomacy - LazyModule的组织方式

    https://mp.weixin.qq.com/s/vaDUekxkFkOJLmzg5jCngw 简单介绍LazyModule/LazyModuleImp的组织方式. 1. LazyModule L ...

  3. Rocket - diplomacy - LazyModule的实例化(补)

    https://mp.weixin.qq.com/s/rgCRorjPYyyD6i7moIzbZg   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIn ...

  4. Rocket - diplomacy - LazyModule的实例化

    https://mp.weixin.qq.com/s/9PsBt4_4qHx4i6C5XtuiUw   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIn ...

  5. Rocket - diplomacy - LazyModule

    https://mp.weixin.qq.com/s/FBU8fE4u9-UK6mRGQOlvbQ   介绍LazyModule的实现.     ​​   1. children   LazyModu ...

  6. Rocket - diplomacy - ValName

    https://mp.weixin.qq.com/s/so-2x5KLfYF0IMCCqNThwQ   简单调试ValName实现:   1. 使用     ​​   Desugar之后如下: ​​ ...

  7. Rocket - diplomacy - NodeHandle相关类

    https://mp.weixin.qq.com/s/GWL41P1G1BXm2sTeLmckdA   介绍NodeHandle相关的类.     ​​   1. NoHandle   顶层类(tra ...

  8. Rocket - diplomacy - DUEB参数模型的设计

    https://mp.weixin.qq.com/s/9PEEpe1pkQDN9RWpOGSUCQ   介绍DUEB参数模型的设计,不包含实现(实现对设计做了简化).     1. DUEB   di ...

  9. Rocket - diplomacy - 模块结构信息

    https://mp.weixin.qq.com/s/cTRxXwWNEeb4-XX_t4bRcg   讨论模块结构信息的来源及使用方式.     ​​   1. diplomacy   diplom ...

随机推荐

  1. C. Ilya And The Tree 树形dp 暴力

    C. Ilya And The Tree 写法还是比较容易想到,但是这么暴力的写法不是那么的敢写. 就直接枚举了每一个点上面的点的所有的情况,对于这个点不放进去特判一下,然后排序去重提高效率. 注意d ...

  2. A. A Twisty Movement dp

    https://codeforces.com/problemset/problem/933/A 这个是一个dp,但是我并没有看出来,然后也不太会写, 这种题一般应该要想到先预处理前缀和后缀,然后再进行 ...

  3. 文件相关命令(find,tree,tar)文件属性信息 date

    6.13day11 文件相关命令(find,tree,tar)文件属性信息date 1 文件相关命令 1.1 find命令 查找文件用f find /root -type f -name " ...

  4. IDOC日志查询报表

    当不知道IDOC同步的具体时间,而WE02数据量过大时: 当某条IDOC记录中数据量过大,找不到具体某条数据时: 可采用自开发程序查找,具体代码如下: REPORT ZIDOC_LOG. *----- ...

  5. SAP登录消息提醒

      1功能说明 在相应用户登录时,给其提示相关信息. 2功能实现 2.1函数实现 在函数NAVIGATION_SET_START_TCODE中注册要监听的用户和程序的事务代码,当用户登录时,将自动运行 ...

  6. STM32 Cube之旅-尝试新的开发方式

    尝试使用Cube进行一些开发学习,这里对此做一个梗概,先有一个全面的了解. 文章目录 Cube全家桶 CubeMX CubeIDE CubeProg 结语 Cube全家桶 曾几何时,ST刚推出Cube ...

  7. 深入理解JS中的对象(二):new 的工作原理

    目录 序言 不同返回值的构造函数 深入 new 调用函数原理 总结 参考 1.序言 在 深入理解JS中的对象(一):原型.原型链和构造函数 中,我们分析了JS中是否一切皆对象以及对象的原型.原型链和构 ...

  8. vue 下拉刷新实现

    [手动实现下拉刷新]可以用vue-pull-refash 插件代替 //下拉刷新 let scroll = this.$ref.scroll // 获取当前要拖拽的元素 let top = scrol ...

  9. 相机测试camera报告的问题

    AE问题 整体偏亮 整体偏暗 高光过爆 暗处过暗 对比度低/高 亮度: 关注暗处过暗 高光过爆   对比度: 关注头发,衣服 对比度低照片会有好像一层薄薄的,发蒙 关注植物,会有灰色的 AWB问题 偏 ...

  10. 关于RAID小结

    独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks ...