当前位置: 首页 > news >正文

RISC-V体系架构

RISC-V体系架构

目录

  1. RISC-V指令集特点
  2. RISC-V指令集扩展
    • 2.1 基础指令集
    • 2.2 基础指令类型
    • 2.3 扩展指令集
  3. RISC-V体系架构特点
  4. RISC-V基本概念
    • 4.1 执行环境(EEI)
    • 4.2 哈特(Hart)
  5. RISC-V处理器模式
    • 5.1 三种基本模式
    • 5.2 特权级别配置
    • 5.3 虚拟化扩展
  6. SBI接口
    • 6.1 定义
    • 6.2 OpenSBI实现
  7. RISC-V寄存器
    • 7.1 寄存器配置
    • 7.2 通用寄存器功能分配
  8. RISC-V系统控制和状态寄存器(CSRs)
    • 8.1 系统寄存器分类
    • 8.2 CSR指令编码
    • 8.3 12位CSR编码空间分组
    • 8.4 非法指令异常触发条件
    • 8.5 M模式系统控制和状态寄存器
      • 8.5.1 mstatus寄存器(机器状态寄存器)
    • 8.6 S模式系统控制和状态寄存器
      • 8.6.1 sstatus寄存器字段详细说明
      • 8.6.2 satp寄存器(特权地址转换和保护寄存器)
    • 8.8.9 CSR访问指令
      • 8.8.9.1 基本CSR指令

1. RISC-V指令集特点

  1. 开源免费 - 完全开放的指令集架构,无专利限制
  2. 设计简洁 - 继承了MIPS的优点,指令数量少而精
  3. 模块化设计 - 支持多种扩展指令集,按需选择
  4. 丰富的软件生态 - 拥有完整的工具链支持
  5. 可扩展性 - 支持自定义指令扩展
  6. 向后兼容 - 新版本保持对旧版本的兼容性
  7. 多宽度支持 - 支持32位、64位、128位等多种位宽

2. RISC-V指令集扩展

2.1 基础指令集

  • RV32I: 32位整型最小指令集合(40条指令)
  • RV64I: 64位整型最小指令集合(在RV32I基础上增加64位操作)
  • RV32E: 32位嵌入式指令集(16个寄存器版本)
  • RV128I: 128位整型指令集合(实验性)

2.2 基础指令类型

  • 算术运算: ADD, SUB, MUL, DIV等
  • 逻辑运算: AND, OR, XOR, NOT等
  • 移位运算: SLL, SRL, SRA等
  • 比较运算: SLT, SLTU等
  • 分支跳转: BEQ, BNE, JAL, JALR等
  • 内存访问: LB, LH, LW, SB, SH, SW等
  • 系统调用: ECALL, EBREAK等

2.3 扩展指令集

扩展名称描述
M整型乘除法整型乘法和除法扩展指令集
G通用扩展表示IMAFD,即最小整型指令集合+整型乘除法+原子操作+单精度浮点+双精度浮点
F单精度浮点单精度浮点数扩展指令
D双精度浮点双精度浮点数扩展指令
Q四倍精度浮点四倍精度浮点数扩展指令
C压缩指令压缩指令编码,提高代码密度
A原子操作原子操作指令
B位操作位操作指令
E嵌入式为嵌入式设计的整型操作指令
H虚拟化虚拟化扩展
K密码运算密码运算扩展
V矢量扩展可伸缩矢量扩展
P打包SIMD打包SIMD扩展(Packed-SIMD)
J动态翻译动态翻译扩展
T事务内存事务内存扩展
N用户态中断用户态中断扩展

注意: 实现最小指令集合和M扩展即可运行一个小型操作系统

3. RISC-V体系架构特点

  • 完全开放 - 一个完全开放的指令集架构
  • 硬件友好 - 真正适合硬件实现的架构,而不是模拟或二进制翻译的指令集架构
  • 通用设计 - 通用的指令集架构,而不是针对某个特定微架构的实现
  • 教学友好 - 最小集合的整数指令集可用作教学,在此基础上可实现众多扩展指令集
  • 标准兼容 - 支持IEEE-754浮点标准
  • 模块化 - 支持众多扩展指令集
  • 多地址空间 - 支持32位和64位地址空间
  • 多核支持 - 支持多核与异构
  • 代码优化 - 支持可选的压缩指令编码,提高性能、能源效率和优化静态代码大小
  • 虚拟化 - 支持虚拟化扩展
  • 矢量计算 - 支持可伸缩矢量指令扩展

4. RISC-V基本概念

4.1 执行环境(EEI)

  • 执行环境接口(Execution Environment Interface):定义软件与硬件之间的接口规范

