马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
最近大概阅读了一下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个文件,各个文件实现的功能大致如下:
开源处理器Rocket的源代码文件作用说明
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 | 实现了控制通路,其中就反映了5级流水线 | decode.scala | 其中实现了对卡诺图的化简,在指令译码的时候会使用这里的功能 | dpath.scala | 实现数据通路 | depath_alu.scala | 实现了ALU | fpu.scala | 实现了与第三方FPU的接口 | icache.scala | 实现了指令一级缓存、取值,其中就使用了btb.scala中定义的分支预测技术 | instructions.scala | 定义了Rocket处理器支持的所有指令 | multiplier.scala | 实现了乘法、除法运算,其中乘法采用的是迭代法,除法采用的是试商法 | nbdcache.scala | 实现了数据一级缓存,采用MSHR技术实现了无阻塞缓存 | package.scala | 定义了复位地址、异常处理vector base address | ptw.scala | 实现了硬件的page table walk,也就是硬件页表填充 | rocc.scala | 实现了一个加速协处理器,用来执行用户自定义指令 | tile.scala | Rocket处理器的顶层文件,其中连接Core、指令一级缓存、数据一级缓存、FPU等模块 | tlb.scala | 实现了传输后备缓冲器 | util.scala | 定义了一些对象,提供了一些工具函数,比如:类型转换。 |
以上是个人的理解,欢迎大家提出异议,共同讨论啊。
摘自http://blog.csdn.net/leishangwen/article/details/46604819 |