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 - config - Parameters
https://mp.weixin.qq.com/s/uLEr9gAFaMDIXa8S9xJVTw 介绍配置类Parameters及其伴生对象的实现. 参考链接: https://docs.q ...
- Rocket - interrupts - Parameters
https://mp.weixin.qq.com/s/eD1_hG0n8W2Wodk25N5KnA 简单介绍interrupts相关的Parameters. 1. IntRange 定义一个中断号区间 ...
- Rocket - tilelink - RegisterRouter
https://mp.weixin.qq.com/s/DaJhf7hEoWsEi_AjwSrOfA 简单介绍RegisterRouter的实现. 1. 基本介绍 实现挂在Tile ...
- Rocket - tilelink - Nodes
https://mp.weixin.qq.com/s/KJ8pVH76rdxPOZ1vE3QlKA 简单介绍tilelink对Diplomacy Nodes的实现. 1. TLImp ...
- Rocket - tilelink - fastProperty
https://mp.weixin.qq.com/s/9nikweQUGG5FO3Z8t6feaw 介绍Parameters中定义的fastProperty的实现.(使用最近的新版本,差别不大) ...
- Rocket - tilelink - AsyncCrossing
https://mp.weixin.qq.com/s/v8plWCBD8vZkxykjJe4TCg 介绍AsyncCrossing的实现,主要介绍如何实现diplomacy Node和LazyMo ...
- Rocket - tilelink - mask
https://mp.weixin.qq.com/s/Gqv09RIgSSg5VKe-wb4aGg 讨论tilelink中使用MaskGen生成mask的用法. 1. tilelink中的ma ...
- Rocket - tilelink - Bundles
https://mp.weixin.qq.com/s/jrqBg2AIpQogBrpwNXjmwg 简单介绍Bundles文件中对TileLink规范(1.7.1)的定义. 参考链接:https: ...
- Rocket - tilelink - TLBusWrapper.to
https://mp.weixin.qq.com/s/jSnhBzU5_ayQCg5fWAcx-g 简单介绍TLBusWrapper.to()的实现.主要介绍确定this{...}对应代码的过程. 1 ...
随机推荐
- D. Count the Arrays 计数题
D. Count the Arrays 也是一个计数题. 题目大意: 要求构造一个满足题意的数列. \(n\) 代表数列的长度 数列元素的范围 \([1,m]\) 数列必须有且仅有一对相同的数 存在一 ...
- lambda表达式入门详解
转自 2018-03-02 Sevenvidia 码农翻身 1.什么是Lambda? 我们知道,对于一个Java变量,我们可以赋给其一个"值". 如果你想把"一块代码 ...
- leetcode485——最大连续1的个数(easy)
一.题目描述 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意 ...
- 安卓集成Unity开发示例(一)
本项目目的是在移动端的 Native App 中以库的形式集成已经写好的 Unity 工程,利用 Unity 游戏引擎便捷的开发手段进行跨平台开发. Unity官方文档 Unity as a Libr ...
- 关于proteus仿真的串口问题
以下四幅图都是关于串口中断的问题,串口中断需要一个接收或者发送数据的触发. 图一:因为由串口小助手发送的数据达到了单片机串口,所以引起了串口的中断. 图二:图一的大图. 图三:因为由串口小助手发送的数 ...
- 【hdu1024】简单dp
http://acm.hdu.edu.cn/showproblem.php?pid=1024 最大m字段和,题目就不多说了,经典dp 这题坑爹...首先不说明m的范围(n<=1000000),还 ...
- ASP.NET 开源导入导出库Magicodes.IE 完成Csv导入导出
Magicodes.IE Csv导入导出 说明 本章主要说明如何使用Magicodes.IE.Csv进行Csv导入导出. 主要步骤 1.安装包Magicodes.IE.Csv Install-Pack ...
- Redis学习笔记(六) 对象
前面我们看了Redis用到的主要数据结构,如简单动态字符串(SDS).双向链表.字典.压缩列表.整数集合等. 但是Redis并没有直接使用这些数据结构来实现键值对,而是基于这些数据结构创建了一个对象系 ...
- mysql-kettle-superset电商可视化数据分析
1.项目概述 需求 对电商业务中的用户.商品.订单的数据进行分析,观察运营的情况 架构 业务数据库:Mysql:存储最原始的数据 ETL:Kettle 数据仓库:Mysql:存储需要进行分析处理的数据 ...
- Java内存区域与内存溢出异常——深入理解Java虚拟机 笔记一
Java内存区域 对比与C和C++,Java程序员不需要时时刻刻在意对象的创建和删除过程造成的内存溢出.内存泄露等问题,Java虚拟机很好地帮助我们解决了内存管理的问题,但深入理解Java内存区域,有 ...