Skip to content

rocket chip分析

https://github.com/chipsalliance/rocket-chip

Rocket Chip is a design generator, capable of producing many design instances from a single high-level source

rocket chip项目不仅实现了rocket chip的SOC,还可以作为函数库来使用,准确来讲,Rocket Chip是一个开源的SOC可综合RTL生成器。内部实现了基于RISCV架构的顺序Core(Rocket)和乱序Core(BOOM)。目前Rocket Chip已经 taped out 11次,稳定性得到了肯定。

通过github的README可以轻松找到Rocket的相关文档说明

repo结构

随着模块化的发展,Rocket Chip的许多组件库成为了独立的repo, Rocket Chip采用git submodules来包含这些模块的可信版本

顶层目录结构

├── bootrom    启动romcode
├── build.sbt  构建脚本
├── emulator   用于存放verilator生成的模拟器,其中的Makefile提供了生成方法
├── hardfloat  浮点单元submodule
├── macros
├── project    sbt编译运行专用目录
├── regression 回归测试脚本,使用scala test的测试脚本
├── scripts    一些有用的小工具
├── src        生成器存放目录
├── target     sbt专用目录
├── torture    riscv-torture随机指令测试框架
└── vsim       Synopsys VCS simulations are compiled and run, 需要VCS环境

生成器目录结构

.
├── amba                    包含ahb,apb,axi4等AMBA总线协议
├── aop
├── aspects
├── devices                 包含了debug模块以及一些物理设备
├── diplomacy
├── diplomaticobjectmodel
├── examples
├── formal
├── groundtest
├── interrupts
├── jtag                    JTAG 总线接口
├── linting
├── package.scala
├── prci
├── regmapper
├── rocket                   Rocket Core的生成器,包含alu btb ...等的生成器实现
├── scie
├── stage
├── subsystem
├── system                   配置文件(组装文件)
├── tile                     组件,FPU, ROCC等组件
├── tilelink                 TileLink协议以及适配器和协议转换器
├── transforms
├── unittest                 可综合的硬件测试框架
└── util                     大量的可复用的小模块

环境搭建

git clone https://github.com/ucb-bar/rocket-chip.git
cd rocket-chip
export ROCKETCHIP=`pwd`
git submodule update --init --recursive
export RISCV=/path/to/install/riscv/toolchain #riscv工具链安装目录

rocket-tools 是软件集合,可以选择自己单独搭建也可以选择直接使用这个repo,由于我的本地已经有riscv-tools,直接使用其中的riscv-tests生成的测试case也能进行emulator的测试

编译C++模拟器,生成的默认的elf为:emulator-freechips.rocketchip.system-freechips.rocketchip.system.DefaultConfig

cd emulator
make -jN

编译VCS模拟器,由于没有vcs环境,暂时无法生成

cd vsim
make -jN

生成verilog,默认的verilog为:freechips.rocketchip.system.DefaultConfig.v

cd vsim
make verilog

Rocket Core