第2章 RISC-V基础整数指令集RV32I,V2.1

本章描述了RV32I基础整数指令集的2.0版本。
RV32I设计目标
RV32I被设计成足以形成编译器目标并支持现代操作系统环境。ISA的设计也是为了减少最小实现所需要的硬件。
RV32I包含40条独立的指令,便可以模拟其他任何ISA扩展。(除了原子扩展"A",它需要额外的硬件支持原子性)。在实践中,包括机器模式特权级架构在内的硬件实现还需要6条CSR指令。

2.1 RV32I的程序员模型

图2.1显示了RV32I的非特权级状态。对于RV32I,共32个寄存器,每个位宽32比特,即XLEN=32比特。
寄存器0是硬件连线的,所有位都是零。通用寄存器1~31存储的值被各种指令解释为布尔值集合、二进制补码表示的有符号二进制整数、或无符号二进制整数。

还有一个额外的非特权寄存器PC,用于保存当前指令的存储地址。
 图2.1 RV32I整数指令寄存器
在RV32I中,没有专用的堆栈指针寄存器SP或者返回地址链接寄存器LR。指令编码允许任何寄存器用于此目的。
然而,标准软件调用约定使用X1作为LR,使用X2作为SP,使用X5作为备用LR。硬件可能会使用X1或X5来加速函数调用和返回,见JAL和JALR指令描述。
16比特压缩指令倾向固定使用X1作为LR,X2作为SP。使用其他寄存器的软件也可以正常运行,但可能需要更大的代码尺寸。

可用的架构寄存器数量对代码大小、性能和能耗有很大影响。虽然16个寄存器对于编译代码的整数ISA来说足够了,但是16位的16个寄存器不能编码一个完整的ISA,不支持3地址格式的指令,虽然2地址格式的是可以的,但是它会增加指令数量并降低效率。我们希望避免使用中间指令大小(例如Xtensa的24位指令)来简化基础硬件实现。更多整数寄存器也有助于提高高性能代码的性能,可以广泛使用循环展开,软件流水线和缓存平铺等。

2.2 基础指令格式

在RV32I中,有四种指令格式(R/I/S/U)。如图2.2所示,所有指令格式长度都是32位。在内存中,必须按照4字节边界对齐,即IALIGN=32。
在无条件跳转指令或者分支转移指令中,如果目的地址不是四字节对齐的,则触发指令地址未对齐异常。这个异常会在分支或者跳转指令中报告,而不是目的指令。跳转指令未发生时,并不会产生指令地址未对齐异常。

注意:

  1. 在16bit的ISA中,指令地址按照2字节边界对齐。
  2. 在分支或跳转指令中产生的地址未对齐异常有助于调试和简化硬件设计,这是唯一产生指令地址未对齐异常的地方。

解码一个预留指令的行为是未定义的。有些平台也许要求产生非法指令异常。

在所有格式中,RV32I保证源寄存器(rs1, rs2)和目的寄存器(rd)在相同位置,以此来简化编码。
除了在CSR指令中使用的5比特立即数,立即数都是有符号扩展,然后被打包到指令最左边的可用位置来减少硬件复杂度。特别地,立即数符号位总是在指令的第31位来加速有符号扩展电路的速度。

解码寄存器说明符在实现的关键路径上,在设计和实现计算机处理器的时候,解码指令中的寄存器标识是一个重要任务,它要正确识别指令中的寄存器号和他们的操作数,如果解码复杂需要多个步骤,那么整个流水线的吞吐量就会受到影响,从而导致性能下降。
为了避免在解码过程中出现性能瓶颈,RISC-V指令架构选择了一种简化的方式,将寄存器号放在相同位置,无论指令格式是什么,处理器都可以在相同位置找到源寄存器和目的寄存器,这样以来,解码阶段的逻辑可以更加简单高效,因为不需要针对不同格式的指令进行不同的解码。
图2.2 RV32I指令编码格式注意:

  1. 在实践中,立即数要么很小,要么很大,需要全部的XLEN位。我们通常选择不对称的立即分割(常规指令采用12位立即数,并增加一种专用的加载上限指令,来增加操作码可用的操作码空间。
  2. 立即数扩展总是符号扩展,因为我们没有看到MIPS ISA使用零扩展的好处,我们尽可能保持ISA的简洁性。

2.3 立即数编码变体

关于立即数变体,有两种,新增格式(B/J)。如下图所示
立即数变体S和B格式区别:用途不同:B格式指令主要用于条件分支操作。S格式指令主要用于将数据存储到内存中。 B格式指令不像常规那样将立即数字段的所有位在硬件中左移1位,而是将中间位imm[10:1]和符号位保持固定位置,而S格式的最低位imm[0]则被编码为B格式的高阶位imm[1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值