RISC-V 体系结构本身属于 Load-Store 体系结构,指令集即 RISC 精简指令集。该类指令集和体系结构的最大特点,是 CPU 本身不直接对内存中数据进行操作,所有的运算都在寄存器中进行,寄存器与内存的数据交换则由专门的 Load-Store 指令完成。
开放
RISC-V 体系结构最大的特点就是开放,RISC-V 体系结构不仅所有资料,信息都是可以开放的,更是开源的。在如 ARM 这样的闭源体系结构中,每年高通,海思,三星等基于 ARM IP 核进行芯片设计的企业,均要向 ARM 公司支付高昂的授权费。
在 RISC-V 体系结构下,与之不同的是,任何人都可以平等地,自由地使用 RISC-V 体系结构。设计 RISC-V 指令集不需要支付任何的授权费用。RISC-V 也是第一个真正成功的开源指令集。
模块化
和 ARM 有些类似的是,RISC-V 指令集包括几个可以互相替换的基本指令集,以及额外可以选择的扩充指令集。
基本指令集包括 RV32I,RV64I 等,实现不同位数的,最基础的整数加减的运算
而扩充指令集包括了
- M(整数乘除法扩充)
- A(不可中断指令扩充)
- F(单精度浮点运算扩充)
- D(双精度浮点运算扩充)
等等,基本可以实现我们熟悉的指令集的所有功能。
而在扩充指令集中,我们不仅可以实现乘除法,浮点等现代计算机常见的指令集,还有向量运算等目前热门的,深度学习领域正在研究的专用芯片常用的指令集。这令 RISC-V 体系结构从小到嵌入式计算机,大到服务器,个人电脑的通用计算机(只要有 RV32IA,就可以运行完整 Linux 操作系统),甚至各种特定领域的专用芯片,都可以实现,具有极好的兼容性与可拓展性。
可拓展
RISC-V 可拓展的特性来自于其模块化的设计,一个 RISC-V 体系结构的计算机可以选择只实现一部分的指令集,它还可以预留相关的接口,将无法处理的拓展指令交由计算机系统中可配置的协处理器处理,故 RISC-V 体系结构具有高度的可拓展性。
而许多 RISC-V 开源实现中,通过简单的参数开关,就可以在 FPGA 中烧入具有不同拓展指令集的 RISC-V 体系结构,具有极好的伸缩性。如在 PicoRV32 中,用户可以自由选择仅仅使用最基本的 RV32I 指令集,还是带上 M (乘法)或 C (压缩指令)扩展。
易实现
RISC-V 易实现的特性来自于其模块化的设计,对于最基础的基本指令集 RV32I 只有几十条指令,令实现模拟器,甚至用 Verilog, VHDL 等 HDL 实现一个简单的 RISC-V 计算机相较于其他体系结构十分简单,令 RISC-V 嵌入式系统非常容易设计。
规整的指令结构
RISC-V 指令结构十分规整,同样以最基础的指令集 RV32I 为例,对于其十几种运算指令,仅仅有立即数 / 无立即数的两种格式。
对于有立即数指令,其指令格式为:
对于无立即数指令,其指令格式为:
可以看到,RISC-V 指令格式非常规整,这令实现 RISC-V 指令译码器变得非常简单,甚至可以间接提升指令译码的速度。
简单的寄存器组组成
同样地,RISC-V 寄存器组的组成也非常简单规整,列表如下:
这令寄存器组的设计,与指令取操作数和写回操作设计都变得简单了。而为小型嵌入式系统设计的基础指令集 RV32E 则更为简单,仅有 32 个寄存器中的前 16 个寄存器。
写在最后
RISC-V 体系结构开放,可拓展,模块化,易实现的特性,已经获得了学界的认可,在芯片领域已经掀起了一股新的热潮。也希望这个开源开放的体系结构,能够取得商业上的成功,最终打破芯片制造的专利壁垒。