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

 
简单介绍BankBinder的实现。
 
 
1. 基本介绍
 
A BankBinder is used to divide contiguous memory regions into banks, suitable for a cache:
a. BankBinder把连续的内存区域分成多个bank;
b. 每个Bank的大小与cache相匹配;
 
2. 使用
 
在ExampleRocketSystem中有使用:
其中:
a. 上游节点out连接到下游节点BankBinder,星号(*)在BankBinder一侧,即绑定中所包含的连接数由BankBinder节点决定;
b. 上游节点BankBinder连接到下游节点mbus.inwardNode,星号(*)在BankBinder一侧,即绑定中所包含的连接数由BankBinder节点决定;
c. nBanks和mbus.blockBytes都是2的幂;
 
3. BankBinderNode
 
LazyModule BankBinder中用于协商参数的diplomacy Node即为BankBinderNode:
BankBinderNode决定星型绑定中连接的数量,以及参数如何向上向下传递。
 
1) mask
 
生成BankBinder使用的参数,包含:
a. 每个bank的大小;
b. bank的mask;
 
实际使用中:
a. mbus.blockBytes为2的幂,是一个bank的大小,假设为0b0001_0000;
b. nBanks为2的幂,是bank的数目,假设为4,那么nBanks - 1 = 3 = 0b11;
c. mbus.blockBytes * (nBanks - 1) = 0b0011_0000;
 
2) bit
 
从mask中取出的最低位的1(mask & -mask),就是mbus.blockBytes,即bank的大小;
 
3) ids
 
mask中所有1的所有组合(AddressSet.enumerateMask(mask)),就是nBanks,即bank的数目;
 
4) maxXfer
 
最大的传输大小不超过bank的大小:
 
5) resolveStar
 
BankBinderNode是一个TLCustomNode,需要自己实现resolveStar:
a. BankBinder只是把上游的各个bank和下游的各个bank一一绑定到一起,两者数目相同都是ids.size;
b. oStars是输出侧星号的数目,如果星号的数目为0,那么星型绑定resove之后所得连接的数目也是0;如果星号的数目不是0,那么总连接数(ports)减去已知连接数的差值,除以星型绑定的数目,就是星型绑定中包含的连接的数目。(这里假设每个星型绑定包含的连接数目相等,否则就只能有一个星型绑定。)
c. iStars与oStars同理;
d. ports == iKnown + iStar * iStars表明了各个参数之间的关系;
 
6) mapParamsD
 
参数向下传递,根据上游节点传递给BankBinder的参数,生成BankBinder传递给下游节点的参数。亦即使用BankBinder看到的上游节点的参数,生成BankBinder给下游节点看的参数。
其中:
a. visibility使用id取其中的部分,即当前bank对应的那部分;
b. 支持的传输大小(supportsXXX)需要与maxXfer取交集;
 
7) mapParamsU
 
参数向上传递,根据下游节点传递给BankBinder的参数,生成BankBinder传递给上游节点的参数。亦即使用BankBinder看到的下游节点的参数,生成BankBinder给上游节点看的参数。
 
4. class BankBinder
 
LazyModule BankBinder中包含两个部分:
a. diplomacy节点:node;
b. lazy val module;
 
diplomacy节点node根据与上下游节点的连接以及协商而得的参数,生成模块外部接口(输入和输出接口);
lazy val module实现内部逻辑,即如何使用输入接口输入的数据、如何连接到输出接口;
这里的内部逻辑很简单,就是直接相连:out <> in。
 
5. object BankBinder
 
伴生对象,方便创建BankBinder(LazyModule),返回的其diplomacy node。用于与其他节点连接和绑定。
 

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

  1. Rocket - tilelink - RegisterRouter

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

  2. Rocket - tilelink - Nodes

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

  3. Rocket - tilelink - AsyncCrossing

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

  4. Rocket - tilelink - mask

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

  5. Rocket - tilelink - Parameters

    https://mp.weixin.qq.com/s/1I6DcONr0Mg7xiX8F1C7SQ   简单介绍TileLink相关的参数实现(具体问题暂时不展开,后续用到时再做分析).   ​​   ...

  6. Rocket - tilelink - Bundles

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

  7. Rocket - tilelink - TLBusWrapper.to

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

  8. Rocket - tilelink - BusWrapper

    https://mp.weixin.qq.com/s/03BvgTNQtD75Guco6gUGQg   简单介绍BusWrapper的实现.   1. HasTLBusParams   定义SoC的挂 ...

  9. Rocket - tilelink - Xbar

    https://mp.weixin.qq.com/s/UXFHYEQaYotWNEhshro68Q   简单介绍Xbar的实现.   ​​   1. 基本介绍   用于为Xbar的输入和输出连接生成内 ...

随机推荐

  1. 聚合类型与POD类型

    Lippman在<深度探索C++对象模型>的前言中写道: I have heard a number of people over the years voice opinions sim ...

  2. Spring杂谈 | 你真的了解泛型吗?从java的Type到Spring的ResolvableType

    关于泛型的基本知识在本文中不会过多提及,本文主要解决的是如何处理泛型,以及java中Type接口下对泛型的一套处理机制,进而分析Spring中的ResolvableType. 文章目录 Type 简介 ...

  3. 广告行业中那些趣事系列10:推荐系统中不得不说的DSSM双塔模型

    摘要:本篇主要介绍了项目中用于商业兴趣建模的DSSM双塔模型.作为推荐领域中大火的双塔模型,因为效果不错并且对工业界十分友好,所以被各大厂广泛应用于推荐系统中.通过构建user和item两个独立的子网 ...

  4. CF#637 C. Nastya and Strange Generator

    C. Nastya and Strange Generator 题意 有一个随机全排列生成器,给出你一个全排列,让判断是否可以通过这个生成器产生. 生成器工作方式: 第i步为数字i寻找位置pos. 首 ...

  5. Python哈希表和解析式

    目录 1. 封装和解构 1.1 封装 1.2 解构 2. 集合Set 2.1 初始化 2.2 增加 2.3 删除 2.4 遍历 2.5 并集&交集&差集&对称差集 3.字典 3 ...

  6. springBoot第二种配置文件yaml书写方式及读取数据、整合myBatis和整合junit

    一.yaml文件格式:key-value形式:可以表示对象 集合 1.语法:key:value 冒号后面必须跟一个空格再写value值 key1: key2: key3:value 2.属性取值:a. ...

  7. php基本语法学习

    1.基本的 PHP 语法 PHP 脚本可以放在文档中的任何位置. PHP 脚本以 <?php 开始,以 ?> 结束: <?php// PHP 代码?>   2.简单的脚本-输出 ...

  8. js中的栈,堆。

    一.栈和堆 栈(stack):栈会自动分配内存空间,会自动释放,存放基本类型,简单的数据段,占据固定大小的空间. 基本类型:String,Number,Boolean,Null,Undefined 堆 ...

  9. 反射,获取类的属性以及get方法

    vo实体类: public class Result { /*** * 返回结果code * ok:10000 * error:20000 */ private String code; /*** * ...

  10. 线上Kafka突发rebalance异常,如何快速解决?

    文章首发于[陈树义的博客],点击跳转到原文<线上Kafka突发rebalance异常,如何快速解决?> Kafka 是我们最常用的消息队列,它那几万.甚至几十万的处理速度让我们为之欣喜若狂 ...