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

一、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依赖的其他库如下:

未完待续…

参考链接:

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RISC-V是一种基于开源架构的指令集,其指令集架构简单、规范且可扩展,非常适合教育和研究领域。在RISC-V中,指令的译码是非常重要的一步,其作用是将指令从二进制形式翻译成计算机能够理解的操作。 这里简单介绍一下RISC-V指令译码器设计实验的流程: 1. 首先,根据RISC-V指令集规范,确定需要支持的指令类型和指令格式。RISC-V指令集中包含了常见的指令类型,如算术指令、逻辑指令、分支指令等,每种指令类型都有其特定的操作码和寄存器操作数等信息。 2. 在确定了需要支持的指令类型和指令格式后,可以开始设计译码器。译码器的主要功能是将二进制形式的指令转换为相应的操作,并将操作所需的寄存器地址等信息提取出来。在RISC-V指令集中,每个指令类型都有其特定的操作码,因此可以通过解析操作码来确定指令类型,并根据指令类型提取操作所需的寄存器地址等信息。 3. 接下来,可以开始进行译码器的Verilog设计。在设计过程中,需要考虑各种指令类型的特点和译码器的逻辑结构,以确保译码器能够正确地解析每一个指令。此外,还需要根据实际情况添加一些特殊的功能,如异常处理、中断处理等。 4. 设计完成后,需要进行仿真测试和验证。使用Verilog仿真工具对译码器进行功能测试,检查其是否能够正确地解析所有支持的指令,并且能够正确地提取操作所需的寄存器地址等信息。如果存在问题,需要进行调试和修改,直到译码器能够正确地工作为止。 5. 最后,将译码器集成到RISC-V处理器中,并进行系统级测试和验证。在测试过程中,需要使用各种测试程序和工具来验证处理器的性能和可靠性,以确保其能够满足实际应用的需求。 总之,RISC-V指令译码器设计是一个非常重要的实验,可以帮助学生深入了解计算机体系结构和指令集架构的相关知识,同时也可以提高学生的设计和实现能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耐心的小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值