什么是RISC-V?以及RISC-V和ARM、X86的区别

前言

RISC-V是基于RISC精简指令集架构开发的一个开放式指令集架构,它是由加州大学伯克利分校的计算机科学教授Krste Asanovic(克里斯蒂安·阿萨诺维奇)领导的团队开发,RISC-V是开放的,任何人都可以使用它来开发处理器芯片和其他硬件,而无需支付任何许可或使用费用。RISC-V的设计简单,易于扩展和自定义,可以在各种应用场景和市场中使用。

什么是指令集架构?

指令集架构(Instruction Set Architecture,简称ISA)是计算机系统中的一个重要概念,指的是计算机中处理器的指令集和处理器的内部结构,即处理器是如何执行指令的。

ISA规定了一套指令集,包括指令的种类、指令的格式、指令的操作数、指令的执行方式等。ISA也规定了处理器的内部结构,包括处理器的寄存器、指令流水线、内存管理单元等。

不同的ISA有不同的指令集和内部结构设计,因此处理器的计算能力和性能也会有所不同。常见的ISA包括ARMx86MIPSPowerPCRISC-V等。ISA的选择对计算机系统的性能、功耗、软件兼容性、应用场景等都有很大的影响。

简单点比喻可以把指令集架构理解为图纸,处理器就是房子

RISC和RISC-V的区别

RISC全称Reduced Instruction Set Computer,即精简指令计算机,它是指令集架构,它的理念在于旨在通过减少指令集的数量和复杂度,提高计算机的性能和效率。

RISC最初由加州大学伯克利分校David PattersonJohn Hennessy1980年代提出,并于1984年合著了一本名为“Computer Architecture: A Quantitative Approach”(中文译名为《计算机体系结构:量化研究方法》)的经典教材,该书详细介绍了RISC架构和量化分析方法,成为当时计算机体系结构领域的重要参考书。

RISC-V是由Krste Asanovic教授领导其团队基于RISC精简指令集架构开发的一款开源指令集架构,RISC-V具有更好的灵活性以及扩展性,同时它比RISC更加简单便于它人二次开发扩展,并且它不需要任何授权费,可以应用于商业场景因为它遵循BSD开源协议,可以把RISC-V理解为RISC的扩展版。

RISC-V的发展历史

RISC-V的创作者

RISC-V是由多位学者和工程师共同开发的,以下是一些主要贡献者:

  1. Krste Asanovic:加州大学伯克利分校电子工程与计算机科学教授,RISC-V的创始人之一。

  2. Andrew Waterman:加州大学伯克利分校博士研究生,RISC-V的主要开发者之一。

  3. David Patterson:加州大学伯克利分校计算机科学教授,计算机体系结构领域的知名学者,RISC-V的顾问之一。

  4. Yunsup Lee:加州大学伯克利分校博士研究生,RISC-V的主要开发者之一。

  5. Alberto Sangiovanni-Vincentelli:加州大学伯克利分校教授,计算机电子学领域的知名学者,RISC-V的顾问之一。

此外,在RISC-V的开发过程中还得到了来自多家公司的支持和参与,包括英特尔、谷歌、诺基亚、贝尔、卡内基梅隆大学、华为、科技大学格拉茨、西部数据等。

创造RISC-V的原因

最初Krste Asanovic想找一款免费高效的指令集架构用于教育方面,就像Andrew S. Tanenbaum(安德鲁·斯图尔特·塔能鲍姆)当初觉得UNIX闭源而开发MINIX从而启发并诞生后来的LINUX一样,在当时碍于ARMx86都是需要授权的指令集架构,当时基于RISC实现的指令集架构都比较复杂效率低下,所以Krste Asanovic决定基于RISC开发一款免费、开放、高效的指令集架构,所以他在2008年开始主导开发RISC,RISC-V是第五个版本,在此之前已经迭代了四个版本,RISC-V就是第五个版本。

以下是总结并整理为什么创造RISC-V的几个原因:

  1. 开放性:Krste Asanovic认为,计算机行业需要一种更加开放的指令集架构,以便更多的公司和个人可以参与到处理器的设计和开发中。这也是为什么RISC-V采用BSD开源协议,可以自由地使用和分发。

  2. 灵活性:传统的指令集架构大多采用固定长度的指令,这限制了处理器的灵活性和指令集的扩展能力。而RISC-V指令集架构采用了可变长度的指令,可以实现更加灵活和高效的指令集扩展和自定义。

  3. 可定制性:Krste Asanovic认为,处理器的设计应该是可定制的,以满足不同应用场景的需求。而使用RISC-V指令集架构,处理器的设计可以根据具体的需求进行自定义,而不必受限于传统指令集的限制。

  4. 教育性:Krste Asanovic希望通过开发RISC-V指令集架构,为学生和研究人员提供一个更加友好和易于理解的指令集,以便他们更好地学习和研究计算机处理器的设计和开发。

