https://mp.weixin.qq.com/s/1I6DcONr0Mg7xiX8F1C7SQ

 
简单介绍TileLink相关的参数实现(具体问题暂时不展开,后续用到时再做分析)。
 
 
1. TLManagerParameters
 
定义TileLink Manager节点的参数,Manager节点为Sink节点。
 
1) 参数列表
 
a. address:支持的地址集合;
b. resources:包含的资源;
c. regionType:区域类型;
d. executable:是否可执行;
e. nodePath:使用本参数的节点的路径;
f. 能力标志:supportsXXX, mayDenyXXX等;
g. fifoId:是否支持FIFO,以及FIFO的编号;
 
2) 限制条件
 
 
a. 支持的地址集合不能为空;
b. 支持的地址集合不能包含无限个地址;
c. 任意两个地址集合不能重叠;
d. 支持PutFull操作的大小不能小于PutPartial;
e. 支持PutFull操作的大小不能小于Arithmetic;
f. 支持PutFull操作的大小不能小于Logical;
g. 支持Get操作的大小不能小于Arithmetic;
h. 支持Get操作的大小不能小于Logical;
i. 支持Acquire Branch操作的大小不能小于Acquire Trunk;
 
3) name
 
TLManagerParameters是下游(Sink)节点的参数,其传递方向是从下游向上游(Upward)传递。nodePath中记录了参数传递过程中经历的节点:
 
name表示最后一个节点的名称。如果没有,则使用默认值“disconnected”。
 
4) maxTransfer
 
各个操作支持的最大的传输大小:
 
5) maxAddress
 
节点支持的最大的地址:
 
6) minAlignment
 
节点支持的最小对齐:
 
要求最小对齐不小于最大传输大小:
 
7) toResource
 
生成地址空间资源类型的描述:
 
8) findTreeViolation/isTree
 
查找是否存在破坏规则的节点:
 
2. TLManagerPortParameters
 
一个Manager Port包含多个Manager:
 
1) 参数列表
 
a. managers: 包含的Managers;
b. beatBytes:单个时钟(心跳、beat)可以传递的数据宽度(字节数);
c. endSinkId:最后一个下游节点的编号;
d. minLatency:最小延迟;
 
2) 限制条件
 
其中:beatBytes需要是2的幂;
 
3) requireFifo
 
所有的manager节点必须都定义fifoId,并且都相同。
 
4) 能力
 
 
5) 软件查找:def find(address: BigInt)
 
在软件执行期使用的查找功能:
返回包含第一个包含address的manager。
 
6) 硬件查找
 
生成一个硬件查找逻辑:
 
a. findSafe(UInt)
 
逐个生成查找逻辑。
 
b. findFast(UInt)
 
快速查找:
- 使用AddressDecoder生成需要比对的位的掩码:val routingMask = AddressDecoder(managers.map(_.address));
- 忽略不需要比对的位:_.address.map(_.widen(~routingMask))
- 把扩展后生成的新地址去重:.distinct.
- 再检查是否包含address:.map(_.contains(address)).reduce(_ || _)
 
剩余的find不再介绍。
 
7) 能力
 
使用safe和fast两种方式实现的是否支持能力判断方法:
 
8) findTreeViolation/isTree
 
检查所有manager是否都符合规则:
 
3. TLClientParameters
 
TileLink的Client端为上游(Source),定义其参数:
 
1) 参数列表
 
a. name: 名称;
b. sourceId:源端编号;
c. nodePath:本参数向下游传递过程中经过的节点序列;
d. requireFifo:是否需要使用FIFO;
e. visibility:可见性,可以看到哪些地址;
f. 能力集合:supportsXXX;
 
2) 限制条件
 
其中:
a. 可见的地址集合不能重合;
 
3) maxTransfer
 
 
4. TLClientPortParameters
 
 
1) 限制条件
 
其中:
a. 所有client的IdRange不能重合;
 
2) 参数处理
 
 
3) 能力判断
 
a. 全部支持
 
 
b. 某个支持
 
 
c. 硬件判断逻辑
 
 
4) 查找
 
a. 软件查找
 
 
b. 硬件查找逻辑
 
 
5) requireFifo
 
生成硬件判断逻辑:
 
 
5. TLBundleParameters
 
 
1) 参数列表
 
a. addressBits:地址占用的比特数;
b. dataBits:数据占用的比特数;
c. sourceBits:source编号占用的比特数;
d. sinkBits:sink编号占用的比特数;
e. size:操作大小占用的比特数;
 
2) 合并
 
取各参数的最大值:
 
3) 通过两端的参数生成
 
a. addressBits:支持的地址集合在manager中定义;
b. dataBits:使用manager.beatBytes;
c. sourceBits:source编号由client决定;
d. sinkBits:sink编号由manager决定;
e. size:由client/manager共同决定;
 
6. TLEdgeParameters
 
Edge的参数包含:
a. client的参数;
b. manager的参数;
c. 其他配置参数: parameters;
 
可以通过client和manager参数生成bundle参数:
 
7. Async相关参数
 
使用AsyncQueueParams表示异步相关的参数:
 
8. Rational相关参数
 
另一种异步实现。
 
9. ManagerUnification
 
Manager参数合并。
 
