RISC-V是中国CPU领域最受欢迎的架构,中国芯片产业和芯片生态将会越来越多地聚集RISC-V架构,RSIC-V成为推动新一代信息技术发展的新引擎。
更多RISC-V技术,请参考文章“浅析RISC和RISC-V”,“全球首创:RISC-V迈入大小核处理器时代”,“玄铁RISC-V处理器入门及实战”,“平头哥RISC-V生态发展介绍”,“RISC-V架构入门科普”,“全球首创:RISC-V迈入大小核处理器时代”,“RISC-V要上天,将被选为航天计算芯片”,“RISC-V带来了什么?”,“RISC-V生态发展及国内厂商的多维布局”等等。
Part 01
● RISC-V生态发展现状 ●
据玄铁RISC-V生态大会数据披露,2022年全球RISC-V架构处理器已出货100亿颗;数据预测,到2025年RISC-V架构的处理器将达到800亿颗。RISC-V很有希望发展成为X86、ARM之后的第三大架构生态。
Part 02
● RISC-V生态发展方向 ●
更好的性能:为了满足高性能应用的需求,RISC-V生态系统正在朝着提高性能的方向发展,包括增加指令集、增强内存管理和安全性等。
更广泛的应用:除了传统的嵌入式系统和服务器市场外,RISC-V也正在向其他领域拓展,例如人工智能、物联网等。
更好的软件支持:随着RISC-V的不断发展,越来越多的软件也在适配RISC-V架构,但在软件支持方面仍有许多工作要做,包括优化编译器、调试工具等。
Part 03
● RISC-V生态产业化潜能 ●
开放的生态系统:RISC-V是一种完全开放的指令集架构,任何人都可以使用它,这为RISC-V的产业化发展创造了良好的基础。
低成本:由于RISC-V的开放性,相对于传统的封闭式指令集架构,开发和生产RISC-V处理器的成本更低,这为RISC-V的产业化发展提供了机会。
软硬件协同优化:RISC-V的开放性也意味着软硬件协同优化更容易实现,这可以带来更高的性能和更低的功耗,同时也可以加速RISC-V的产业化进程。
Part 04
● RISC-V对于国产芯片产业 ●
RISC-V生态系统的开放性和灵活性可以促进国产化芯片产业和操作系统发展,具体体现在以下几个方面:
自主可控:RISC-V的开放性使得任何公司或个人都可以访问和使用其架构,这使得国产化芯片产业和操作系统开发者有了自主控制的机会。任何人可以使用RISC-V架构设计自己的芯片或操作系统,不必依赖于外国技术或知识产权。
降低成本:使用RISC-V架构可以降低国产化芯片和操作系统的开发成本。RISC-V是一种开放的指令集架构,不需要支付专利费用或授权费用,相比于其他商业化指令集架构,可以大大降低开发成本,从而降低国产化芯片和操作系统的生产成本。
促进创新:RISC-V的灵活性可以促进创新。使用RISC-V架构的芯片和操作系统可以灵活定制,可以根据具体的应用场景进行优化,从而提供更好的性能和更低的功耗。这种灵活性和定制化使得国产化芯片和操作系统能够更好地适应本土市场需求,促进创新。
加速产业化:RISC-V的开放性和生态系统可以加速国产化芯片和操作系统的产业化进程。使用RISC-V架构的芯片和操作系统可以更快地进行开发和测试,同时可以更容易地适配和集成其他系统,从而加速产业化进程。
总的来说,RISC-V生态系统可以为国产化芯片产业和操作系统发展带来更多的机遇和可能性。它可以促进自主可控、降低成本、促进创新和加速产业化进程,从而推动国内芯片产业和操作系统发展。作为一个移动通信运营商,中国移动可以利用自身在移动通信领域的优势在RISC-V国产化过程中可以发挥多种作用,包括推广RISC-V、支持本土芯片企业、制定行业标准和合作开发新应用等,为国产芯片产业的发展和RISC-V生态系统的壮大贡献力量。
Part 05
● RISC-V指令集的优势 ●
Part 06
1).没有立即数减法
只有立即数加法指令(addi),没有立即数减法指令(subi),那么减法怎么办?无论是数学上还是程序上,x-y都等价于x+(-y),也就是说可以把减法变成加法,把被减数转化成负数然后再加上减数就实现了和减法一样的功能。正是基于这个原理,RISC-V只提供立即数加法,没有提供立即数减法,如果需要立即数减法,那么就要麻烦编译器把这个立即数转化成负数,然后继续使用加法。这也是 RISC-V将立即数作为有符号数处理的原因。
2). x0 寄存器简化指令集
引入x0 寄存器后,很多特殊指令只需用普通的指令加上 x0 做操作数就能解决,指令的数量大大减少,处理器的解码电路也大大简化。
3). 32 位常量
之前使用的ARM 处理器是将立即数表示不下的常量存到常量池,然后用PC相关的LDR指令加载到寄存器。RISC-V 的常量完全是用指令拼接,不需要 Load 指令,使用 Load 指令需要额外的访问周期。RISC-V 单条指令可以表示 12 位的有符号常量,超过 12 位需要两条指令来合成。其中一条指令是 lui,lui 指令加载常量的高 20 位,低 12 位可以用addi指令上去,这个过程需要编译器算出立即数到底是什么,因为 addi 指令执行的是有符号加法,其中的 12 位立即数会先被符号扩展成 32 位的有符号数再参与计算。ARM 的常量加载需要8个字节,一条指令加一个常量;RISC-V的常量加载也是需要8个字节,两条指令,两者占用的程序空间一样。
4).只有小于和大于等于
RISC-V 的比较跳转指令只有 blt 和 bge,即只有小于和大于等于。但大于和小于等于也是需要的,RISC-V用了一个很巧妙的办法用两条指令实现了四条指令的工作,将 blt 的两个参与比较的操作数位置换一下就有了 bgt(大于跳转),将bge 的两个参与比较的操作数位置换一下就有了 ble(小于或等于跳转)。
5).让编译器做更多工作
对 RISC 的理解是处理器尽量少做、编译器尽量多做,这是非常有道理的,毕竟编译的次数远少于执行的次数。上面几点就提到不少要让编译器多做的工作,又例如 B-type 是比较跳转指令的格式,J-type 是长跳转或函数调用指令格式,注意它们的立即数排列次序,把填充这里的立即数交给了链接器的工作。这样排放偏移地址立即数是为了简化处理器的设计,但明显给编译器增加了工作。
6).其他省掉的指令
很多常用的指令都被省掉了,比如nop、move、not、neg 等,但所有这些功能都还有只不过都是用其他的指令来等价实现,比如not 指令是用xorird,rs,-1实现。
Part 07
Linux 有两个特殊的设备:/dev/zero 和/dev/null。从/dev/zero 可以源源不断地读到0,往dev/null 写的任何内容都被丢弃。如果要创建一个需要填0的文件,就从dev/zero 拷贝,如
果要丢弃一些输出,就把输出重定向到/dev/null。RISC-V的x0寄存器就相当于是硬件版的/dev/zero 和/dev/null的组合体。从0读出来的总是0,往x0 写进去的总是被丢弃。所以 x0 提供两种功能:一是提供常量0,在软件编程中0可以说是最常用的常量:二是提供一个可以丢弃结果的场所。有了 x0 寄存器,很多本来需要单独指令的操作只要在普通的指令前加上x0 就可以实现。
(1)nop 空指令,RISC-V没有提供nop 指令,而是用addi x0,x0,0来实现空指令,这条addi 使用x0作为目标存器,会丢弃结果,所以这条指令不会对程序状态产生任何影响,和空指令是完全等价的,这就不需要单独的空指令了。
(2)neg 取负数指令,RISC-V用 sub rd,x0,rs 来实现,x0-rs 等价于0-rs,等价于-rs,有了x0,就可以用更普通的减法指令来实现取负数指令。
(3)j跳转指令,RISC-V 没有单独的跳转指令,只有jal跳转链接指令,跳转之前总是要把下一条指令的地址拷贝到寄存器,但是如果用 x0 作为jal 的操作寄存器,即把下-条指令的地址拷贝到 x0,那么效果就等价于j跳转指令了,因为写入 x0 的任何值都会被丢弃。
(4)beqz等于零跳转指令等一系列和0比较的跳转指令,程序中和0比较是相当常见的操作,RISC-V 中和0比较的指令是普通的比较跳转指令,是用 x0 寄存器做指令的操作数。还有很多其他这样的指令,用普通的指令加上 x0 做操作数,就实现了那些没有x0 寄存器的处理器需要单独指令或者需要组合两条指令才能实现的操作。