risk5 指令集架构简介

1.模块化的指令子集

risk5的每个模块用一个字母表示,最基本的指令集模块是 I

基本指令集

指令数

描述

RV32i

47

32位地址空间与整数指令,支持32个通用整数寄存器

RV32E

47

RV32i 的子集,支持16个通用整数寄存器

RV64i

59

64位地址空间与整数指令及一部分32位的整数指令

RV128i

71

128位地址空间与整数指令及一部分64和32位的指令

扩展指令集

指令数

描述

M

8

整数乘法与除法指令

A

11

存储器原子(Atomic)操作指令和Load-Reserved/Store-Conditional指令

F

26

单精度(32bit)浮点指令

D

26

双精度(64bit浮点指令,必须支持F扩展指令

C

46

压缩指令,指令长度为16位

  • RV64IMAFD是通用组合,也可以写成RV64G

为了提高代码密度,risk5架构也提供可选的压缩指令子集,用C表示。压缩指令编码长度16bit,非压缩的指令编码长度32bit。

为了减少面积,risk5提供了嵌入式架构,用E表示,为了追求极低面积与功耗的深嵌入式场景。该架构仅仅需要支持16个通用整数寄存器,非嵌入式的需要支持32个通用整数寄存器。

  • 以上模块化的指令集可以搭配起来使用,比如RV32EC架构追求小面积、低功耗的嵌入式场景。比如大型的64位架构可以选择RV64G。

2.可配置的通用寄存器组

risk5架构的整数通用寄存器组,包含32个(i架构)或16个(E架构)通用整数寄存器,其中整数寄存器0被预留为0,其他31个(i架构)或15个(E架构)为普通的通用整数寄存器。

如果使用浮点模块(F/D),则需要另外一个独立的浮点寄存器组,包含32个通用浮点寄存器。
如果仅仅使用F模块的浮点指令子集,则每个通用浮点寄存器的宽度为32bit。
如果使用了D模块的浮点指令子集,则每个通用浮点寄存器的宽度为64bit。

3.规整的指令编码

在流水线中能够尽快地读取通用寄存器组,往往是处理器流水线设计的期望之一,这样可以提高处理器性能和优化时序。

这个看似简单的道理在现在许多RISC架构中都很难实现,因为经过多年反复修改不断添加新指令后,其指令编码中的寄存器索引位置变得非常凌乱,给译码器造成了负担。

正因为先前糟糕设计的经验,risk5的指令集编码非常规范,指令所需的通用寄存器的索引都放在固定的位置。

rild 架构 risk架构_寄存器

4.简洁的存储器访问指令

RISC-V和普通RISC一样,使用专用的存储器读(LOAD)、专用的存储器写(Store)指令访问存储器,其他指令无法访问存储器。

RISC-V的读写支持一个字节、两个字节(半个字)、4个字节(一个字)、8个字节(两个字)为单位的存储器读写操作。

RISC-V的存储器访问指令有如下显著特点

  1. 地址对齐的存储器读写操作(推荐
  2. 只支持小端格式
  3. 不支持地址自增自减模式
  4. 采用松散存储器模型(Relaxed Memory Model).松散存储器模型对于访问不同地址的存储器读写指令的执行顺序不做要求,除非使用明确的存储器屏障(Fence)指令加以屏蔽

5.高效的跳转指令

6.简洁的子程序调用

7.无条件码

早期的RISC头几位是条件码,只有条件为真时指令才被真正执行。

  • 优点:使得编译器将短小的分支指令块编译成带条件码的指令,而不用编译成分支跳转指令。这样减少了分支跳转,减少了指令数,避免了跳转带来的开销
  • 缺点:使得CPU更加复杂,增加硬件开销,可能损伤时序使得CPU主频无法提高。

RISC-V放弃这种条件码,对任何条件判断都使用普通的带条件分支跳转的指令。这样简化了CPU的设计,通过强大的分支预测电路保住CPU能够快速跳转执行达到高性能。

8.无分支延迟槽

分支延迟槽(Delay slot)是在每一条分支指令后面紧跟着一条或多条不受分支跳转影响,不管分支是否跳转,后面几条指令一定会执行。
使用Delay slot是因为早期处理器流水线太简单,没有高级的分支预测电路

9.无零开销硬件循环

Zero Overhead Hardware Loop指令,是通过硬件的直接参与,设置某些循环次数寄存器,可以让程序自动进行循环,每一次循环则次数寄存器自动减一,这样持续循环直到循环次数寄存器的值为0,则退出循环。

  • 优点:将循环工作交给硬件完成,省略了加法和条件跳转指令,减少了指令条数且提高了性能。
  • 缺点:硬件复杂

10.简洁的运算指令

11.优雅的压缩指令子集

12.特权模式

RISC-V架构有3种工作模式,又称为特权模式

  • Machine Mode(M Mode)
  • Supervisor Mode(S Mode)
  • User Mode(U Mode)

RISC-V架构中M Mode为必选模式。通过不同的模式组合可以实现不同的系统。

RISC-V也支持几种不同的存储器地址管理机制,包括对于物理地址和虚拟地址的管理机制,使得RISC-V架构能够从简单的嵌入式系统(直接操作物理地址)到复杂的操作系统(直接操作虚拟地址)的各种系统。

13.CSR寄存器

Control and Status Register用于配置或记录一些运行的状态。CSR是内核的寄存器,使用自己的地址编码空间和存储器寻址的地址区间完全无关系。

CSR寄存器的访问采用专用的CSR指令,包括CSRRW、CSRRS、CSRRC、CSRRWI、CSRRSI、CSRRCI等。

14.中断和异常

15.矢量指令子集

RISC-V架构现在没有定型的Vector矢量指令子集,但是从草案来看,RISC-V的矢量指令子集将使用可变长度的矢量,而不是定长的SIMD指令集(比如ARM的NEON和Intel的MMX),从而灵活地支持不同的实现。

追求低功耗、小面积的CPU可以选择长度较短 硬件矢量实现,高性能CPU可以选择较长的硬件矢量实现,并且同样的软件代码能够互相兼容。

16.自定义指令扩展