浅谈RISC-V指令集的基本指令格式和立即数操作

在以前的文章中,我分享了RISC-V在设计的初衷,除了可以被通用软件开发使用之外,还有一个目的就是,可以支持更多定制化的设计。也就是说,用户可以在基本指令集上面,进行一个或者多个的指令集扩展操作,但是有一个条件,不能再重新定义基本指令集。也就是说,任何一款基于RISC-V指令集的处理器,都要能够支撑整数基本指令集。可以看出基本指令集的重要性。

浅谈RISC-V指令集的基本指令格式和立即数操作

基本指令格式

那么今天我们就继续来分享一下,在基本指令集体系机构中(ISA),四种核心指令格式(R/I/S/U)。基本指令格式如下图所示:

浅谈RISC-V指令集的基本指令格式和立即数操作

图一 RISC-V 基本指令格式

从上图中,我们可以看出这四种核心指令格式有以下三个特点:

  1. 所有指令的长度固定,都为32位,以4字节边界对齐;
  2. 源寄存器rs1rs2,以及目标寄存器rd的位置保持不变;
  3. 将立即数的符号位放置在最左边,方便进行符号扩展。

如果出现了条件分支或者无条件转移情况,并且地址没有按照4字节对齐时,就产生一个地址不对齐的异常。另外,为了指令译码简单,RISC-V ISA将rs1、rs2和rd寄存器放在相同位置,这导致立即数不同比特被分散开。例如,当需要加载一个32位立即数时,通常由load指令给出高20bits,常规指令给出低12bits,两个共同拼为32bits。

需要说明的是,上面这些扩展都是有符号扩展,如果对无符号数进行扩展,并没有看到很明显的收益,所以对于无符号数而言,没有进行扩展的指令,这也使得整个ISA更加简洁。

浅谈RISC-V指令集的基本指令格式和立即数操作

立即数编码

立即数处理,除了上面四种之外,还有两种变形(SB/UJ),立即数基本指令格式如下图所示:

浅谈RISC-V指令集的基本指令格式和立即数操作

图二 立即数基本指令格式

对比图一和图二,我们不难看出,在SB格式中,(imm[10:1])和符号位被放在了固定的位置上面。SB中的最高位(imm[11])被刚在S格式中的最低位(inst[7])。U和UJ格式的区别与S和SB类似,就不再赘述。

在指令集中,立即数的符号扩展操作非常重要,为了立即数操作的高效性,在RISC-V中,将所有立即数的符号位固定在了指令的31位,这使得在指令译码的时候,可以同时进行立即数的符号扩展操作。虽然将立即数放在在指令中的固定位置,对于一些复杂的实现来讲,收益有限(因为会有对应的硬件开销支撑),但是这一做法仍然可以降低硬件电路的开销。

浅谈RISC-V指令集的基本指令格式和立即数操作

小结

今天我们分享了RISC-V中的基本指令格式,以及立即数编码格式的内容。从上面可以看出,整个RISC-V指令集的设计出发点,都是为了提升指令编译的效率,并且使得整个指令集更加简单。后面,我会继续分享RISC-V的其他指令,包括整数计算指令、控制指令等内容,欢迎大家继续关注。

展开阅读全文

页面更新:2024-06-16

标签:指令   操作   格式   译码   寄存器   整数   开销   字节   符号   收益   也就是说   核心   条件   位置   简单   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top