RISC-V开源指令集的指南(收藏)

共 3671字,需浏览 8分钟

 ·

2022-02-16 08:35



RISC-V 是一个最新的,清晰的,简约的,开源的 ISA,它以过去 ISA 所犯过的错误为鉴。RISC-V 架构师的目标是让它在从最小的到最快的所有计算设备上都能有效工作。遵循冯诺依曼 70 年前的建议,这个 ISA 强调简洁性来保证它的低成本,同时有着大量的寄存器和透明的指令执行速度,从而帮助编译器和汇编语言程序员将实际的重要问题转换为适当的高效代码。


下载链接:

RISC-V手册开源指令集指南


RISC-V(“RISC five”)的目标是成为一个通用的指令集架构(ISA):


  • 它要能适应包括从最袖珍的嵌入式控制器,到最快的高性能计算机等各种规模的处理器。

  • 它应该能兼容各种流行的软件栈和编程语言。

  • 它应该适应所有实现技术,包括现场可编程门阵列(FPGA)、专用集成电路(ASIC)、全定制芯片,甚至未来的设备技术。

  • 它应该对所有微体系结构样式都有效:例如微编码或硬连线控制;顺序或乱序执行流水线; 单发射或超标量等等。

  • 它应该支持广泛的专业化,成为定制加速器的基础,因为随着摩尔定律的消退,加速器的重要性日益提高。

  • 它应该是稳定的,基础的指令集架构不应该改变。更重要的是,它不能像以前的专有指令集架构一样被弃用,例如AMD Am29000、Digital Alpha、Digital VAX、Hewlett Packard PA-RISC、Intel i860、Intel i960、Motorola 88000、以及Zilog Z8000。


RISC-V的不同寻常不仅在于它是一个最近诞生的指令集架构(它诞生于最近十年,而大多数其他指令集都诞生于20世纪70到80年代),而且在于它是一个开源的指令集架构。与几乎所有的旧架构不同,它的未来不受任何单一公司的浮沉或一时兴起的决定的影响(这一点让许多过去的指令集架构都遭了殃)。


它属于一个开放的,非营利性质的基金会。RISC-V基金会的目标是保持RISC-V的稳定性,仅仅出于技术原因缓慢而谨慎地发展它,并力图让它之于硬件如同Linux之于操作系统一样受欢迎。


计算机体系结构的传统方法是增量ISA,新处理器不仅必须实现新的ISA扩展,还必须实现过去的所有扩展。目的是为了保持向后的二进制兼容性,这样几十年前程序的二进制版本仍然可以在最新的处理器上正确运行。这一要求与来自于同时发布新指令和新处理器的营销上的诱惑共同导致了ISA的体量随时间大幅增长。例如,图1.2显示了当今主导ISA80x86的指令数量增长过程。这个指令集架构的历史可以追溯到1978年,在它的漫长生涯中,它平均每个月增加了大约三条指令。



这个传统意味着x86-32(我们用它表示32位地址版本的x86)的每个实现必须实现过去的扩展中的错误设计,即便它们不再有意义。例如,图1.3描述了x86的ASCII Adjust afterAddition(aaa)指令,该指令早已失效。



作为一个类比,假设一家餐馆只提供固定价格的餐点,最初只是一顿包含汉堡和奶昔的小餐。随着时间的推移,它会加入薯条,然后是冰淇淋圣代,然后是沙拉,馅饼,葡萄酒,素食意大利面,牛排,啤酒,无穷无尽,直到它成为一顿大餐。食客可以在那家餐厅找到他们过去吃过的东西,尽管总的来说这样做可能没什么意义。这样做的坏处是,用餐者为每次晚餐支付的宴会费用不断增加。


RISC-V的不同寻常之处,除了在于它是最近诞生的和开源的以外,还在于:和几乎所有以往的ISA不同,它是模块化的。它的核心是一个名为RV32I的基础ISA,运行一个完整的软件栈。


RV32I是固定的,永远不会改变。这为编译器编写者,操作系统开发人员和汇编语言程序员提供了稳定的目标。模块化来源于可选的标准扩展,根据应用程序的需要,硬件可以包含或不包含这些扩展。这种模块化特性使得RISC-V具有了袖珍化、低能耗的特点,而这对于嵌入式应用可能至关重要。RISC-V编译器得知当前硬件包含哪些扩展后,便可以生成当前硬件条件下的最佳代码。惯例是把代表扩展的字母附加到指令集名称之后作为指示。例如,RV32IMFD将乘法(RV32M),单精度浮点(RV32F)和双精度浮点(RV32D)的扩展添加到了基础指令集(RV32I)中。

