前言
RISC-V是基于RISC精简指令集架构开发的一个开放式指令集架构,它是由加州大学伯克利分校的计算机科学教授Krste Asanovic(克里斯蒂安·阿萨诺维奇)领导的团队开发,RISC-V是开放的,任何人都可以使用它来开发处理器芯片和其他硬件,而无需支付任何许可或使用费用。RISC-V的设计简单,易于扩展和自定义,可以在各种应用场景和市场中使用。
什么是指令集架构?
指令集架构(Instruction Set Architecture,简称ISA)是计算机系统中的一个重要概念,指的是计算机中处理器的指令集和处理器的内部结构,即处理器是如何执行指令的。
ISA规定了一套指令集,包括指令的种类、指令的格式、指令的操作数、指令的执行方式等。ISA也规定了处理器的内部结构,包括处理器的寄存器、指令流水线、内存管理单元等。
不同的ISA有不同的指令集和内部结构设计,因此处理器的计算能力和性能也会有所不同。常见的ISA包括ARM、x86、MIPS、PowerPC、RISC-V等。ISA的选择对计算机系统的性能、功耗、软件兼容性、应用场景等都有很大的影响。
简单点比喻可以把指令集架构理解为图纸,处理器就是房子。
RISC和RISC-V的区别
RISC全称Reduced Instruction Set Computer,即精简指令计算机,它是指令集架构,它的理念在于旨在通过减少指令集的数量和复杂度,提高计算机的性能和效率。
RISC最初由加州大学伯克利分校David Patterson和John Hennessy在1980年代提出,并于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是由多位学者和工程师共同开发的,以下是一些主要贡献者:
Krste Asanovic:加州大学伯克利分校电子工程与计算机科学教授,RISC-V的创始人之一。
Andrew Waterman:加州大学伯克利分校博士研究生,RISC-V的主要开发者之一。
David Patterson:加州大学伯克利分校计算机科学教授,计算机体系结构领域的知名学者,RISC-V的顾问之一。
Yunsup Lee:加州大学伯克利分校博士研究生,RISC-V的主要开发者之一。
Alberto Sangiovanni-Vincentelli:加州大学伯克利分校教授,计算机电子学领域的知名学者,RISC-V的顾问之一。
此外,在RISC-V的开发过程中还得到了来自多家公司的支持和参与,包括英特尔、谷歌、诺基亚、贝尔、卡内基梅隆大学、华为、科技大学格拉茨、西部数据等。
创造RISC-V的原因
最初Krste Asanovic想找一款免费高效的指令集架构用于教育方面,就像Andrew S. Tanenbaum(安德鲁·斯图尔特·塔能鲍姆)当初觉得UNIX闭源而开发MINIX从而启发并诞生后来的LINUX一样,在当时碍于ARM和x86都是需要授权的指令集架构,当时基于RISC实现的指令集架构都比较复杂效率低下,所以Krste Asanovic决定基于RISC开发一款免费、开放、高效的指令集架构,所以他在2008年开始主导开发RISC,RISC-V是第五个版本,在此之前已经迭代了四个版本,RISC-V就是第五个版本。
以下是总结并整理为什么创造RISC-V的几个原因:
开放性:Krste Asanovic认为,计算机行业需要一种更加开放的指令集架构,以便更多的公司和个人可以参与到处理器的设计和开发中。这也是为什么RISC-V采用BSD开源协议,可以自由地使用和分发。
灵活性:传统的指令集架构大多采用固定长度的指令,这限制了处理器的灵活性和指令集的扩展能力。而RISC-V指令集架构采用了可变长度的指令,可以实现更加灵活和高效的指令集扩展和自定义。
可定制性:Krste Asanovic认为,处理器的设计应该是可定制的,以满足不同应用场景的需求。而使用RISC-V指令集架构,处理器的设计可以根据具体的需求进行自定义,而不必受限于传统指令集的限制。
教育性:Krste Asanovic希望通过开发RISC-V指令集架构,为学生和研究人员提供一个更加友好和易于理解的指令集,以便他们更好地学习和研究计算机处理器的设计和开发。
RISC-V与ARM、X86指令集架构的区别
RISC-V与ARM
RISC-V和ARM都是基于RISC的指令集架构,它们的主要区别如下:
- 指令集数量
- ARM指令集和寄存器要比RISC-V丰富
- 指令集宽度
- RISC-V指令集最大可以扩展到128位,目前ARM的v8-A架构最高只能扩展到64位指令集,通常RISC-V使用32位指令也支持压缩的16位指令
- 指令集复杂度
- RISC-V的汇编比ARM的要更加简单容易理解
- 指令集执行方式
- RISC-V更注重于执行效率和耗能优化,可以更好的适用于嵌入式和移动设备,ARM更注重于通用性和兼容性,适合更广泛的平台
- RISC-V和ARM都支持分支预测,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的具体区别如下:
架构和指令集:RISC-V架构是开源的,而ARM不是,ARM架构只能由ARM授权合作伙伴使用。此外,RISC-V指令集具有可扩展性,可以根据不同的应用需求进行裁剪和扩展,而ARM指令集则有多个版本,在不同的应用场景中使用。
许可和生态系统:RISC-V架构没有知识产权费用,使用和实现都是自由的,因此在学术界和开源社区中获得了广泛的支持和发展。而ARM架构需要授权才能使用,因此在商业市场中获得了更多的应用和支持。
性能和功耗:由于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; // 使用条件执行指令实现返回较大值 }
在条件执行中大多数指令为ADDNE、ADDEQ这样的指令,这些指令是根据前一条指令的执行结果,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位的CPU:i8086设计开发的复杂指令集。
- 指令集数量
- 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-V和CISC都支持分支预测
- 指令的开放程度
- RISC-V是免费开放不需要授权的指令集架构,CISC需要向Intel公司购买授权费
- 指令集功耗与性能
CISC架构的功耗通常比RISC架构高一些,这是因为CISC指令执行时需要更多的硬件资源,如更复杂的指令流水线、更加复杂的解码器和更大的缓存。同时,CISC指令中的一些复杂指令需要更多的时钟周期来执行,这导致了更多的功耗消耗。此外,CISC处理器中的指令规模较大,需要更多的存储器来存储指令集,而存储器的功耗也较高。
但是,随着技术的发展,CISC架构的功耗也在不断降低,比如采用更小的制造工艺、更优化的流水线设计等。当前一些CISC架构的处理器已经采用了节能技术,如动态电源管理(DPM)和可变电压和频率技术(DVFS),以在降低功耗的同时提升性能。
- 性能需要通过处理器的制作工艺来判断,比如集成度、内存层次结构、流水线和缓存设计等等,CISC由INTEL公司设计并制作,INTEL的芯片制作工艺还是比较强大的,但是如果在同样的制作工艺下RISC-V性能应该要胜于CISC。
- 指令集存储结构
- RISC-V和CISC都采用的是冯诺依曼存储结构
综上总结如下:
复杂度:CISC指令集非常复杂,每个指令可以执行多个操作,而RISC-V指令集采用精简指令集,每个指令只执行一项操作,因此更加简单。
指令类型:CISC包含多种指令类型,包括数据操作、控制操作和I/O操作等,而RISC-V指令集通常只包含几种指令类型,主要包括算术逻辑操作、内存操作和分支跳转操作。
可扩展性:RISC-V指令集极具可扩展性,允许开发者添加自定义指令,以便更好地满足特定应用程序的需求。而CISC指令集则缺乏这种灵活性。
性能:RISC-V指令集通过简化指令集和硬件实现来提高性能,而CISC主要通过制作工艺和设计架构方面来提高性能。
简单来说RISC-V指令集更加简单、易于理解和可扩展,而CISC指令集则以复杂但多功能的指令为特点,两者在不同应用场景下都有一定的优势,RISC-V更适合应用在一些特定的场景下,CISC比较适合一些通用的应用场景。
什么是微操作?
微操作也称微指令,它是一个指令里要执行的步骤,指令可以划分为几个微操作,比如ADD指令可能有到三个微操作 :
- 取值到寄存器
- 进行调用ALU进行加法运算
- 将结果存放到寄存器里每个指令对应的微操作不同
有的指令需要更多的微操作去完成,在CISC中多个微操作可以在一个CPU时钟周期内完成,而RISC-V每个指令只有一个微操作,也就意味着一个时钟周期内只能执行一个微操作,所以如果RISC-V想要完成比较复杂的工作则需要更多的指令集组合起来才可以,RISC-V追求的是一步到位。
对浮点数的支持
RISC-V支持IEE754浮点标准