RISC-V与ARM、X86指令集架构的区别

RISC-V与ARM

RISC-VARM都是基于RISC的指令集架构,它们的主要区别如下:

  • 指令集数量
    • ARM指令集和寄存器要比RISC-V丰富
  • 指令集宽度
    • RISC-V指令集最大可以扩展到128位,目前ARMv8-A架构最高只能扩展到64位指令集,通常RISC-V使用32位指令也支持压缩的16位指令
  • 指令集复杂度
    • RISC-V的汇编比ARM的要更加简单容易理解
  • 指令集执行方式
    • RISC-V更注重于执行效率耗能优化,可以更好的适用于嵌入式和移动设备,ARM更注重于通用性兼容性,适合更广泛的平台
    • RISC-VARM都支持分支预测,ARM还引入了分支目标缓存用于提高分支预测的准确度。
    • ARM指令的微操作数量一般很难确定,因为它也是RISC指令集,ARM有较为完善的指令,一些基础指令可能只有一个微操作而其它的可能会有多个微操作,但RISC-V指令集一般只有一个微操作
  • 指令集开放程度
    • RISC-V采用BSD开源协议,它无需授权就可以进行二次开发ARM需要授权并且是闭源开发
  • 指令集功耗与性能
    • ARM经过许多年的发展诞生了许多不同架构的指令集性能功耗都经过了广泛优化,在这一点上ARM目前是胜于RISC-V
  • 指令集存储结构
    • ARM Cortex-M系列是哈佛结构Cortex-A冯诺依曼体系RISC-V采用的是冯诺依曼

从我个人角度来说我认为RISC-V和ARM的区别更像Linux与Unix,最后综上总结RISC-V和ARM的具体区别如下:

  1. 架构和指令集:RISC-V架构是开源的,而ARM不是,ARM架构只能由ARM授权合作伙伴使用。此外,RISC-V指令集具有可扩展性,可以根据不同的应用需求进行裁剪和扩展,而ARM指令集则有多个版本,在不同的应用场景中使用。

  2. 许可和生态系统:RISC-V架构没有知识产权费用,使用和实现都是自由的,因此在学术界和开源社区中获得了广泛的支持和发展。而ARM架构需要授权才能使用,因此在商业市场中获得了更多的应用和支持。

  3. 性能和功耗:由于ARM架构已经在市场上应用多年,因此在性能和功耗方面已经得到了广泛的优化。但是,RISC-V架构具有更好的可扩展性和灵活性,能够支持更多的应用和场景。

知识补充

条件执行

条件执行是根据上一条指令执行结果来判断的,在ARM架构中条件码存放于CPSR寄存器,相当于C语言的三目表达式,例如:

汇编:

CMP R0, #0        ;比较R0和0是否相等
ADDEQ R1, R0, R1  ;如果相等,则执行下一条指令,否则跳过

C语言

int max(int a, int b) {
    return a > b ? a : b; // 使用条件执行指令实现返回较大值
}

在条件执行中大多数指令为ADDNEADDEQ这样的指令,这些指令是根据前一条指令的执行结果,CMP会将比较结果写入CPSR,ADDEQ会去判断CPSR寄存器上面的标志位,如果标志位符合NE(equal)条件则将R0和R1相加的结果写入到R1中,ARM这样的设计是为了保证程序的正确执行,只有在条件正确的情况下才执行运算保证了程序的正确性,相当于C语言的if语句。

分支执行

汇编:

loop:
    ; 从用户处获取一个整数
    ...
     
    ; 检查整数是否为偶数
    and t0, x0, 0x1    ; 将整数与0x1进行与操作(获得最后一位二进制数),结果存储在t0中
    beq t0, x0, even   ; 如果最后一位二进制数为0,跳转到标签even处
    j odd              ; 否则跳转到标签odd处
 
even:
    ; 整数为偶数
    ...
    j loop             ; 跳转回循环开始
     
odd:
    ; 整数为奇数
    ...
    j loop             ; 跳转回循环开始

C语言

int max(int a, int b) {
    while(1) {
        if (a > b) { // 使用分支跳转实现返回较大值
            return a;
        } else {
            return b;
        }
    }
}

