RISC-V 技术概览

最近半年在做的工作与RISCV相关,有时间了总结一下相关的信息和资源。

Posted by Readm on February 18, 2018

什么是RISC-V

RISC-V (pronounced “risk-five”) is a new instruction set architecture (ISA) that was originally designed to support COMPUTER ARCHITECTURE RESEARCH and EDUCATION and is now set to become a standard open architecture for industry implementations under the governance of the RISC-V Foundation.

为什么要开发RISC-V

  • 免费开放给工业界和学术界。
  • 适合真正的硬件设计,而非依靠模拟/二进制翻译。
  • 避免“过度设计”或者限制实现技术。可以在各种平台上自由地实现。
  • 指令集分离,可以灵活地使用和扩展指令。
  • 广泛支持各种特性

What’s Available (2017)?

  • User-level ISA specification
  • Privileged ISA specification
  • RISC-V software tools
    • gcc
    • gdb
    • LLVM
    • Spike ISA simulator
    • QEMU
    • riscv-tests
  • FPGA
    • VC707,ZC706

资源

RISCV技术栈

RISCV由上至下如下

  • 软件
    • RISCV的软件可以直接使用工具链编译,一般的源码都可以重新编译来运行。
  • 编译器
    • RISCV可用的编译器主要有两个,GNU工具链中的gcc和LLVM的RISCV支持,两者都与普通的编译器差距不大。
  • (软件模拟器)
    • 软件模拟器有Qemu和spike
    • Qemu是通过增加一个新的指令集来实现的,与模拟其他指令集差不多。
    • spike是RISC-V指令集的模拟器,要注意在你的Linux上使用spike一般要使用pk(代理内核)来处理系统调用。
  • 操作系统
    • Linux现在已经将RISC-V列入正式支持的指令集列表中了。我们也尝试过了4.6版本的Linux。
    • 操作系统的基础库都可以直接使用,主要用正常的glibc等常用的Linux共享库和newlib嵌入式库。
      • 在riscv-tools中你会发现有两套工具链:gnu和newlib
      • 其中gnu是正常linux的工具链,动态调用库文件,运行时需要系统中有库文件。
      • newlib是为了嵌入式系统编写的库,静态编译,运行时不需要库文件。
  • FPGA
    • 尝试过的有ZC706,在ZC706上使用一个ARM核心来启动一个Linux,再由这一核心启动RISCV的Rocket核心,这使得内存有一部分被ARM核心的Linux占用。
    • VC706不会有这样的问题。
  • SoC
    • SoC中主要包括了不同板子的接线设置,和各个IP核心,Rocket Core核心
    • 所有的这些Verilog都可以用Chisel来写。
    • Rocke-Chip中有自己的硬件模拟器。
  • Rocket Core
    • Rocket是一个单发射顺序执行5级流水的开源核心,是最常用来试验的核心。
    • 与之并列的还有Boom,乱序执行CPU,更加复杂。

这就是你需要关注的全部技术栈,如果希望在RISC-V上改动,在每个层面上都需要考虑好设计,至少有一个解决方案。