最近大概阅读了一下UCB发布的Rocket处理器的源码,对源代码各个文件的功能有了一些大致的了解,Mark一下。
Rocket是一款64bit的标量处理器,5级流水线,采用的是risc-v指令集,集成FPU,并有许多or1200没有的特性,比如:无阻塞缓存、分支预测、返回地址堆栈、硬件页表填充、cache支持ECC、支持多核等。
Rocket的源代码是使用Chisel编写的,Chisel是UCB发布的基于Scala的领域特定语言。可以在https://github.com/ucb-bar/rocket下载Rocket的全部源码,共有20个文件,各个文件实现的功能大致如下:
arbiter.scala | 实现了一个固定优先级的仲裁器,编号越低,优先级越高 |
btb.scala | 实现了gshare,其中包含BTB(Branch Target Buffer)、BHT(Branch History Table),还实现了RAS(Return Address Stack) |
consts.scala | 定义了一些类似与宏定义的变脸 |
core.scala | 包含控制通路、数据通路,联合起来为Core |
csr.scala | 实现了risc-v指令集中定义的Control Status Registers |
ctrl.scala | 实现 |