4.2 哈特(Hart)

  • 定义: 表示一个CPU硬件执行单元
  • 类比:
    • X86架构:超线程(Simultaneous Multithread SMT)
    • ARMv8架构:处理机(Processing Element PE)

5. RISC-V处理器模式

5.1 三种基本模式

  • 机器模式(M): 运行SBI固件,为操作系统提供服务
  • 特权模式(S): 运行操作系统内核,为应用程序提供服务
  • 用户模式(U): 运行应用程序

5.2 特权级别配置

特权级别个数支持的特权级别使用场景
1M嵌入式系统
2M和U具有安全特性的嵌入式系统
3M、S、U通用操作系统

5.3 虚拟化扩展

虚拟化扩展新增以下模式:

  • HS模式: 主机特权模式
  • VS模式: 虚拟特权模式
  • VU模式: 虚拟用户模式

6. SBI接口

6.1 定义

  • Supervisor Binary Interface: 对所有RISC-V硬件平台中共性的功能做了抽象,为运行在S模式下的操作系统和HS模式下的虚拟化管理软件提供统一的接口
  • 类比: 类似操作系统中的系统调用层或者X86的BIOS

6.2 OpenSBI实现

RISC-V有一个通用的SBI实现:OpenSBI

主要功能:

  • 为运行在低级别的处理器模式提供访问M模式硬件资源的抽象接口
  • 保证系统稳定和安全
  • 提供良好的可移植性

7. RISC-V寄存器

7.1 寄存器配置

  • 64位RISC-V: 提供32个通用寄存器(x0-x31)
  • 浮点寄存器: 提供32个浮点通用寄存器(f0-f31)

7.2 通用寄存器功能分配

寄存器名称功能
x0/zero零寄存器恒为0,常用于比较和清零操作
x1/ra链接寄存器存储函数返回地址
x2/sp栈指针寄存器指向当前栈顶
x3/gp全局指针寄存器指向全局数据区
x4/tp线程指针寄存器指向线程本地存储
x5-x7, x28-x31临时寄存器(t0-t6)临时存储,调用者保存
x8-x9, x18-x27保存寄存器(s0-s11)被调函数需要保存
x10-x17参数寄存器(a0-a7)传递参数和返回结果

8. RISC-V系统控制和状态寄存器(CSRs)

8.1 系统寄存器分类

RISC-V支持3类系统寄存器:

  • M模式系统寄存器 - 机器模式专用
  • S模式系统寄存器 - 特权模式专用
  • U模式系统寄存器 - 用户模式专用

8.2 CSR指令编码

软件通过CSR指令访问系统寄存器(如CSRRW),在CSR指令编码中预留了12位编码空间用于索引系统控制寄存器:

位域字段描述
bit31-bit20CSR系统控制寄存器索引
bit19-bit15源操作数 rs1源寄存器
bit14-bit12功能码 funct3操作类型
bit11-bit7目标寄存器 rd目标寄存器
bit6-bit0指令操作码 opcode指令操作码

8.3 12位CSR编码空间分组

读写控制(bit11-bit10)
  • 0b11: 只读寄存器
  • 其他值: 可读写寄存器
访问权限(bit9-bit8)
  • 0b00: U模式访问
  • 0b01: S模式访问
  • 0b10: M模式访问
  • 0b11: HS/VS模式访问

8.4 非法指令异常触发条件

  • 访问不存在或未实现的寄存器
  • 尝试写入具有只读属性的寄存器
  • 在低级别模式下访问高级别处理器模式的系统寄存器

8.5 M模式系统控制和状态寄存器

