(一)RISC-V指令集介绍
RISC-V指令集是UC Berkley 大学设计的第五代开源 RISC ISA, V 也可以认为是允许变种(Variations)和向量(Vector)向量实现,数据的并行加速功能也是明确支持目标,是专用硬件发展的一个重要方向。RISC ISA相对于成熟的指令集来说有开源、简捷、可扩展、和后发优势(没有历史包袱,可以绕过很多弯路,也不需要考虑兼容历史指令集)等。
指令集分为基本部分和扩展部分,基本部分的指令集所有硬件实现都必须有这一部分实现,而扩展部分则是可选的。扩展部分又分为标准扩展和非标准扩展。例如,乘除法、单双精度的浮点、原子操作就在标准扩展子集中。
“I” 基本整数集,其中包含整数的基本计算、Load/Store和控制流,所有的硬件实现都必须包含这一部分。
“M” 标准整数乘除法扩展集,增加了整数寄存器中的乘除法指令。
“A” 标准操作原子扩展集,增加对储存器的原子读、写、修改和处理器间的同步。
“F” 标准单精度浮点扩展集,增加了浮点寄存器、计算指令、L/S指令。
“D” 标准双精度扩展集,扩展双精度浮点寄存器,双精度计算指令、L/S指令。
I+M+F+A+D 被缩写为 “G” ,共同组成通用的标量指令。
在后续ISA的版本迭代过程中,RV32G和RV64G总是保持不变。
基本RISC-V ISA具有32位固定长度,并且需要32位地址对齐。但是也支持变长扩展,要求指令长度为16位整数倍,16位地址对齐。
32位指令最低2位为“11”,而16位变长指令可以是“00、01、10”,48位指令低5位位全1,64位指令低6位全1。任何长度的指令,如果所有位全0或全1,都认为是非法指令,前者跳入填满0的储存区域,后者通常意味着总线或储存器损坏。
另外,RISC-V默认用小端储存系统,但非标准变种中可以支持大端或者双端储存系统。
另外专业术语:
异常:RISC-V线程中出现了指令相关的非正常情况。
自陷:RISC-V线程中出现了指令相关的异常情况,控制同步传输到自陷处理函数(一般在高特权环境中执行)。
中断:RISC-V线程外异步出现了一个事件,如果需要处理则需要选择某条指令来接收,并顺序产生自陷。
(二)RV32I 基本整数指令集
基本整数子集用户可见状态为31个寄存器x1~x31,用来保存整数值,其中x0是常数0。还有一个用户可见的寄存器pc用来保存当前指令的地址。