https://mp.weixin.qq.com/s/03BvgTNQtD75Guco6gUGQg

 
简单介绍BusWrapper的实现。
 
1. HasTLBusParams
 
定义SoC的挂载点相关的宽度信息:
a. beatBytes:一个时钟周期最大能请求的字节数;
b. blockBytes:(推测)一次请求(可以包含多个beat)最大能请求的字节数;
 
其他的通过这两个参数生成:
a. beatBits:把beatBytes换算成位数;
b. blockBits:把blockBytes换算成位数;
c. blockBeats:最大的请求包含多少个beat;
d. blockOffset:为block中的每个字节编址所需要的位数;
 
限制条件:
a. beatBytes需要是2的幂;
b. blockBytes需要是2的幂;
 
2. TLBusWrapper
 
对总线(Bus)进行包装,是一个LazyModule:
 
1) 类参数
 
a. params:HasTLBusParams类型,传入基本宽度信息;
b. busName:总线名称;
 
2) 基本宽度信息
 
 
3) inwardNode/outwardNode/Edge
 
 
4) unifyManagers
 
合并能力一致的manager的地址集合:
 
5) crossHelper
 
生成跨越时钟域的Helper:
 
6) to/from
 
 
a. to是指outwardNode在body中使用输出边连接到某个节点;
 
b. from是指inwardNode在body中使用输入边连接到某个节点;
 
7) coupleTo/coupleFrom
 
 
coupleTo/coupleFrom与to/from类似,只是把outwardNode作为参数传入。
 
这样避免了与TLBusWrapper的继承关系:
a. 使用to/from方法的类,需要继承TLBusWrapper类,才能访问到outwardNode/inwardNode;
b. 使用coupleTo/coupleFrom的类,则不需要继承TLBusWrapper类,因为outwardNode/inwardNode作为参数传入;
 
8) crossToBus/crossFromBus
 
a. crossToBus:outwardNode跨时钟域输出连接到参数中指定的bus;
b. crossFromBus:inwardNode跨时钟域输入连接到参数中指定的bus;
 
3. CanAttachTLSlaves
 
可以连接下游节点。使用该trait的类需要继承自TLBusWrapper:
 
1) toSlave
 
outwardNode输出到gen生成的slave:
 
2) toVariableWidthSlaveNodeOption
 
outwardNode输出到参数传入的node:
 
3) toVariableWidthSlaveNode
 
 
4) toVariableWidthSlave
 
可变宽度(VariableWidth)是指与不同下游节点连接边的数据总线宽度可以不同,所以这里使用TLFragmenter为Bus处理不同数据宽度的下游连接。(TLFragmenter向上传递下游节点参数的时候,并不改变其beatBytes参数,所以Bus看到的是下游节点的原始的数据总线宽度,可能是不相同的。)
 
5) toFixedWidthSlaveNode
 
固定宽度(FixedWidth)是指与不同下游节点连接边的数据总线宽度都相同,所以这里使用TLWidthWidget为Bus提供统一的数据总线宽度(beatBytes)。(TLWidthWidget改变项上传递的参数中的beatBytes参数,告诉Bus所有与之连接的下游节点的数据总线宽度都是beatBytes。)
 
6) toFixedWidthSlave
 
这里gen是一个call-by-name参数:
 
7) toFixedWidthSingleBeatSlaveNode
 
略,未使用。
 
8) toFixedWidthSingleBeatSlave
 
略,未使用。
 
9) toLargeBurstSlave
 
略,未使用。
 
10) toFixedWidthPort
 
输出到一个Port:
 
4. CanAttachTLMasters
 
可以连接上游节点。使用该trait的类需要继承自TLBusWrapper:
 
1) fromMasterNode
 
gen是一个TLOutwardNode:
 
2) fromMaster
 
gen是一个call-by-name参数,用于生成TLOutwardNode:
 
3) fromPort
 
gen生成的是一个port:
 
4) fromCoherentMaster
 
gen生成的是一个Coherent Master:
 
5. HasTLXbarPhy
 
使用该特征引入一个Xbar对象:
 

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

  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 - Xbar

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

  9. Rocket - tilelink - WidthWidget

    https://mp.weixin.qq.com/s/pmJcsRMviJZjMwlwYw6OgA   简单介绍WidthWidget的实现.   ​​   1. 基本介绍   用于设定与上游节点连接 ...

随机推荐

  1. 最短路 西北大学2019年春季校赛 ( 重现赛 ) 房间迷宫 求一个数的所有的约数nlogn

    题目:https://www.cometoj.com/contest/33/problem/G?problem_id=1461(密码:jwjtxdy) 学习一下 求一个数的约数 复杂度n*logn # ...

  2. 你真的会用Flutter日期类组件吗

    Flutter系统提供了一些日期选择类组件,比如DayPicker.MonthPicker.YearPicker.showDatePicker.CupertinoDatePicker等,其中前4个为M ...

  3. 使用Java实现简单的斗地主案例

    使用Java实现简单的斗地主案例 案例说明:使用Java实现简单的斗地主洗牌发牌的操作: 具体规则: 共有54张牌,顺序打乱: 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后留三张为底牌(地主牌) ...

  4. 【Spark】必须要用CDH版本的Spark?那你是不是需要重新编译?

    目录 为什么要重新编译? 步骤 一.下载Spark的源码 二.准备linux环境,安装必须软件 三.解压spark源码,修改配置,准备编译 四.开始编译 为什么要重新编译? 由于我们所有的环境统一使用 ...

  5. 【Hadoop离线基础总结】MapReduce入门

    MapReduce入门 Mapreduce思想 概述 MapReduce的思想核心是分而治之,适用于大量复杂的任务处理场景(大规模数据处理场景). 最主要的特点就是把一个大的问题,划分成很多小的子问题 ...

  6. ASP.NET Core中结合枚举和资源文件显示列表

    模型类的某些属性以枚举形式出现,我们希望在打开编辑表单时在选择列表中显示枚举值.有时我们想要枚举元素名称,但有时我们想要使用自定义名称甚至翻译. 这个例子演示了如何获取枚举元素名称以选择ASP.NET ...

  7. GIT代码版本管理

    一.实验目的 1.了解分布式版本控制系统的核心机理: 2.熟练掌握git的基本指令和分支管理指令: 二.实验内容 1.安装git: 2.初始配置git,git init git status指令: 3 ...

  8. 推荐一款 python 管理工具:anaconda

    1.jpg 2.jpg 3.jpg 4.jpg 5.jpg 6.jpg 7.jpg 8.jpg 9.jpg 10.jpg 11.jpg 12.jpg 13.jpg 14.jpg 15.jpg 16.j ...

  9. spark优化总结

    1.Spark调优背景 目前Zeppelin已经上线一段时间,Spark作为底层SQL执行引擎,需要进行整体性能调优,来提高SQL查询效率.本文主要给出调优的结论,因为涉及参数很多,故没有很细粒度调优 ...

  10. ES6,ES7,ES8 常用特性总结

    一. ES6(ES2015) 1. 变量 let 和常量 const var 的问题 可以重复声明,没有报错和警告 无法限制修改 没有块级作用域, { } let 和 const 不能重复声明 都是块 ...