RISC-V与主流处理器设计

RISC-V与主流处理器设计



前言

CPU作为计算机系统的关键部分之一,其设计及制造是计算机计数器的核心,在市面上常见的cpu制造厂商将其自身呢个的cpu设计都列为公司的最高机密,加州大学伯克利分校的David A. Patterson教授带领他的学生完成了四代RISC处理器。RISC-V指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片和软件。虽然这不是第一个开源指令集,但它具有重要意义,因为其设计使其适用于现代计算设备(如仓库规模云计算机、高端移动电话和微小嵌入式系统)。设计者考虑到了这些用途中的性能与功率效率。该指令集还具有众多支持的软件,这解决了新指令集通常的弱点。
RISC-V是一种开放的指令集架构《精简指令集架构》,而不是一款具体的处理器。任何组织与个人都可以根据RISC-V架构设计实现自己的处理器/高性能处理器/低功耗处理器。只要是根据RISC-V架构而设计的处理器都可以成为RISC-V架构处理器。

一、RISC-V最基本的ISA

1.什么是RISC-V

一个基于精简指令集(RISC)原则的开源指令集架构(ISA),强调简洁性来保证低成本,有大量的寄存器

2.RISC-V的发展目标

目的是成为一个通用型的ISA

  • 适用于各种规模
  • 兼容各种流行的软件栈和编程语言
  • 所有的微体系结构样式都有效
  • 支持广泛的专业化
  • 稳定,基础的指令集架构不应该改变

3.RISC-V的ISA设计

计算机体系结构的传统方法是增量ISA,新处理器不仅必须实现新的ISA扩展,还必须实现过去的所有扩展。目的是为了保持向后的二进制兼容性(只增不减的一个堆叠)
RISC-V提供用户需要的东西(针对性定制)

ISA 时的基本原则
⚫ 成本
⚫ 简洁性
⚫ 性能
⚫ 架构和具体实现的分离
⚫ 提升空间
⚫ 程序大小
⚫ 易于编程/编译/链接(儿童积木“像 ABC 一样简单”)

4.RV32I:RISC-V 基础整数指令集

RV32I指令图示
将有下划线的字母从左到右连接起来,即可组成完整的 RV32I 指令集。集合标志{}内列举了指令的所有变体,变体用加下划线的字母或下划线字符_表示。特别的,下划线字符_表示对于此指令变体不需用字符表示。例如,下图表示了这四个 RV32I 指令:slt,slti,sltu,sltiu
在这里插入图片描述

4.1RV32I 指令格式

六种基本指令格式

  1. 寄存器-寄存器操作的 R 类型指令
  2. 用于短立即数和访存 load 操作的 I 型指令
  3. 用于访存 store 操作的 S 型指令
  4. 用于条件跳转操作的 B 类型指令
  5. 用于长立即数的 U 型指令
  6. 用于无条件跳转的 J 型指令

tip:分支指令(B 类型)的立即数字段在 S 类型的基础上旋转了 1 位。跳转指令(J类型)的直接字段在 U 类型的基础上旋转了 12 位。因此,RISC-V 实际上只有四种基本格式,但我们可以保守地认为它有六种格式

在这里插入图片描述

tip:目前除最便宜的处理器以外的所有处理器都使用流水线来获得良好的性能。与工业装配线一样,它们通过一次执行多条指令来获得更高的吞吐量。为了实现这一目标,处理器可以预测分支结果,这个操作的准确度可以超过 90%。若进行了错误预测,指令会重新执行。早期的微处理器有一个 5 级流水线,这意味着 5 条指令并行执行最近的处理器有10 多个流水级。

4.2RV32I 寄存器

RV32I 有 31 寄存器加上一个值恒为 0 的 x0 寄存器(ARM-32 只有 16 个寄存器,x86-32 甚至只有 8 个寄存器)
为常量 0 单独分配一个寄存器是 RISC-V ISA 能如此简单的一个很大的因素

4.3RV32I 整数计算

  • 算术指令(add, sub)
  • 逻辑指令(and, or, xor)
  • 移位指令(sll, srl, sra)
    RISC-V 中没有字节或半字宽度的整数计算操作。操作始终是以完整的寄存器宽度。

4.4RV32I 的Load 和 Store

RV32I 支持加载有符号和无符号字节和半字(lb,lbu,lh,lhu)和存储字节和半字(sb,sh)。

tip:字节序问题
RISC-V 选择了小尾端字节序,因为它在商业上占主导地位:所有 x86-32 系统,Apple iOS,谷歌 Android 操作系统和微软 Windows for ARM 都是低字节优先序。由于字节顺序仅在同时以按字访问和按字节访问同一份数据时才会有影响,字节序只会影响很少一部分的程序员。

4.5RV32I 条件分支

RV32I 可以比较两个寄存器并根据比较结果上进行分支跳转。比较可以是:相等(beq),不相等 (bne),大于等于(bge),或小于(blt)。最后两种比较有符号比较,RV32I 也提供相应的无符号版本比较的:bgeu 和 bltu。剩下的两个比较关系(大于和小于等于)可以通过简单地交换两个操作数,即可完成比较。
RISC-V 去掉了 MIPS-32,Oracle SPARC 等指令集中被广为诟病的延迟分支特性等。对于条件分支,它还没有像 ARM-32 和 x86-32 那样使用条件码。条件码的存在使得大多数指令都需要隐式设置一些额外状态,这使乱序执行的依赖计算复杂化。最后,它省略了 x86-32 中的循环指令:loop,loope,loopz,loopne,loopnz。

4.6RV32I 杂项

在 RISC-V 指令集中,ecall 指令用于向运行时环境发出请求,例如系统调用。调试器使用 ebreak 指令将控制转移到调试环境。

在执行 fence.i 指令之前,对于同一个硬件线程,RISC-V 不保证用存储指令写到内存指令区的数据可以被取指令取到。

补充说明:RV32I 是否与众不同?
早期的微处理器有单独的浮点运算芯片,所以那些浮点运算指令是可选的。摩尔定律使得我们很快就将所有功能(包括浮点运算)都实现了在同一块芯片上,而且模块化在指令集中逐渐消失。在更简单的处理器中只实现完整的指令集的子集,并利用软件异常来模拟未实现的指令,如同数十年前的在 IBM 360 的 44 型号和 Digital Equipment microVAX。RV32I 的不同之处在于完整的软件堆栈只需要 RV32I 中的基本指令,因此,对于 RV32G 中未实现的指令,RV32I 处理器无需通过软件异常来进行模拟。在这方面,最接近 RISC-V 的 ISA 可能是Tensilica Xtensa,它是专为嵌入式应用设计的。它的指令集包含有 80 条基础指令。并且它的指令集旨在被用户根据自己的需求扩展一些加速指令,以加速其应用程序。与 Tensilica Xtensa 相比,RV32I 具有更简单的基础 ISA,具有 64 位地址版本,并且对超级计算机和微控制器都提供了针对性的指令集扩展。

二、主流处理器设计采用的基本原理以及基本方法

现代处理器设计(指令集处理器设计)的关键在于指令集体系结构(ISA),ISA定义了指令集处理器必须实现的功能且在指令集处理器设计中起到了关

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青柠味汽水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值