RISC-V 指令集手册:用户级ISA详解与maven-assembly-plugin使用

需积分: 50 286 下载量 58 浏览量 更新于2024-08-09 收藏 3.65MB PDF 举报
"RISC-V指令集手册卷1:用户级指令集体系结构(User-LevelISA)2.1版" RISC-V是一种精简指令集计算机(RISC)架构,其设计目的是为了提供简洁、模块化且可扩展的指令集。在RISC-V指令集体系结构中,有四种核心指令格式,即R类、I类、S类和U类。这些指令都是32位长度,并且需要在4字节边界对齐,以避免指令地址不对齐异常。不遵循这一规则的条件分支或无条件转移可能会导致异常,但若条件分支未执行,则不会触发异常。 1. **R类指令**: R类指令包含7位的funct7、2位的rs2、2位的rs1、3位的funct3、5位的rd和6位的opcode。这种格式用于运算指令,其中源寄存器rs1和rs2以及目标寄存器rd的位置固定,便于硬件解码。 2. **I类指令**: I类指令有12位的立即数imm[11:0],2位的rs1,3位的funct3,5位的rd和6位的opcode。它主要用于包含较小立即数的操作,例如加载和存储 immediate。 3. **S类指令**: S类指令包含5位的imm[11:5],2位的rs2,2位的rs1,3位的funct3,5位的imm[4:0]和6位的opcode。这类指令用于存储操作,其中立即数部分被分割,以适应寄存器字段。 4. **U类指令**: U类指令有一个20位的立即数imm[31:12]和5位的rd,以及6位的opcode。这种格式适用于需要大立即数的指令,例如加载64位立即数到寄存器。 RISC-V设计中,立即数的符号位总是位于指令的第31位,这有助于简化符号扩展电路。为了优化硬件设计,所有指令中的寄存器标识符在所有格式中都固定在同一位置,尽管这会导致立即数在指令编码中的分布不均匀,类似于SPUR RISC-IV架构。 在RISC-V用户级ISA 2.1版中,有一些显著的变化和改进,包括: - 更多的注释和改进的文档组织。 - 每一章都有独立的版本号。 - 对于长指令编码的调整,以避免在长指令格式中移动rd标识符。 - 使用基本整数格式描述CSR(控制和状态寄存器)指令,并引入计数器寄存器。 - 更改了SCALL和SBREAK指令的名称为ECALL和EBREAK,但保留了原有的功能。 - 浮点数处理的清晰化,包括NaN的处理和浮点到整数转换的溢出行为。 - LR/SC(Load-Linked/Store-Conditional)指令的执行条件和失败条件的明确说明。 - RV32E提案,一个减少整数寄存器数量的精简版本。 - 调整了调用约定。 - 软浮点调用约定的栈对齐规则放宽,以及针对RV32E的调用约定的描述。 - C压缩扩展提案的修订,版本1.9。 RISC-V的设计旨在保持基本用户ISA和通用扩展(IMAFD)的稳定性,以确保未来版本的兼容性。自1.0版以来,ISA被分为基本整数内核和多个标准扩展,并优化了立即数编码以提高效率。