1.3 RISC-V指令集概述

RISC-V指令集始于加州大学伯克利分校(UC Berkley)设计的第五代开源RISC指令集,它相对于成熟的指令集来说有开源、简捷、可扩展和后发优势,没有历史包袱,可以绕过很多弯路,也不需要考虑兼容历史指令集。

RISC-V指令集是一种以模块化形式存在的结构。指令集分为基本部分和扩展部分,硬件需要实现基本指令集,而扩展部分则是可选的。扩展部分又分为标准扩展和非标准扩展。例如,乘除法、单双精度的浮点、原子操作就在标准扩展子集中。基本指令集只包含40余条指令,为所有架构所共有,加上其他扩展部分指令共200余条,见表1-3。

表1-3 RISC-V指令集构成

I+M+F+A+D被缩写为“G”,共同组成通用的标量指令。基本RISC-V ISA具有32位固定长度,并且需要与32位地址对齐。但是也支持变长扩展,要求指令长度为16位整数倍,与16位地址对齐。具体的指令长度在编码中的体现如图1-5所示。对于16位的压缩指令集,其最低的两位不能为11;对于32位指令集,其最低两位固定为11,第[4:2]位不能为111。从这种编码形式来看,硬件可以根据低位的若干位快速判断出指令的位宽,便于硬件电路的实现。

· 图1-5 RISC-V指令长度编码

模块化的指令结构使得RISC-V具有了定制化、低功耗的特点,这些特点对于很多领域的应用都非常重要。可以根据CPU的需求选择指令子集,RISC-V编译器得知当前硬件包含哪些扩展后,便可以生成当前硬件条件下的最佳代码。用户可以根据自己的需求拼接,以支持在不同条件下工作的CPU架构。