地址CSR名称属性说明
0xF11mvendoridMRO机器厂商ID寄存器
0xF12marchidMRO架构编号寄存器
0xF13mimpidMRO实现编号寄存器
0xF14mhartidMRO处理器硬件线程编号寄存器
0xF15mconfigptrMRO配置数据结构寄存器
0x300mstatusMRWM模式处理器状态寄存器
0x301misaMRW指令集架构和扩展寄存器
0x302medelegMRWM模式异常委托寄存器
0x303midelegMRWM模式中断委托寄存器
0x304mieMRWM模式中断使能寄存器
0x305mtvecMRWM模式的异常向量入口地址寄存器
0x306mcounterenMRWM模式的计数使能寄存器
0x340mscratchMRW用于异常处理的临时寄存器
0x341mepcMRWM模式异常模式程序计数器(PC)寄存器
0x342mcauseMRWM模式的异常原因寄存器
0x343mtvalMRWM模式的异常向量寄存器
0x344mipMRWM模式中断待定寄存器
0x34AmtinstMRWM模式陷入指令(用于虚拟化)
0x34Bmtval2MRWM模式的异常向量寄存器(用于虚拟化)
8.5.1 mstatus寄存器(机器状态寄存器)
字段位段说明
SIEBit[1]中断使能位,用来使能和关闭S模式中所有的中断
MIEBit[3]中断使能位,用来使能和关闭M模式中所有的中断
SPIEBit[5]中断使能保存位。当一个异常陷入到S模式,SIE的值保存到SPIE中,SIE设置为0。当调用SRET指令返回时,从SPIE中恢复SIE,然后SPIE设置为1
UBEBit[6]用来控制U模式加载和存储内存访问的大小端模式。0:小端模式 1:大端模式
MPIEBit[7]中断使能保存位。当一个异常陷入到M模式,MIE的值保存到MPIE中,MIE设置为0。当调用MRET指令返回时,从MPIE中恢复MIE,然后MPIE设置为1
SPPBit[8]陷入到S模式之前CPU的处理模式。0:表示从U模式陷入到S模式 1:表示在S模式触发的异常
VSBit[10:9]用来使能可伸缩矢量扩展(RVV)
MPPBit[12:11]陷入到M模式之前CPU的处理模式。0:表示从U模式陷入到M模式 1:表示从S模式陷入到M模式 2:表示在M模式触发的异常
FSBit[14:13]用来使能浮点数单元
XSBit[16:15]用来使能其他U模式扩展的状态
MPRVBit[17]用来修改有效特权模式。0:加载和存储指令根据当前处理器模式执行地址转换和内存保护 1:加载和存储指令根据MPP字段中存储的处理器模式特权执行内存保护检查
SUMBit[18]S模式是否允许访问U模式内存。0:S模式访问U模式内存将触发异常 1:S模式可以访问U模式内存
MXRBit[19]内存访问权限。0:可以加载只读页面 1:可以加载可读和可执行页面
TVMBit[20]支持捕获S模式虚拟内存管理操作。0:在S模式下,satp系统寄存器可以正常访问,或可以执行SFENCE.VMA/SINVAL.VMA指令 1:在S模式下,访问satp系统寄存器或执行SFENCE.VMA/SINVAL.VMA指令将触发非法指令异常
TWBit[21]支持捕获WFI(等待中断)指令。0:WFI指令可以在低特权模式下执行 1:如果在任何低特权模式下执行WFI且未在特定实现指定的有限时间内完成,WFI指令将触发非法指令异常
TSRBit[22]支持捕获SRET(监督者返回)指令。0:在S模式下,SRET指令正常执行 1:在S模式下,执行SRET指令将触发非法指令异常
UXLBit[33:32]用来指示U模式的寄存器长度
SXLBit[35:34]用来指示S模式的寄存器长度
SBEBit[36]用来控制S模式加载和存储内存访问的大小端模式。0:小端模式 1:大端模式
MBEBit[37]用来控制M模式加载和存储内存访问的大小端模式。0:小端模式 1:大端模式
SDBit[63]用来指示VS、FS和XS中任何字段已被设置

8.6 S模式系统控制和状态寄存器

CSR地址寄存器名称功能描述访问权限
0x100sstatus特权状态寄存器读写
0x104sie特权中断使能寄存器读写
0x105stvec特权异常向量基址寄存器读写
0x106scounteren用来使能U模式下的硬件性能检测和计数寄存器读写
0x10asenvcfg特权环境配置寄存器读写
0x140sscratch特权模式暂存寄存器,当处理器运行在S模式时保存U模式下的进程控制块地址读写
0x141sepc特权异常程序计数器读写
0x142scause特权异常原因寄存器读写
0x143stval特权异常值寄存器读写
0x144sip特权中断挂起寄存器读写
0x180satp特权地址转换和保护寄存器读写
0x58ascontext特权上下文寄存器读写
8.6.1 sstatus寄存器字段详细说明
字段位域访问权限描述
SD[31]只读当US、FS或XS字段不为0时,SD位被设置为1
UXL[33:32]读写U模式XLEN位,控制U模式下的寄存器长度,00=32位,01=64位,10=128位
WPRI[30:16]保留保留位,未来扩展使用
MXR[19]读写访问内存的权限,0可加载只读页面,1可加载可读可执行页面
SUM[18]读写允许用户内存访问位,当SUM为1时,S模式下能访问U模式下的内存,为0访问时会触发异常
US[16:15]读写用来使能U模式下其他扩展
FS[14:13]读写用于使能浮点数运算单元
VS[10:9]读写用来使能可伸缩矢量扩展
SPP[8]读写特权模式前一个特权级别,保存进入S模式前的特权级别
UBE[6]读写用来控制U模式下的内存访问大小端模式,0小端模式,1大端模式
SPIE[5]读写S模式前一个中断使能位,保存进入S模式前的中断使能状态
SIE[1]读写特权中断使能位,控制S模式中断使能
8.6.2 satp寄存器(特权地址转换和保护寄存器)
位域字段名描述
[63:60]MODE地址转换模式
[59:44]ASID地址空间标识符
[43:0]PPN页表物理页号
8.8.9 CSR访问指令
8.8.9.1 基本CSR指令
指令格式功能描述
CSRRWcsrrw rd, csr, rs1rd = csr; csr = rs1原子性读写CSR
CSRRScsrrs rd, csr, rs1rd = csr; csr = csr | rs1原子性读并设置CSR位
CSRRCcsrrc rd, csr, rs1rd = csr; csr = csr & ~rs1原子性读并清除CSR位
CSRRWIcsrrwi rd, csr, immrd = csr; csr = imm原子性读写CSR(立即数)
CSRRSIcsrrsi rd, csr, immrd = csr; csr = csr | imm原子性读并设置CSR位(立即数)
CSRRCIcsrrci rd, csr, immrd = csr; csr = csr & ~imm原子性读并清除CSR位(立即数)

