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. 花了几天入门Storm,上了一版,全是Bug

    前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 听说过大数据的同学应该都听说过Storm吧?其实 ...

  2. Spring Boot 入门(十三):集成Hasor的Dataway模块,干掉后台,自动配置接口

    终于出湖北了,封闭2个月,家里没电脑,感觉好久没自主撸代码啊啊啊啊啊啊啊啊啊啊啊啊啊. 连接上篇文章Spring Boot 入门(十二):报表导出,对比poi.jxl和esayExcel的效率,继续从 ...

  3. calc less 下不起作用

    在 less中不能使用css3 calc属性不能 css3 新增长度计算属性 可以根据不同单位计算宽度 .test{ width: calc(100% - 150px); } 但是当我们在less中使 ...

  4. 单线程和多线程执行对比—Python多线程编程

    单线程和多线程执行对比 本章使用递归求斐波那契.阶乘与累加函数的执行来对比单线程与多线程: 斐波那契.阶乘与累加(mtfacfib.py): ​ import threading from time ...

  5. Java中this()和super()

    Java关键字this只能用于方法体中.this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的th ...

  6. Spring Boot 之 Spring Batch 批处理实践

    实践内容 从 MariaDB 一张表内读 10 万条记录,经处理后写到 MongoDB . 具体实现 1.新建 Spring Boot 应用,依赖如下: <!-- Web 应用 --> & ...

  7. 初识Page Object

    PageObject是UI自动化测试项目开发实践的最佳设计模式之一,它的主要特点体现在对界面交互细节的封装上,使测试用例更加专注于业务的操作,从而提高测试用例的可维护性. 1.认识Page Objec ...

  8. 「雕爷学编程」Arduino动手做(11)——金属触摸模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  9. python脚本实现接口自动化轻松搞定上千条接口用例

    接口自动化目前是测试圈主流的一个话题,我也在网上搜索了很多关于自动化的关键词,大多数博主分享的python做接口自动化都是以开源的框架,比如:pytest.unittest+ddt(数据驱动) 最常见 ...

  10. poi 针对word模板内容替换

    最近多了一个需求,需要对word模板内容进行替换,一开始用的是word03版的,替换起来比较简单,主要是range对像替换非常方便,而且可以保留替换前的字体样式. InputStream is = n ...