在介绍 RISC-V 这个 ISA 之前,了解计算机架构师在设计 ISA 时的基本原则和必须做出的权衡是有用的。如下的列表列出了七种衡量标准。页边放置了对应的七个图标,以突出显示 RISC-V 在随后章节中应对它们的实例。




  • 成本(美元硬币)

  • 简洁性(轮子)

  • 性能(速度计)

  • 架构和具体实现的分离(分开的两个半圆)提升空间(手风琴)
  • 程序大小(相对的压迫着一条线的两个箭头)
  • 易于编程/编译/链接(儿童积木“像 ABC 一样简单”)

RISC-V手册开源指令集指南》本书假设您在 RISC-V 之前已经了解过其他指令集。如果没有,请查看我们基于RISC-V 的相关入门架构书。


第二章介绍了 RV32I,它是 RISC-V 固定不变的基础整数指令集,是 RISC-V 的核心内容。


第三章解释了第二章中没有介绍的其余 RISC-V 汇编语言内容,包括调用约定和一些用于链接的巧妙技巧。汇编语言包括所有符合规则的 RISC-V 指令和一些 RISC-V 指令集外的有用指令。这些伪指令是实际指令的巧妙变体,它们简化了编写汇编语言程序的过程,同时避免了使 ISA 复杂化。


接下来的三章阐述了 RISC-V 的标准扩展。当它们添加到 RIV32I 中的时候,我们统称RV32G(G 代表一般):


  • 第四章:乘法和除法(RV32M) 

  • 第五章:浮点操作(RV32F 和 RV32D) 

  • 第六章:原子操作(RV32A) 第 3 页和第 4 页的 RISC-V“参考卡”是本书中所有 RISC-V 指令(RV32G,RV64G 和RV32 / 64V)的摘要。


第七章介绍了可选的压缩扩展 RV32C,它是 RISC-V 优雅性的一个绝佳例子。通过把16 位指令限制为现有 32 位 RV32G 指令的短版本,它们几乎是没有代价的。汇编程序可以选择指令大小,这使得汇编语言程序员和编译器忘记 RV32C。将 16 位 RV32C 指令转换成32 位 RV32G 指令的硬件解码器只需要 400 个门,这即使在最简单的 RISC-V 实现中也只占百分之几。


第八章介绍了向量扩展 RV32V。当与众多强大的单指令多数据(SIMD)指令(ARM-32,MIPS-32,x86-32)相比时,向量指令成为了 ISA 优雅性的另一个例证。实际上,图1.2 中添加到 x86-32 的数百条指令都是 SIMD,还有数百条指令即将问世。RV32V 甚至比大多数向量 ISA 更简单,因为它通过向量寄存器指定数据类型和长度,而不是将这两者嵌入到操作码中。RV32V 也许是大家从传统的基于 SIMD 的 ISA 转到 RISC-V 的最为可能的原因。


第九章展示了 RV64G,它是 RISC-V 的 64 位地址版本。正如该章节所说的那样,RISC-V 的架构师只需要拓宽寄存器,并加入一些字、双字或长版的 RV32G 指令,就可以把地址从 32 位扩展为 64 位。


第十章介绍了系统指令,说明了 RISC-V 如何处理分页以及机器、用户和监管者权限模式。


最后一章简要介绍了 RISC-V 基金会目前正在考虑增加的其它扩展。每一章都会包含一个用 RISC- V 汇编语言写成的程序,这是为了展示那一章所述的指令的用法,这样有助于汇编语言程序员学习 RISC-V 汇编。有时,我们还会列出用 ARM,MIPS 和 x86 写成的同样的程序,从而突出 RISC-V 在简洁性,以及成本、功耗、性能方面的优势。


RISC-V技术合集:

2021年RISC-V行业概览

ARM系列处理器应用技术完全手册

CPU和GPU研究框架合集

面向AIoT的RISC-V原生操作系统研究

深度报告:RISC-V异构IoT全新架构

RISC-V芯片产业指令集架构研究

玄铁C910实现RISC-V用户自定义指令

面向AIoT的RISC-V原生操作系统研究

RISC-V手册开源指令集指南

本号资料全部上传至知识星球,更多内容请登录智能计算芯知识(知识星球)星球下载全部资料。




免责申明:本号聚焦相关技术分享,内容观点不代表本号立场,可追溯内容均注明来源,发布文章若存在版权等问题,请留言联系删除,谢谢。



电子书<服务器基础知识全解(终极版)>更新完毕,知识点深度讲解,提供182页完整版下载。

获取方式:点击“阅读原文”即可查看PPT可编辑版本和PDF阅读版本详情。



温馨提示:

请搜索“AI_Architect”或“扫码”关注公众号实时掌握深度技术分享,点击“阅读原文”获取更多原创技术干货。


浏览 58
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报