Rocket - tile - Core
https://mp.weixin.qq.com/s/-PlVHWPPTCG5mMz_jEAd6g
简单介绍Core的实现。
1. XLen
XLen定义了总线宽度:
其值在BaseSubsystemConfig中定义为64:
2. CoreParams
CoreParams定义了核心的一系列参数:
这里不再逐个介绍。
3. HasCoreParameters
HasCoreParameters继承自HasTileParameters,从tileParams中取出核心参数,提供了一系列针对核心参数的转换方法以方便使用:
这里不再逐个介绍。
相较于core, tile是一个抽象层次更高的概念,core是一个tile。
core除了包含tile的参数之外,还有core的具体参数。
4. CoreModule
CoreModule定义了一个包含了核心参数的模块,也就是核心模块:
这是一个抽象模块,其抽象成员,也就是IO接口没有定义:
5. CoreBundle
CoreBundle是一个包含核心参数的Bundle:
CoreBundle虽然是抽象类,却并没有抽象成员。标记为抽象的意义在于不能单独实例化进行使用,而只能对其继承扩展而后才可使用。
6. CoreInterrupts
定义核心的中断:
其中:
a. buserror是总线错误单元(BusErrorUnit)报告的中断;
b. TileInterrupts基本上包含了核心的全部中断:
7. HasCoreIO
HasCoreIO定义了核心的IO接口:
其中:
a. 定义一个匿名类:继承自CoreBundle,引入了HasExternallyDrivenTileConstants;
b. 就地实例化该匿名类new {...};
c. 匿名类中定义了核心的基本接口,如中断、指令、数据、浮点运算单元、扩展指令、跟踪调试等等;