RISC-V没你想象的那么好?

RISC-V 掀起大热,毫无疑问,它未来无限光明、前途无量,但是,我认为它还有不小的进步空间。本文将带领大家一起看看 RISC-V 目前还存在的一些缺陷……

译者 | 弯月    责编 | 张文

出品 | CSDN(ID:CSDNnews)

在硬件设计方面,人们经常吹捧的一种设计是 RISC-V,它的 ISA 是开放的,不需要授权费。许多组织都愿意全力支持 RISC-V,开源社区对它也非常有信心,然而随着最近英伟达收购 ARM,人们开始担忧了。但是,我认为这些期望有些误导,因为 RISC-V 的开放性并不会给用户带来多少好处,实际上受惠的是 CPU 制造商。

1.授权费

RISC-V 最大的优势之一在于,不需要支付任何授权费。虽然你需要支付实现费用给 SiFive 之类的公司,但这些费用都是设计费,而不是 ISA 的抽象实现费。开放性意味着洗衣机等设备使用的小型芯片可以拥有更大的利润空间,因为制造商不需要支付 ARM 或 Synopsis 的任何费用。尽管节省下的费用也许会让利给消费者,但对于这种只能一次性编程的 ROM 而言,ISA 的开放性对于用户来说并没有什么用。 

2.ISA 碎片化

RISC-V 有意定义了一个很小的、带有扩展的 ISA。尽管许多更大的实现都会实现一组通用的扩展,但连基本功能都放在扩展内,会导致以二进制形式发布软件时的兼容性更难以保证。再加上 RISC-V 明确地鼓励制造商在专用芯片上实现自定义指令,对于嵌入式来说这点非常好,但对于通用的计算机和计算机上运行的操作系统来说则不是个好消息。 

3.生态环境

RISC-V 在积极地推动嵌入式,这种举措合情合理。但许多有关 RISC-V 的吹捧则希望它能成为个人电脑或服务器的主力。然而这不太可能实现,因为嵌入式的生态环境是完全不同的。ISA 在嵌入式编程中并没有那么重要(尽管代码的重用性很重要,但由于不需要运行任意的二进制文件,所以并不像通用处理器那般重要),用户和企业关心的都是二进制兼容性层次上的计算(避免已有程序的浪费)和大多数 RISC-V 实现尚未实现的性能提升,如超标量执行等。 

4.开放性并不会传递

ISA 的开放对于实现并没有多大影响。RISC-V 的授权完全允许私有的设计,而且考虑到 RISC-V 在嵌入式中的统治地位,这种私有性会非常普遍。因此,开放性不会影响到用户(以控制根源信任),因为用户对于晶圆工厂并没有任何影响。 

5.设计缺陷

自 1991 年以来,RISC-V 在 CPU 设计方面没有任何进步,甚至出现了一些诸如寻址模式错误等初级的错误。但是,尽管有这些缺陷,它依然在嵌入式方面占据了统治地位。

总的来看,RISC-V 会给希望节省经费的学术项目和嵌入式开发带来一场革命,但不太可能影响到用户和开发者。(转自CSDN)

参考链接:https://sporks.space/2021/02/01/risc-v-isnt-as-interesting-as-you-think/

1.据说很多搞软件的羡慕硬件工程师

2.单片机常用的几种通信接口,I2C、SPI、UART等

3.编程语言1月排行榜结果出炉,我们有五个重要发现

4.5元变70,哎,芯片又缺货了

5.RISC-V处理器是如何设计指令集的?有何特别之处

6.嵌入式工程师常用的宏定义

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RISC-V中的寄存器是基于物理寄存器实现的。每个物理寄存器都有一个唯一的寄存器编号,这个编号被称为"寄存器名"。在RISC-V中,寄存器名是整数,从0到31。其中x0是专门用于硬编码零值的寄存器。 RISC-V的寄存器文件被实现为一个数组,数组的下标就是寄存器名,数组的元素就是寄存器的值。在RISC-V中,寄存器文件被保存在处理器的物理寄存器中。 下面是RISC-V的32位寄存器文件的源代码: ```verilog module regfile( input clk, input [4:0] rs1, input [4:0] rs2, input [4:0] rd, input [31:0] write_data, input we, output [31:0] read_data1, output [31:0] read_data2 ); reg [31:0] regs [0:31]; assign read_data1 = (rs1 == 0) ? 0 : regs[rs1]; assign read_data2 = (rs2 == 0) ? 0 : regs[rs2]; always @(posedge clk) begin if (we) begin if (rd != 0) begin regs[rd] <= write_data; end end end endmodule ``` 这个代码定义了一个Verilog模块,实现了一个带有32个32位寄存器的寄存器文件。它有三个输入端口:时钟信号、读取寄存器1的寄存器名、读取寄存器2的寄存器名。它还有两个输出端口:从寄存器1读取的值和从寄存器2读取的值。最后,它有一个写入端口,用于将数据写入指定的寄存器中。 在模块的实现中,使用了一个Verilog数组来实现寄存器文件。每当时钟上升沿到来时,都会检查写入端口是否被使能。如果使能,就把写入数据写入到指定的寄存器中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值