【从嵌入式视角学习香山处理器】三、了解类似的芯片项目——RocketChip

文章目录

  • 一、前言
  • 二、简介
  • 三、RocketChip介绍

一、前言

这篇文章主要是记录下我最近看到RocketChip项目的官方介绍文档。


二、简介

RocketChip是一个比香山发起得早的Risc-V开源芯片(SoC)项目。它本身并不直接创建SoC的各个模块的实例,包括cache、TLB、各种内部总线、FPU,甚至是加速器。而是创建各种生成器(generator),再利用生成器去生成各个部件的实例。
更进一步,RocketChip不负责创建所有的部件生成器,而是留给设计者去定义自己的SoC硬件“包含什么部件、多少个、参数是怎样的、配置是怎样的”。至少从它的github页面看到文件目录有“hardfloat@xxx”就可反映这一点。

【从嵌入式视角学习香山处理器】三、了解类似的芯片项目——RocketChip_第1张图片
香山的项目设计是对齐RocketChip的——用chisel开发、只写生成器代码不写硬件实例、各个部件的代码作为另外的子项目导入作为香山下的单个目录。

【从嵌入式视角学习香山处理器】三、了解类似的芯片项目——RocketChip_第2张图片


三、RocketChip介绍

以下内容完全翻译自RocketChip的报告《The Rocket Chip Generator》。

【从嵌入式视角学习香山处理器】三、了解类似的芯片项目——RocketChip_第3张图片
【从嵌入式视角学习香山处理器】三、了解类似的芯片项目——RocketChip_第4张图片

  1. 已经流片11次,并验证了支持启动linux。
  2. RocketChip不是一个具体的soc设计实例,而是设计生成器——从一个更高的层面去支持多种soc的实例设计。
  3. 改变单个配置就可以生成各种soc,包括MCU到多核服务器芯片的各种类型。
  4. 这篇报告将简要讲解2016年4月为止,RocketChip已经支持的特性。
  5. 这些标准扩展(乘除、原子、浮点)集中为通用标量指令集。
  6. 因为chisel直接描述了可综合电路,且比起高层次综合系统更加接近verilog这样的传统硬件描述语言,所以它可以在电路生成、电路的面向对象与功能描述方面,可以充分利用scala编程语言(的特性)。
  7. chisel还可以生成由c++实现的快速、精确到周期的RTL仿真器;这个仿真器功能上等效于商业版verilog仿真器并且明显更快。可用来仿真完整的RocketChip实例。
  8. 总结,RocketChip是一套可参数化、可组合出多种类soc设计的生成器库。下面是目前生成器和接口的能力的概览:
    core:标量核Rocket生成器、乱序超标量核BOOM生成器,两者都可选添加fpu、可配置功能单元流水线、可自定义的分支预测器。
    caches:cache和TLB生成器,支持配置容量、组相联、替换策略。
    RoCC:ROcket Custom Coprocessor interface,应用特定的协处理器模板。
    Tile:cache连贯性Tile的生成器模板。核和加速器的类型与个数都可配置,用来组成私有cache。
    TileLink:用于cache连贯性代理和对应cache控制器的组网的生成器。配置选项包括Tile的个数、连贯性策略、是否使用共享备份存储,和潜在的物理网络实现。
    外设:各种AMBA兼容总线、各类转换器、控制器(包括Z标量处理器)的生成器。
  9. Rocket也可看作是一个处理器组件的库。其它的设计中会用到一些Rocket原始设计模块,包括功能单元、cache、TLB、页表walker、特权架构实现(即控制/状态寄存器文件)。
  10. RoCC(ROcket自定义协处理器接口)促进了rocket处理器和协处理器之间的解耦通讯。
  11. RoCC接口接收rocket核发送来的协处理器命令。
  12. 这些机制充分满足在一个基于页的存储系统上构建协处理器。
  13. BOOM的目标之一是成为适用于教育、研究、工业,甚至乱序微架构进一步探索的基准实现。
  14. BOOM的实现只用了10k行chisel代码。代码量之所以这么少,部分原因是复用了更大的RocketChip库中已实现的许多部件;(比如)在前端,功能单元、页表walker、cache核浮点单元,全来自rocket和hardfloat库的实例。chisel还极大促进了BOOM成为一个真正的核生成器——可自定义的功能单元的组合,可参数化的取指/解码/发射/提交的宽度。
  15. zscale核实现了rv32im指令集,且设计成像ARM Cortex-M系列那样,通过AHB-Lite总线接口来兼容插入(外设?)。
  16. RocketChip包含着连贯cache与片上网络系统互联形式的共享存储层次结构的生成器。
  17. 这些生成器都是基于TileLink的——这是一个用于描述一
    套实现了某特定cache一致性策略的cache传输的协议框架。
  18. TileLink的目的是把片上网络的设计、cache控制器的实
    现,和一致性协议设计本身进行正交化(就是解耦?)。
  19. 任何符合TileLink传输(层)结构的cache一致性协议,都可对我们提供的物理网络和cache控制器更换。
  20. 反过来说,只要新设计的控制器和网络能确保其行为的正确性,soc的设计者就可以足够有信心地将他们放进基于TileLink的存储器层次结构、而不用担心会发生一致性协议相关的死锁。
  21. TileLink设计为可扩展的,并支持在它之上不断实现新的自定义cache一致性策略。
  22. 为了支持内存映射IO(MMIO),我们提供一个TileLink互联生成器。它会用一个地址表描述(文件)来生成可直连内存映射IO请求到内存映射外设的路由系统。
  23. 我们有一套用于检查过去遇到的、特定的存储bug的回归测试。着对复制有着顺序依赖、或时序依赖的bug特别有用,因为用软件重现这些bug会非常困难,甚至是不可能。
  24. 为协助通过随机测试来对核进行压力测试,我们实现了risv torture tester。它从代码序列的库中随机抽取一些片段,并缝合生成一段riscv汇编程序。每个代码序列中的指令互相交错。每个随机生成的测试程序都会分别在被测试的核和spike指令集模拟器(“黄金模型”)下跑(以进行对比验证)。

你可能感兴趣的:(香山处理器,risc-v)