网站建设公司是什么意思,表白网站在线生成,多少钱英文,外贸网站建设合同RISC-V指令格式 1 RISC-V指令集命名规范2 RISC-V指令集组成2.1 基础整数指令集2.2 扩展指令集 3 RISC-V指令格式3.1 指令表述3.2 指令格式 本文属于《
RISC-V指令集基础系列教程》之一#xff0c;欢迎查看其它文章。 1 RISC-V指令集命名规范
前面提到过RV32I#xff0c;这是… RISC-V指令格式 1 RISC-V指令集命名规范2 RISC-V指令集组成2.1 基础整数指令集2.2 扩展指令集 3 RISC-V指令格式3.1 指令表述3.2 指令格式 本文属于《
RISC-V指令集基础系列教程》之一欢迎查看其它文章。 1 RISC-V指令集命名规范
前面提到过RV32I这是什么含义呢 我们看看RISC-V的命名规范是如何定义的就明白了。
RISC-V命名规范RV[###][abc……xyz]
RV用于标识 RISC-V 体系架构的前缀即 RISC-V 的缩写。[###]用于标识处理器的字宽也就是 处理器的寄存器宽度单位为 bit通常可以为32、64、128。[abc…xyz]标识该处理器支持的指令集模块集合。
因此RV32I表示RISC-V的32位整数指令集它是RISC-V 的核心是冻结的永远不会改变。 也就是说RISC-V的所有指令集合名称全部是以RV打头加位宽加模块名来组成的后续识别也就很简单了。
2 RISC-V指令集组成
RISC-V指令集是以一个基础整数指令集为核心模块根据需要再选择多个扩展指令集组合而成的。
用一个公式简单表达即
RISC-V指令集 1个基础整数指令集 多个可选的扩展指令集在RISC-V指令集架构中G表示通用组合全称为RV32G32位或RV64G64位。这个通用组合由一系列指令子集模块组成其中包括I、M、A、D、F等模块。这些模块组合在一起形成一个完整的指令集。 因此G是RISC-V指令集架构中通用处理器所包含的指令集的表示。
也就是说用公式表示即
G I M A D FI表示基础整数指令集M/A/D/F表示具体扩展指令集含义见后续。
2.1 基础整数指令集
基础指令集是固定的永远不会改变。扩展指令集类似一种插件的思想。 RISC-V协议规定的基础整数指令集一共有4种如下所示 高字长的基础整数指令集向下兼容。 其中嵌入式指令集Embedded是基础整数指令集的子集在一些小型的嵌入式场景中适用。
设计时只需要从4种指令集中任选一种即可。 目前RV128I需要根据实际使用来改进设计规范因此尚未冻结。 2.2 扩展指令集
RISC-V 允许在实现中以可选的形式实现其他标准化和非标准化的指令集扩展。 RISC-V协议规定的扩展指令集就比较多了如下所示
M乘法和除法指令RV32MRV64MA原子指令RV32ARV64AF单精度浮点指令RV32FRV64FD双精度浮点指令RV32DRV64D
特定组合“IMAFD”被称为 “通用General”组合用英文字母 G 表示比如 它们与RV32I统称为RV32G或者与RV64I统称为RV64G。 RV32G表示32位RISC-V通用处理器指令集组合。 RV64G表示64位RISC-V通用处理器指令集组合。 3 RISC-V指令格式
3.1 指令表述
在RISC-V中指令是通过如下图方式表述的 图中从左到右连接带下划线的字母即可描述若干条指令。
大括号{ } 内列举了每组指令的所有变体。这些变体通过带下划线的字母和不表示任何字母的下划线_ 区分。
例如上图表示slt、slti、sltu、sltiu 这4 条RV32I 指令。
3.2 指令格式
RISC-V 只有6 种指令格式每条指令都是32 位。
R 型指令用于寄存器间操作I 型指令用于短立即数和取数load操作S 型指令用于存数store操作B 型指令用于条件分支跳转U 型指令用于长立即数J 型指令用于无条件跳转
这6 种指令格式定义如下图所示 opcode表示操作码固定占用[6:0]。rd (Destination Register)表示目的寄存器固定占用[11:7]若存在。funct3表示操作字段固定占用[14:12]若存在。funct7表示操作字段固定占用[31:25]若存在。rs1 (Source Register #1)表示第一个源操作数寄存器固定占用[19:15]若存在。rs2 (Source Register #2)表示第二个源操作数寄存器固定占用[24:20]若存在。imm表示立即数位域位置不固定不同类型指令有不同定义。
RISC-V的所有指令全部都是基于这6种格式来建立的。
为帮助程序员所有位全为0 的指令是一条非法的指令。因此错误地易于编程/编译/链接跳转到被清零的内存区域将立即触发自陷从而帮助调试。 类似地所有位全为1 的指令也是非法指令这能在发生其他常见错误时触发自陷如访问未编程的非易失性内存设备、断开连接的内存总线或损坏的内存芯片。