RISC-V用户级指令集体系结构2.1版解析

需积分: 50 286 下载量 122 浏览量 更新于2024-08-09 收藏 3.65MB PDF 举报
"RISC-V指令集手册卷1:用户级指令集体系结构(User-LevelISA)2.1版" RISC-V是一种开放源代码的指令集架构(ISA),旨在提供简洁、高效的设计,同时允许未来扩展。这篇文档是关于RISC-V用户级ISA的详细描述,涵盖了从1.0版到2.0版的重要更新和改进。 在2.1版中,RISC-V的用户级ISA保持了核心的稳定性,尤其是基础用户级ISA和2.0版的通用扩展IMAFDQ没有发生变化。其中,IMA代表Integer(整数)、Load-Store(加载-存储)、Atomic(原子)、Floating-point(浮点)、Double-precision(双精度),FDQ则表示Floating-point(浮点)、Density(密度)、Quad(四倍精度)。 在2.0版中,RISC-V ISA经历了一系列的改进: 1. **ISA的划分**:将ISA拆分为一个整数基本内核和多个标准扩展,以更好地管理和扩展。 2. **指令格式优化**:优化了指令格式,使立即数编码更有效率,有助于提高代码密度和执行效率。 3. **内存模型**:基本的ISA现在定义为小端存储系统,大端和双端作为非标准变种。LR/SC(Load-Reserved/Store-Conditional)指令被添加到原子指令集中,用于实现更高级别的并发操作。 4. **AMO和LR/SC**:这两类指令支持释放一致性模型,增强了并发控制。 5. **FENCE指令**:提供了细粒度的内存和I/O序列化,确保了数据一致性。 6. **AMO指令**:加入了fetch-and-XOR操作(AMOXOR),并修改了AMOSWAP的编码,为未来的扩展预留了空间。 7. **AUIPC和JAL指令**:AUIPC(Add Upper Immediate to PC)指令现在可以添加20位立即数到程序计数器,替代了RDNPC,简化了位置无关代码的编写。JAL(Jump And Link)指令移到U类型格式,具有显式的目标寄存器,J指令由 rd=x0 的JAL指令取代,减少了ISA的复杂性。 8. **JALR指令**:移除了静态提示,简化了调用约定。 自上一版本以来,文档还进行了一些补充和澄清,包括: - **注释的增加和改进**:提供了更丰富的解释和说明。 - **章节独立版本号**:每个章节都有自己的版本号,便于追踪更新。 - **长指令编码的修改**:避免了在非常长的指令格式中rd字段的移动。 - **CSR(Control and Status Registers)指令**:现在使用基本整数格式描述,并引入了计数器寄存器。 - **SCALL和SBREAK指令**:重命名为ECALL和EBREAK,但编码和功能未变。 - **浮点NaN处理**:明确了浮点NaN的处理方式和新的规定NaN值。 - **浮点到整数转换溢出**:清晰说明了溢出时的返回值。 - **LR/SC指令**:明确了成功和失败的条件,包括在压缩指令序列中的使用。 - **RV32E提案**:提出了一种新的RV32E基本ISA,减少整数寄存器的数量。 - **调用约定修订**:对函数调用和返回的约定进行了调整。 - **软浮点调用约定**:放宽了栈对齐要求,描述了RV32E调用约定。 - **C压缩扩展提案**:提出了修订后的C压缩扩展版本1.9。 这些变更和改进确保了RISC-V的用户级ISA不仅保持了其简洁性和高效性,而且增加了灵活性和扩展性,以适应各种应用场景和未来的技术发展。