Rocket - subsystem - MemoryBus

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

 

简单介绍MemoryBus的实现。

 

 

1. CacheBlockBytes

 

用于定义和查找参数配置的key:

对应的参数为缓存块的大小(字节数)。

 

2. BroadcastParams

 

BroadcastParams定义TLBroadcast所需要的参数:

TLBroadcast的定义如下:

 

3. BroadcastKey

 

用于定义和查找BroadcastParams的Key:

 

4. BankedL2Params

 

定义两个参数:

其中:

a. nBanks:bank的个数;

b. coherenceManager:生成内存一致性管理器的函数;默认实现里面使用TLBroadcast提供缓存一致性逻辑。

 

coherenceManager在ExampleRocketSystem中使用:

 

假设这里获取到的是默认的coherenceManager,这里的连接结构图如下:

 

5. MemoryBusParams

 

定义存储总线的参数:

其中:

a. MemoryBusParams继承自HasTLBusParams/HasBuiltInDeviceParams/HasRegionReplicatorParams;

b. beatBytes/blockBytes:用于实现HasTLBusParams中的抽象成员:

c. zeroDevice/errorDevice:用于实现HasBuiltInDeviceParams中的抽象成员:

d. replicatorMask:用于实现HasRegionReplicatorParams中的抽象成员:

 

6. MemoryBus

 

MemoryBus用于实现一个内存总线。

 

1) TLBusWrapper

 

MemoryBus继承自TLBusWrapper,实现了其中的抽象成员:

A. inwardNode

 

inwardNode是总线的上游节点连接的位置。其实现为:

其中:

a. 如果不需要复制下游节点,即params.replicatorMask == 0,直接使用xbar.node;

b. 如果需要复制下游节点内存区域,即params.replicatorMask != 0,就在xbar.node上游增加一个RegionReplicator节点。

c. RegionReplicator节点,根据replicatorMask的值,把下游节点的地址区间复制成多份:

 

B. outwardNode

 

outwardNode是总线下游节点连接的位置。其实现为:

其中:

a. ProbePicker用于合并上游的cache clients:

 

C. busView

 

busView使用的是第一个输入边:

 

2) CanHaveBuiltInDevices

 

用于提供attachBuiltInDevices方法,向memory_bus中引入zero/error设备:

 

3) CanAttachTLSlaves

 

MemoryBus下挂内存设备,内存设备作为下游节点,也就是slave存在。所以混入CanAttachTLSlaves以提供方法方便挂接下游节点:

 

4) toDRAMController

 

用于连接到下游DRAM控制器节点:

 

使用如下:

 

其结构大致如下:

             

 

 

posted @ 2020-06-08 21:02  wjcdx  阅读(439)  评论(0编辑  收藏  举报