文章转载自:

http://oEt7LuzA.fnpyk.cn
http://PWCdZcf9.fnpyk.cn
http://cw4CAl9v.fnpyk.cn
http://XMmFRejM.fnpyk.cn
http://LE19Hu1n.fnpyk.cn
http://GjifMfY7.fnpyk.cn
http://l5ww9DEm.fnpyk.cn
http://k15ZVxpp.fnpyk.cn
http://ec4uuVHD.fnpyk.cn
http://MapvCXry.fnpyk.cn
http://9SfgJvSO.fnpyk.cn
http://4nM04PXG.fnpyk.cn
http://jXNf3d9a.fnpyk.cn
http://PyLnde0t.fnpyk.cn
http://FF0POWYb.fnpyk.cn
http://5qXa0HVF.fnpyk.cn
http://bTEXb4j3.fnpyk.cn
http://uSIkSj18.fnpyk.cn
http://lQC4JQBB.fnpyk.cn
http://84uYxjJ1.fnpyk.cn
http://AQFfUlge.fnpyk.cn
http://biw0JU5B.fnpyk.cn
http://VeF1ixzX.fnpyk.cn
http://QiOnBSWp.fnpyk.cn
http://QJdFp8go.fnpyk.cn
http://2uxDHMRC.fnpyk.cn
http://YNZ71NBR.fnpyk.cn
http://JnRYpyxD.fnpyk.cn
http://Lgf9z64o.fnpyk.cn
http://6bUuYzQj.fnpyk.cn
http://www.dtcms.com/a/374596.html

相关文章:

  • 创作纪念日·512天
  • 【芯片设计-信号完整性 SI 学习 1.1 -- 眼图、抖动、反射、串扰】
  • 小迪安全v2023学习笔记(八十讲)—— 中间件安全WPS分析WeblogicJenkinsJettyCVE
  • 【Linux】基础指令(下)
  • linux 环境下Docker 安装
  • Nginx 配置
  • 20250910_《SQL Server 数据库事务日志定期清理方案(精简优化版)》以10.1.1.31服务器的gtp-default数据库为例
  • 多输入(input)多输出(output)验证
  • 排查JSch连接SFTP服务器失败的问题
  • JMeter压测过程中监控服务器CPU及内存的方法
  • 整理python快速构建数据可视化前端的Dash库
  • Redis缓存穿透、缓存击穿与雪崩防护及性能优化实战指南
  • ArcGIS学习-20 实战-地形研究
  • Ubuntu下基于Nginx+ffmpeg+video.js的HLS流媒体视频播放方案
  • Vue2 VS Vue3
  • 【ArcGIS】如何编辑图层的属性表
  • VueFlow的箭头怎么调整
  • 基于Vue3 +ElementuiPlus + Dexie.js自研的浏览器插件新建标签页tab
  • 【序列晋升】30 Spring Cloud Vault 安全配置管理的微服务守护者
  • 狂想-一种新颖的低成本内嵌标记的视触觉感知前导方案
  • 兰洋科技双展联动展示液冷创新成果,技术驱动打造绿色算力新基建
  • INDEMIND亮相2025科技创变者大会,以机器人空间智能技术解锁具身智能新边界
  • 百度SEM里什么是搜索广告、搜索词、否定关键词、上方位(竞价)广告?
  • 百度竞价推广:百度搜索竞价推广代运营
  • rabbitmq如何保证消息不丢失
  • 做百度SEM付费搜索推广时,竞价账号定向怎么设置?
  • html+css+JavaScript实现一个简单的登录
  • 【国内电子数据取证厂商龙信科技】从SQL语句开始数据库分析
  • 字节跳动Seed推出「机器人大脑」Robix:让机器人学会思考、规划与灵活互动
  • 【ComfyUI】Flux Schnell Fp8量化版图像生成