Rocket - tilelink - BusWrapper

Posted wjcdx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rocket - tilelink - BusWrapper相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

Rocket - tilelink - Monitor

Rocket - tilelink - ProbePicker

Rocket - tilelink - Edges

Rocket - tilelink - Xbar

Rocket - tilelink - Filter

Rocket - tilelink - Metadata