1) 定义一个包含各个参数的Key:
 
 
2) key: 从manager参数转化为Key的方法:
 
 
3) 把所有manager根据key映射到哈希映射中:
 
a. 若没有manager对应key的映射(key => manager),则添加新的映射;
b. 若已有映射,则把当前manager与已有的manager合并;
 
4) 返回新的manager:
 
能力一致的manager合并后的manager列表:
 

Rocket - tilelink - Parameters的更多相关文章

  1. Rocket - config - Parameters

    https://mp.weixin.qq.com/s/uLEr9gAFaMDIXa8S9xJVTw   介绍配置类Parameters及其伴生对象的实现.   参考链接: https://docs.q ...

  2. Rocket - interrupts - Parameters

    https://mp.weixin.qq.com/s/eD1_hG0n8W2Wodk25N5KnA 简单介绍interrupts相关的Parameters. 1. IntRange 定义一个中断号区间 ...

  3. Rocket - tilelink - RegisterRouter

    https://mp.weixin.qq.com/s/DaJhf7hEoWsEi_AjwSrOfA   简单介绍RegisterRouter的实现.   ​​   1. 基本介绍   实现挂在Tile ...

  4. Rocket - tilelink - Nodes

    https://mp.weixin.qq.com/s/KJ8pVH76rdxPOZ1vE3QlKA   简单介绍tilelink对Diplomacy Nodes的实现.   ​​   1. TLImp ...

  5. Rocket - tilelink - fastProperty

    https://mp.weixin.qq.com/s/9nikweQUGG5FO3Z8t6feaw 介绍Parameters中定义的fastProperty的实现.(使用最近的新版本,差别不大)   ...

  6. Rocket - tilelink - AsyncCrossing

    https://mp.weixin.qq.com/s/v8plWCBD8vZkxykjJe4TCg   介绍AsyncCrossing的实现,主要介绍如何实现diplomacy Node和LazyMo ...

  7. Rocket - tilelink - mask

    https://mp.weixin.qq.com/s/Gqv09RIgSSg5VKe-wb4aGg   讨论tilelink中使用MaskGen生成mask的用法.   1. tilelink中的ma ...

  8. Rocket - tilelink - Bundles

    https://mp.weixin.qq.com/s/jrqBg2AIpQogBrpwNXjmwg   简单介绍Bundles文件中对TileLink规范(1.7.1)的定义. 参考链接:https: ...

  9. Rocket - tilelink - TLBusWrapper.to

    https://mp.weixin.qq.com/s/jSnhBzU5_ayQCg5fWAcx-g 简单介绍TLBusWrapper.to()的实现.主要介绍确定this{...}对应代码的过程. 1 ...

随机推荐

  1. django 整理数据库文档时,从mysql导出的表中没有注释的解决方案

    公司要将Django项目重构成Java项目,也就有了整理数据库文档的经历....... 由于django从model迁移时没有将注释(也就是模型类中的verbose_name)写进mysql的表中,导 ...

  2. AntDesignPro的权限控制和动态路由

    最近看了AntDesignPro关于权限控制的官方文档以及自己框架里权限控制的实现,总结一下. 先贴一下官网上关于权限控制的图有利于理解 步骤如下: 判断是否有 AccessToken 如果没有则跳转 ...

  3. spring学习笔记(九)事务学习(上)

    前述 ​ 这段时间在工作中碰到一个事务相关的问题.先说下这个问题的场景,我们是一个商城项目,正在开发优惠券模块,现在有一个需求是需要批量领取优惠券,而且在领券时,其中一张领取失败不能影响其他符合要求的 ...

  4. react——key值的理解

    key不是给开发者使用的,是给react在diff算法中使用的,diff算法会比较新旧虚拟dom,并且是同层比较,当同一层中有多个元素的时候,会比较这一层的key值, 如果key相同,属性改变积极更新 ...

  5. Coursera课程笔记----Write Professional Emails in English----Week 2

    Let's Start Writing (Week 2) Write Effective Subject Lines be BRIEF 50 characters or less = 5-7 word ...

  6. 【Scala】利用Akka的actor编程模型,实现2个进程间的通信

    文章目录 步骤 一.创建maven工程,导入jar包 二.master进程代码开发 三.worker进程代码开发 四.控制台结果 步骤 一.创建maven工程,导入jar包 <propertie ...

  7. 杂记---主要关于PHP导出excel表格学习

    今天上午处理了一下WIN7系统的电脑前置话筒和耳机口无法使用的问题,主要现象是耳机插入后没声音,麦插入话筒说话对方也听不到,后置端口一切正常.刚开始判断肯定是设置的问题,于是用另一台电脑百度搜索“wi ...

  8. Linux 内核工作队列之work_struct 学习总结

    前言 编写Linux驱动的时候对于work_struct的使用还是很普遍的,很早之前就在阅读驱动源码的时候就看到了它的踪影,根据其命名大概知道了它的具体作用,但是仍然不知所以,同时,伴随出现的还有de ...

  9. 内网穿透访问Vue项目的时候出现Invalid Host header解决办法

    适用场景: 在本地的Vue-cli3项目, 需要其他人浏览. 如果没有外网的服务器, 可以把自己的电脑当做服务器. 这时候需要外网的人能访问到自己的电脑. Mac内网穿透工具:natapp Inval ...

  10. 学习docker的一点记录

    0x00 docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化 ...