RISC-V和X86的区别

RISC-V是基于RISC指令集而X86则是复杂指令集(CISC),CISC是由Intel公司为第一块16位的CPUi8086设计开发的复杂指令集。

  • 指令集数量
    • CISC指令集中包含大量指令,每个指令都可以执行比较复杂的工作,指令集全面,而RISC需要多条指令组合执行,简单来说就是CISC指令集更加全面
  • 指令集宽度
    • CISC目前有两个框架:IA-32(x86)AMD64(x86-64),分别对应32位和64位指令集架构,而RISC-V最大可以支持128位指令集(需要扩展,原生态不支持),通常情况下RISC-V是32位指令宽度
  • 指令集复杂度
    • RISC-V采用的是RISC指令集,所以要更加的简单易学,而x86的是CISC指令集由于历史原因CISC指令集较为复杂,指令集复杂的同时也会带来架构的复杂,而汇编是最接近底层的语言,学习汇编需要对CPU架构有一定了解,所以RISC-V的汇编更容易学习,因为它的架构比CISC要简单
  • 指令集执行方式
    • 因为CISC的指令种类繁多,所以处理器需要更大硬件资源来支持CISC指令集的编码与执行过程,CISC每次执行指令通常涉及到多个微操作,而RISC-V指令集更加的简单不需要更大的硬件资源支持,同时每次执行指令一般只涉及到一个微操作
    • RISC-VCISC都支持分支预测
  • 指令的开放程度
    • RISC-V是免费开放不需要授权的指令集架构,CISC需要向Intel公司购买授权费
  • 指令集功耗与性能
    • CISC架构的功耗通常比RISC架构高一些,这是因为CISC指令执行时需要更多的硬件资源,如更复杂指令流水线、更加复杂的解码器和更大的缓存。同时,CISC指令中的一些复杂指令需要更多的时钟周期来执行,这导致了更多的功耗消耗。此外,CISC处理器中的指令规模较大,需要更多的存储器来存储指令集,而存储器的功耗也较高

      但是,随着技术的发展,CISC架构的功耗也在不断降低,比如采用更小的制造工艺更优化的流水线设计等。当前一些CISC架构的处理器已经采用了节能技术,如动态电源管理(DPM)和可变电压和频率技术(DVFS),以在降低功耗的同时提升性能

    • 性能需要通过处理器的制作工艺来判断,比如集成度内存层次结构流水线和缓存设计等等,CISCINTEL公司设计并制作,INTEL的芯片制作工艺还是比较强大的,但是如果在同样的制作工艺下RISC-V性能应该要胜于CISC。
  • 指令集存储结构
    • RISC-VCISC都采用的是冯诺依曼存储结构

综上总结如下:

  1. 复杂度:CISC指令集非常复杂,每个指令可以执行多个操作,而RISC-V指令集采用精简指令集,每个指令只执行一项操作,因此更加简单。

  2. 指令类型:CISC包含多种指令类型,包括数据操作、控制操作和I/O操作等,而RISC-V指令集通常只包含几种指令类型,主要包括算术逻辑操作、内存操作和分支跳转操作。

  3. 可扩展性:RISC-V指令集极具可扩展性,允许开发者添加自定义指令,以便更好地满足特定应用程序的需求。而CISC指令集则缺乏这种灵活性。

  4. 性能:RISC-V指令集通过简化指令集和硬件实现来提高性能,而CISC主要通过制作工艺和设计架构方面来提高性能。

简单来说RISC-V指令集更加简单、易于理解可扩展,而CISC指令集则以复杂但多功能的指令为特点,两者在不同应用场景下都有一定的优势,RISC-V更适合应用在一些特定的场景下,CISC比较适合一些通用的应用场景

什么是微操作?

微操作也称微指令,它是一个指令里要执行的步骤,指令可以划分为几个微操作,比如ADD指令可能有到三个微操作 :

  1. 取值到寄存器
  2. 进行调用ALU进行加法运算
  3. 将结果存放到寄存器里每个指令对应的微操作不同

有的指令需要更多的微操作去完成,在CISC多个微操作可以在一个CPU时钟周期内完成,而RISC-V每个指令只有一个微操作,也就意味着一个时钟周期内只能执行一个微操作,所以如果RISC-V想要完成比较复杂的工作则需要更多的指令集组合起来才可以,RISC-V追求的是一步到位

对浮点数的支持

RISC-V支持IEE754浮点标准

你可能感兴趣的:(#,RISC-V,RISC-V)