RISCV指令集体系简读之RV32I

  1. RV32I 指令格式

  • 用于寄存器-寄存器操作的R类型指令
  • 用于短立即数和访存load操作的I型指令
  • 用于访存store操作的s型指令
  • 用于条件跳转操作的B类型指令
  • 用于长立即数的U型指令
  • 用于无条件跳转的J型指令

特点:

  • 所有指令都是32bits, 简化了指令解码;
  • RISV-V指令提供3个寄存器操作数,这样的好处就是当一个操作需要3个操作数时,一条指令就可以完成,而不需要用其他的指令来辅助;
  • 所有指令,要读写的寄存器标识符所在的位置是固定的,解码逻辑可以简化;
  • 立即数总是符号位扩展的,符号位总是在指令中最高位。这意味着可能成为关键路径的立即数符号扩展,可以在指令解码之前进行;

寄存器个数:x0~x31, 其中x0固定为0;

RV32I 整数计算

  • RISC-V中没有字节或半字宽度的整数计算操作。操作始终 是以完整的寄存器宽度。内存访问需要的能量比算术运算高几个数量级。因此低宽度的数 据访问可以节省大量的能量,但低宽度的运算不会。
  • RV32I 也不包含乘法和除法,它们包含在可选的RV32M扩展中;

RV32I 的 Load和Store

  • 除了提供32位字(lw,sw)的load和store外,RV32I 支持load有符号和无符号字节和半字(lb,lbu,lh,lhu)和store字节和半字(sb,sh)。有符号字节和半字符号扩展为32位再写入目的寄存器。
  • 即使是自然数据类型更窄,低位宽数据也是被 扩展后再处理,这使得后续的整数计算指令能正确处理所有的32位。在文本和无符号整数 中常用的无符号字节和半字,在写入目标寄存器之前都被无符号扩展到32位。
  • 虽然ARM-32和MIPS-32要求存储在内存中的数据,要按照数据的自然大小进行边界 对齐,但是RISC-V没有这个要求。

RV32I 条件分支

  • RV32I 可以比较两个寄存器并根据比较结果上进行分支跳转。
  • 比较可以是:相等 (beq),不相等 (bne),大于等于(bge),或小于(blt)。最后两种比较有符号比 较,RV32I也提供相应的无符号版本比较的:bgeu和bltu。
  • RISC-V去掉了MIPS-32,Oracle SPARC等指令集中被 广为诟病的延迟分支特性等。
  • 省略了x86-32中的循环指令:loop,loope,loopz,loopne, loopnz。

RV32I 无条件跳转

  • 跳转并链接指令(jal)具有双重功能。
    • 若将下一条指令PC + 4的地址保存 到目标寄存器中,通常是返回地址寄存器ra(见图2.4),便可以用它来实现过程调用。
    • 如果使用零寄存器(x0)替换ra作为目标寄存器,则可以实现无条件跳转,因为x0不能 更改。
  • RV32I避开了错综复杂的程序调用指令,例如x86-32的进入和离开 指令,或Intel Itanium,Oracle SPARC 和 Cadence Tensilica 中的寄存器窗口。

RV32I 杂项 

  • 控制状态寄存器指令 (csrrc、csrrs、csrrw、csrrci、csrrsi、csrrwi), 使我们可以轻松地访问一些程序性能计数器。
  • ecall指令用于向运行时环境发出请求,例如系统调用。调试器 使用ebreak指令将控制转移到调试环境
  • fence 指令对外部可见的访存请求,如设备I / O和内存访问等进行串行化。
  • fence.i指令同步指令和数据 流。在执行fence.i指令之前,对于同一个硬件线程,RISC-V不保证用存储指令写到内存 指令区的数据可以被取指令取到。

对于RV32I总的特点为:

⚫ 32位字节可寻址的地址空间

⚫ 所有指令均为32位长

⚫ 31个寄存器,全部32位宽,寄存器0硬连线为零

⚫ 所有操作都在寄存器之间(没有寄存器到内存的操作)

