什么是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
资源
- RISC-V
- ISA Specification
- SiFive公司
- Freedom:SiFive提供的SoC,适用于VC707和Arty FPGA。
- fpga-zynq:Support for Rocket Chip on Zynq FPGAs。ZC706确认可用。
- Rocket Chip:SoC
- Chisel:用于编写Rocket的硬件语言。
- riscv-tools:软件工具集。
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上改动,在每个层面上都需要考虑好设计,至少有一个解决方案。