在设计一款处理器之前,我们需要确定他的指令集架构。而指令集架构又包括指令格式、寻址方式、指令类型。
指令格式
- 用于寄存器-寄存器的R型指令;
- 用于短立即数和访问load的I型指令;
- 用于访问store的S型指令
- 用于条件分支跳转的B型指令(6条)
- 用于长立即数的U型指令
- 用于无条件分支跳转的J型指令(2条)
寻址方式
- 加载和存储支持的唯一类型寻址方式是符号扩展12位立即数到基地址寄存器
- 分支指令寻址方式是12位立即数乘以2,符号扩展它,将得到的值加到PC上作为分支的跳转地址
指令类型
1.运算类指令:用于实现算术,逻辑,比较等;
2.分支转移指令:实现条件转移,无条件转移等运算,没有延时槽
3. 加载和存储指令:实现字节、半字,字的加载、存储操作,采用的都是寄存器相对寻址方式
4. 控制与状态寄存器访问指令:实现系统控制与状态寄存器的读-写操作,原子读-修改,原子读-清零等操作
5. 系统调用指令:实现对系统调用,调试等功能
这种指令格式规范有序,有着数学之美,优点如下:
- 这种格式可提高性能功耗比,指令只有6种格式,并且所有的指令都是32位长,这简化了编码;
- RSIC-V指令提供三个寄存器操作数,而不是像x86-32一样,让源操作数和目的操作数共享一个字段,减少了软件的程序操作【减少了一条move指令,来保存目的寄存器的值】
- 对于所有指令,要读写的寄存器标识符总是在同一位置,将源寄存器和目标寄存器固定在同样位置,以简化指令译码。【意味着在解码之前,就可以先访问寄存器】
- 这些格式的立即字段总是符号扩展,符号位总是在指令中最高位。意味着可能成为关键路径的立即数符号扩展,可以在指令解码之前进行。
访问指令
- RISC-V架构的指令数目很简洁,基本指令只有47条,采用小端格式,采用松散存储器模型
- RISC-V架构只有6条带条件跳转指令,减少指令的条数,同时硬件设计上更简单
- RISC-V对于没有分支预测器的低端CPU,采用静态分支预测机制,对于配有硬件分支预测器的高端CPU,还可以采用高级的动态分支预测机制来保证性能。
RISC-V 优点
- 32位字节寻址空间
- 所有指令均为32位长
- 31个寄存器组,全部为32位宽,寄存器0硬连线为零
- 所有指令操作都是寄存器到寄存器,访问快(没有寄存器到内存操作)
- 加载/存储字加上有符号和无符号加载/存储字节和半字
- 所有算术、逻辑和移位指令都有立即数版本的指令
- 立即数总是符号扩展
- 仅提供一种数据寻址模式(寄存器+立即数)和PC相对分支
- 无乘法或除法指令
10.一个指令,用于将大立即数加载到寄存器的高位,这样加载32位常量到寄存器只需要两条指令。
参考:
zhuanlan.zhihu.com/p/264836697