一、简介
如果一个组件包含一个独立的指令获取单元,则它被称为核心。
RISC-V兼容核心可能支持多个 RISC-V 兼容的硬件线程,或 harts,通过多线程。
执行环境包括:
- Bare metal:harts直接由物理处理器实现,线程和指令可以直接访问物理地址空间。
- RISC-V操作系统:通过多路复用提供多个用户级执行环境的,RISC-V 操作系统用户级 harts 到可用的物理处理器线程并通过控制访问通过虚拟内存到内存。
- RISC-V 虚拟机管理系统,提供多个主管级执行环境操作系统(一种虚拟化技术,在宿主操作系统上运行多个独立的Riscv操作系统实例)。
- RISC-V 仿真环境,例如 Spike、QEMU 或 rv8,它们在底层上模拟RISC-V hartsx86 系统(将Riscv处理器的指令集模拟在计算机的一种环境),可以提供用户级或主管级执行环境。
指令集总览:
RISC-V的基本ISA于RISC架构处理器相似,主要区别在于没有分支延迟槽,支持可选的可变长度的指令编码
RISC-V基本指令集包括:RV32I(32位整型运算)、RV64I(64位整型运算)、RV32E(RV32I 基本指令集的 RV32E
子集变体,主要支持小型嵌入式,整型寄存器只有16个)、RV128I(128位整型位运算)
RISC-V基本指令和指令集扩展的命名有一定的约定
扩展指令集:提供整数乘法/除法(M)、原子操作(A)以及单精度(F)和双精度浮点(D)还有压缩指令集(C)
标准整数乘法和除法扩展名为“M”,并且添加指令以乘除整数寄存器中保存的值。
标准原子指令扩展,用“A”表示,添加了原子读取、修改和写入的指令用于处理器间同步的内存。
标准单精度浮点扩展,用“F”表示,增加了浮点寄存器、单精度计算指令和单精度加载和存储。
标准双精度浮点扩展,表示为通过“D”,扩展了浮点寄存器,并增加了双精度计算指令,加载和存储。
标准的“C”压缩指令扩展提供了更窄的16位形式的通用指令。
内存:
RISC-V hart 具有用于所有内存访问的 2^XLEN
字节的单字节可寻址地址空间。
二、操作数相关
在RISC-V中,操作数是指计算机指令中用于进行操作的数据。它可以是寄存器、立即数或内存地址等形式。不同的操作数类型和寻址方式对应不同的指令格
常见操作数类型
以下是RISC-V中常见的操作数类型:
-
寄存器操作数:指令将读取或写入寄存器中的数据。寄存器操作数通常包括源寄存器(source register)和目标寄存器(destination register),分别表示输入和输出的寄存器。
-
立即数操作数:指令将使用一个固定的数字作为操作数。立即数操作数可以通过指令本身的二进制编码来表示,也可以在指令中以参数的形式传递给处理器。立即数操作数通常用于表示常量值或偏移量等。
-
存储器操作数:指令将读取或写入存储器中的数据。存储器操作数需要指定存储器地址,该地址有时由寄存器提供,有时由立即数提供。
以下是RISC-V中常见的操作数寻址方式:
-
直接寻址方式:直接从寄存器或立即数中获取操作数值。例如,addi rd, rs1, imm 将寄存器rs1中的值与立即数imm相加,并将结果存储到寄存器rd中。
-
寄存器间接寻址方式:通过寄存器来存储一个地址,从该地址读取操作数。例如,lw rd, 0(rs1) 将以rs1为基址、偏移量为0的存储单元中的数据加载到寄存器rd中。
-
基址寻址方式:通过寄存器和立即数相加得到一个地址,从该地址读取或写入操作数。例如,sw rs2,offset(rs1) 将寄存器rs2中的值存储到以rs1为基址、偏移量为offset的存储单元中。
-
相对寻址方式:通过相对于当前指令的偏移量来访问内存地址。例如,beq rs1, rs2, label如果rs1等于rs2,则跳转到标记为label的程序位置(pc)。