⚫ 加载/存储字加上有符号和无符号加载/存储字节和半字

⚫ 所有算术,逻辑和移位指令都有立即数版本的指令

⚫ 立即数总是符号扩展

⚫ 仅提供一种数据寻址模式(寄存器+立即数)和PC相对分支

⚫ 无乘法或除法指令

⚫ 一个指令,用于将大立即数加载到寄存器的高位,这样加载32位常量到寄存器只需要两条指令

RV32I与ARM/MIPS/X86所具备的优势:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/620920.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数据可视化库—Bokeh与Altair指南【第161篇—数据可视化】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据科学和数据分析领域,数据可视化是一种强大的工具,可以帮助我们…

Mac电脑安装蚁剑

1: github 下载源码和加载器:https://github.com/AntSwordProjectAntSwordProject GitHubAntSwordProject has 12 repositories available. Follow their code on GitHub.https://github.com/AntSwordProject 以该图为主页面:antSword为源码…

关于SpringCloud,你了解多少?

Why SpringCloud? Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一…

MercadoLibre(美客多)入仓预约系统操作流程-自动化约号(开篇)

目录 一、添加货件信息 二、输入货件信息 三、选择发货 四、填写交货日期 五、注意事项 MercadoLibre(美客多)于2021年10月18号上线了新预约入仓系统,在MercadoLibre美客多平台上,新入仓预约系统是一项非常重要的功能&#x…

通用设计的四大原则,大厂设计师带案例讲解!

作为数字产品设计师,在进行产品设计时要考虑产品的各种因素,例如功能、美观、安全等,要尽可能地满足所有用户的需求,做出对所有用户都尽可能公平的解决方案。但是,对于新手来说,在实际进行产品设计时&#…

Cesium 无人机航线规划

鉴于大疆司空平台和大疆无人机app高度绑定,导致很多东西没办法定制化。 从去年的时候就打算仿大疆开发一套完整的平台,包括无人机app以及仿司空2的管理平台,集航线规划、任务派发、实时图像、无人机管理等功能的平台。 当前阶段主要实现了&…

Redis中的BigKey

Redis中的BigKey 文章目录 Redis中的BigKey什么是BigKey?BigKey的危害找到Bigkey删除BigKey优化BigKeyBigKey对持久化的影响对AOF日志的影响对AOF重写和RDB的影响 什么是BigKey? 大 key 并不是指 key 的值很大,而是 key 对应的 value 很大。…

【GPU】冲击高性能

计算量估计 卷积神经网络复杂度分析 卷积神经网络CNN中的参数量(parameters)和计算量(FLOPs ) Roofline Model Roofline Model与深度学习模型的性能分析 有了上面这些基础知识,再来往下分析会更有收获 发现问题 — …

六、数据呈现

目录 6.1 理解输入输出 6.1.1 标准文件描述符 1 STDIN (0) 2 STDOUT (1) 3 STDERR(2) 6.1.2 重定向错误 1 只重定向错误 2 重定向错误和数据 6.2 在脚本中重定向输出 6.2.1 临时重定向 6.2.2 永…

汇智知了堂学员风采:网络安全学习之路,我们在行动

在这个数字化浪潮汹涌的时代,网络安全已经成为维护国家安全、社会稳定和个人隐私的重要一环。汇智知了堂深知网络安全人才的重要性,因此我们致力于培养具备扎实技术功底和创新能力的网络安全人才。 近日,我们网络安全培训班74部的学员们迎来…

QT联合Opencv进行车辆的计数

QT联合Opencv进行车辆的计数 前言初始界面展示运行界面展示视频展示 前言 ⭐️⭐️⭐️这个项目旨在利用Qt和OpenCV技术,实现一个车辆计数系统。⭐️⭐️⭐️ 🌎通过结合Qt的用户界面设计和OpenCV的图像处理功能,系统能够对输入的交通视频进…

R-Tree原理及朴素实现代码

R树是用于空间访问方法的树数据结构,即用于索引多维信息,例如地理坐标、矩形或多边形。 NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 -…