RISCV简介
1. RISC-V简介
RISC-V 是一个基于精简指令集计算(RISC)原则的开源指令集架构(ISA)。它的名字中,“RISC”代表精简指令集,“V”则代表这是第五代由加州大学伯克利分校开发的RISC架构,同时也寓意着“开放、可变、自由”。
与由一家公司掌控(如x86属于英特尔,ARM属于安谋)不同,RISC-V 最大的特点就是开放和免费。任何人都可以自由地使用、修改和设计基于 RISC-V 的处理器,无需支付高昂的授权费用。
- 它要实现通用的指令集,支持不同的处理器架构和应用。
- 它要适合设计各种规模的处理器,包括从最小的嵌入式控制器,到最快的高性能计算机。
- 它要兼容各种流行的软件栈和编程语言。
- 它要适用于所有实现技术,包括 FPGA(Field-Programmable Gate Array,现场可编程逻辑门阵列),ASIC(Application-Specific Integrated Circuit,专用集成电路),全定制芯片,甚至未来的制造元件技术。
- 它能用于高效实现所有微体系结构,包括微程序或硬连线控制、顺序、解耦或乱序流水线、单发射或超标量等。
- 它要支持高度定制化,成为定制加速器的基础,以应对摩尔定律的放缓。
- 它要稳定,基础 ISA 不会改变。更重要的是,它不能像以往的公司专有 ISA 那样消亡,包括 AMD 的 Am29000,Digital 的 Alpha 和 VAX,Hewlett Packard2的PA-RISC,Intel 的 i860 和 i960,Motorola 的 88000,以及 Zilog 的 Z8000。
2. 模块化ISA vs 增量ISA
过去的ISA都是增量式的,不仅要实现新的指令,还要实现一遍过去的所有扩展。保持向旧二进制程序的兼容性。
然而,增量式的ISA存在很多过去的错误设计,导致了指令集的复杂性和不一致。
为了解决这个问题,RISC-V 采用模块化ISA的设计。RISC-V围绕一个名为RV32I的基础指令集,它永不改变,包含了整数运算、分支、内存访问等核心功能。基础指令集非常小,只有约50条指令,功耗和面积开销极低。
RISC-V 编译器得知当前硬件包含哪些扩展后,便可为该硬件生成最优代码。
RISC-V 的基础指令集(RV32I)非常小,只包含最基础的整数运算、分支跳转等指令。其他的功能,比如做小数运算(浮点)、做乘除法、处理多核同步等,都做成了可选的“扩展模块”。
如果编译器知道你支持浮点扩展(F/D),它就会直接生成一条高效的浮点运算机器指令来处理小数。如果编译器发现你没有这个扩展,它就会自动用很多条基础整数指令来“模拟”浮点运算(虽然慢,但至少能运行)。
为了让工程师一眼就知道某个处理器核心有哪些功能,RISC-V 有一套标准的命名规则。
RV32:表示这是 32 位地址空间的基础指令集。
I:表示包含了整数基础指令(这是必须的,通常省略不写)。
M:表示包含了整数乘除法扩展。
F:表示包含了单精度浮点扩展。
D:表示包含了双精度浮点扩展。
RV32IMFD 连起来的意思就是:“这是一个 32 位的 RISC-V 处理器,它支持整数运算、乘除法、单精度浮点和双精度浮点。”
3. ISA设计指标
- 成本:
- 简洁:简洁的ISA能节省很多设计和验证的时间。
- 性能:性能衡量,可分解为三个因子:
- 架构和实现分离
- 提升空间: 大幅提高性价比的唯一途径是为特定领域(如深度学习,增强现实,组合优化,图形等)添加自定义指令。如今的 ISA 必须为将来的扩展预留操作码空间。
- 代码大小: 程序越小,程序存储器所需芯片面积越小
- 易于编程/编译/链接: 编译器必须做好寄存器分配工作,才能生成高效的代码。