Rocket - tile - BaseTile

https://mp.weixin.qq.com/s/5J74euYsxkjlS1QSWU6_Ow

 

简单介绍BaseTile的实现。

 

Rocket - tile - BaseTile_第1张图片

 

1. Keys

 

定义了一组配置的Key:

其中:

a. SharedMemoryTLEdge:从实现上看,是系统总线的第一条连接边:

Rocket - tile - BaseTile_第2张图片

b. TileKey:用于定义TileParams;

c. ResetVectorBits:用于定义复位向量的位宽;

d. MaxHartIdBits:用于定义表示核心数量所需要的最大位数;

 

2. LookupByHartId

 

根据HartId查找一个值(T):

已在HasTiles中介绍,这里略去。

 

3. TileParams

 

定义核心需要的参数:

Rocket - tile - BaseTile_第3张图片

a. core:核心参数;

b. icache:指令缓存参数;

c. dcache:数据缓存参数;

d. btb:分支预测相关参数;

e. hartId:核心编号;

f. beuAddr:bus error unit地址;

g. blockerCtrlAddr:BasicBusBlocker的控制地址;

h. name:名称;

 

4. HasTileParameters

 

定义一组获取参数的方法,简化参数的使用:

Rocket - tile - BaseTile_第4张图片

这里不展开逐个介绍。

 

5. BaseTile

 

BaseTile是一个LazyModule,BaseTileModuleImp实现BaseTile引入的节点的逻辑。两者配对进行使用:

Rocket - tile - BaseTile_第5张图片

 

1) 抽象的lazy val module

 

在子类中实现:

Rocket - tile - BaseTile_第6张图片

 

2) 抽象的diplomacy nodes

 

Rocket - tile - BaseTile_第7张图片

其中:

a. masterNode/slaveNode:用于与其他节点相连的上下游节点;

b. intInwardNode/intOutwardNode:用于连接中断相关的节点;

c. haltNode:这是一个IntOutwardNode,用于发出不可恢复的错误中断,建议进行复位动作;

d. ceaseNode:这是一个IntOutwardNode,用于通知外部自己的停止状态;

e. wfiNode:这是一个IntOutwardNode,用于通知外部自己在等待中断;

 

3) 其他nodes

 

还定义了一些其他的diplomacy node:

Rocket - tile - BaseTile_第8张图片

 

4) connectTLSlave

 

用于把tile与一个下游节点node相连接:

Rocket - tile - BaseTile_第9张图片

 

其结构示意图如下:

Rocket - tile - BaseTile_第10张图片

 

5) nextLevelCacheProperty

 

Rocket - tile - BaseTile_第11张图片

 

6) cpuProperties

 

Rocket - tile - BaseTile_第12张图片

 

7) makeMasterBoundaryBuffers

 

当前实现是一个深度为0的buffer:

 

8) crossMasterPort

 

Rocket - tile - BaseTile_第13张图片

a. tlMasterXing是一个TLOutwardCrossingHelper,用于根据crossing类型生成跨时钟结构;

b. 根据需要在masterNode下游添加一个Buffer:

Rocket - tile - BaseTile_第14张图片

c. 根据跨域类型,生成最终的跨时钟结构。以RationalCrossing为例,其结构示意图如下:

Rocket - tile - BaseTile_第15张图片

 

9) makeSlaveBoundaryBuffers

 

Rocket - tile - BaseTile_第16张图片

参考makeMasterBoundaryBuffers。

 

10) crossSlavePort

 

参考crossMasterPort。

 

11) crossSlavePort

 

生成上游中断节点连接到当前tile的跨时钟结构:

 

12) crossIntOut

 

生成当前tile的中断节点连接到下游节点的跨时钟结构。

 

6. BaseTileModuleImp

 

BaseTileModuleImp作为LazyModuleImp的子类,与BaseTile成对使用,以实现BaseTile中的具体逻辑:

Rocket - tile - BaseTile_第17张图片

a. 增加一些有效性验证;

b. 添加一组静态IO: TileInputConstants;之所以成为静态是因为其值都是固定不变的;

 

7. TileInputConstants

 

TileInputConstants是一个参数化的Bundle:

Rocket - tile - BaseTile_第18张图片

 

8. HasExternallyDrivenTileConstants

 

TileInputConstants继承了HasExternallyDrivenTileConstants中的输入输出端口:

a. hartId:核心编号;

b. reset_vector:复位向量;

 

Constants意指二者的值在生成时即确定,后续保持不变:

Rocket - tile - BaseTile_第19张图片             

 

你可能感兴趣的:(Rocket - tile - BaseTile)