您当前的位置: 首页 > 

耐心的小黑

暂无认证

  • 0浏览

    0关注

    323博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

RISC-V SoC生成器---Rocket Chip介绍

耐心的小黑 发布时间:2021-09-06 20:34:36 ,浏览量:0

一、Rocket Chip 基本结构

Rocket Chip是基于Chisel开发的一款开源SoC生成器(Generator),也即它自己其实并不是一款处理器。它根据不同的配置参数可以产生不同的处理器的RTL代码,当配置参数确定之后,生成的才是一个真正的“处理器”。

在这里插入图片描述 从图中可以看出,Rocket Chip有六个组成部分:

  • A为Core Generator,用于生成处理器核,支持Rocket-core和BOOM两种
  • B为Cache,包括L1 Cache和L2 Cache
  • C为RoCC,即Rocket的用户自定义加速器接口,用户可以使用Chisel自行编写加速器挂载到Rocket-chip中
  • D为Tile,一个处理器核和一个L1 Cache(包括指令Cache和数据Cache)构成一个Tile,在Rocket-chip中通过复用各种Tile构建一个多核(同构或异构)的体系
  • E为TileLink,是UC Berkeley自己开发的片上总线,用于连接处理器、缓存和外设
  • F为Peripheral,包括AMBA兼容总线(AXI,AHB-Lite和APB)的发生器以及各种转换器和控制器。

上图的具体示例包括了两个Tile,这些Tile连接到一个4-bank L2 Cache,该缓存本身通过AXI互连连接到外部I/O和存储系统。

  • Tile 1内是一个乱序的BOOM内核,它具有FPUL1指令和数据缓存以及实现RoCC接口的加速器。
  • Tile 2Tile 1类似,但是它使用的是顺序执行的Rocket-core内核,并且具有不同的L1数据缓存参数。

Rocket Chip有两个主要的用途:

  • 第一个是它可以用来生成RISC-VRTL实现,该实现具有顺序执行的流水线,符合IEEE标准的浮点运算单元,多级cache,虚拟内存,以及其他相关模块。

  • 另一个用途是把Rocket Chip当做 “函数库” 来使用,只复用其中的某个部分。例如伯克利的另一个项目BOOM(RISC-V的另一个乱序执行超标量实现)就把Rocket Chip当做模块库来使用,并只重新实现了其中的corecache部分。

二、Rocket Chip 工程目录
  • bootrom —包含第一阶段bootloader的源代码。

  • docs —代码库特定部分的文档、教程等。

  • emulator —编译和运行Verilator仿真的目录。

  • src\main\resources\csrc —用于Verilator仿真的C源代码。

  • regression —定义连续集成和nightly regression套件。

  • scripts —用于解析模拟输出或操作源文件内容的实用程序。

  • vsim —编译和运行Synopsys VCS仿真的目录。

  • src\main\resources\vsrc —包含interfaces、harnesses 和 VPI的Verilog源。

1、src\main\scala目录:该目录包含两种类型的模块:

①一种是工具utility,类似helper性质,用来帮助代码实现,并不直接生成硬件。如:

  • config —此实用程序包提供Scala接口,用于通过动态查找的参数化库配置生成器。

  • diplomacy —此实用程序包通过允许two-phase hardware elaboration(双相硬件精化)扩展了Chisel,其中某些参数在模块之间动态协商。diplomacy是一种用于高级参数化的机制:它实现了模块之间的参数协商,参数在模块之间传递时可以根据需求协商与检查,更加灵活且不容易出错;还可以快速实现设计拓扑的参数化,使用verilog实现设计拓扑的参数化是非常困难的一件事,往往包含着大量的define,容易出错,且写起来困难。有关diplomacy的更多信息,请参阅 这篇文章。

  • regmapper —该实用程序包生成具有标准化接口的从设备,用于访问其内存映射寄存器。

  • system —调用其他各种模块,构造可配置的系统。

  • unittest —可综合的单元测试代码的框架。注意,这与Chisel的tester框架完全不同。

②另一种是硬件模块的生成器。如:

  • amba —这个RTL包使用diplomacy机制生成AMBA协议的总线实现,包括AXI4、AHB lite和APB。

  • devices —这个RTL包包含了各种外设的实现,它包括调试模块和各种TL(UC Berkeley自己开发的片上总线协议)从机(外设做从机)。

  • groundtest —这个RTL包生成可综合的硬件测试器,这些测试器发出随机内存访问流,以便对非核心内存层次结构进行压力测试。

  • interrupts —使用diplomacy实现的中断逻辑。

  • jtag —这个RTL包提供了生成JTAG总线接口的定义。

  • rocket —该RTL包生成Rocket的 in-order 流水线内核、L1指令和数据缓存、FPU、RoCC协处理器等。

  • scie —用于在core流水线里面添加自定义指令的接口。

  • subsystem —公共总线架构的实现,包含master和slave接口。它包含了一些系统中经常需要添加的模块,用户自己创建系统时可以继承该子系统实现复用,这样只需要再手动添加其他模块即可。

  • tile —可以包含 core,FPU,L1缓存,RoCC协处理器等的容器。在Rocket-chip中通过复用各种Tile构建一个多核(同构或异构)的系统。

  • tilelink —这个RTL包使用diplomacy机制生成TileLink协议的总线实现。它还包含各种适配器和协议转换器。

  • util —此实用程序包提供了多种常见的Scala和Chisel编写的程序,可在多个其他包中被重复使用。如一些常见逻辑,ECC,arbiter, mux,随机数生成器等。

2、Rocket Chip依赖的其他库如下:
  • chisel3 —(https://github.com/ucb-bar/chisel3):Rocket Chip生成器使用 Chisel3 产生RTL代码。

  • firrtl (https://github.com/ucb-bar/firrtl):Firrtl (Flexible Internal Representation for RTL) RTL的中间语言表示,进而生成Verilog代码,C代码等最终代码。

  • hardfloat(https://github.com/ucb-bar/berkeley-hardfloat):包含有生成符合IEEE 754-2008标准的参数化浮点单元的chisel代码,这些浮点单元用于融合乘加运算、整数和浮点数之间的转换以及不同精度的浮点转换。

  • rocket-tools(https://github.com/freechipsproject/rocket-tools):RISC-V软件工具链,该工具与此存储库中提交的RTL一起工作。

  • torture(https://github.com/ucb-bar/riscv-torture):该模块用于生成和执行受约束的随机指令流,该指令流可用于对设计的核心部分和非核心部分进行压力测试。

未完待续…

参考链接:

  • https://github.com/freechipsproject/rocket-chip
  • https://zhuanlan.zhihu.com/p/140360043
  • https://www.chiselchina.com/2019/06/10/Rocket-Chip/
关注
打赏
1640088279
查看更多评论
立即登录/注册

微信扫码登录

0.0409s