返回

文章详情

RISC-V:他们本应更明智

Hacker News2026年8月14日 22:38

RISC-V:他们本应更明智 目录 一切为了每个人 可选性 缺失的明显部分 荒谬的编码 所谓的修复 我们是如何走到这一步的,现在该去哪里? 这是否意味着RISC-V注定要失败? 评论... 我常常被问到对RISC-V的反感,所以我经常发现自己在逐步解释。反应通常都是“你根本不理解它的精彩之处”,当然,这根本不是一个论点。在被要求解释了N次之后,我决定将所有内容集中到一个地方,这样下一次被问到时我可以简单地链接过去。此外,如果有人希望形成一个连贯的反驳,他们可以通过这些文本作为参考,清晰详细地引用我的观点。这里所表达的所有观点都是我个人的,并不代表我的雇主、任何神灵或我的房东的看法。我的猫部分同意,部分持异议,并将稍后发表他们的看法。 一切为了每个人 RISC-V最终将占领廉价一次性微控制器市场。这并不是因为它的ISA设计,而是尽管如此。第一个也是最简单理解的问题是,无法做到对所有用例都最好。RISC-V的支持者会让你相信,RISC-V很快就会拥有所有超级计算机,同时也拥有所有小微控制器的用例,以及其间的所有事物。这是不可能的,对于任何ISA来说都是不可能的。简而言之,高端CPU所需要的东西与小型成本节约型微控制器核心所需的东西是完全相对立的。设计选择不仅是微架构上的,而实际上(并且必然地)影响到CPU架构本身。值得一提的是,我100%确定RISC-V最终会占领廉价一次性微控制器市场。并不是因为它的ISA设计,而是尽管如此。它将通过对8051的改进来取得这一角色——这个门槛如此之低,简直只是一个速度波动。 一个廉价微控制器核心需要什么?让我们看看它们的用途。典型的用例是在较大芯片中与硬件模块接口并快速重配置,例如在MP3播放器、SD卡或USB闪存驱动器中。硬件的繁重工作由定制IP完成,CPU核心只是偶尔用于触发寄存器或配置某些东西。这种情况下,重要的是中断延迟(越低越好)和尺寸(越小越好)。通常来说,您不会期望在这样的核心上进行太多数学运算。大规模生产的成本降低设备将代码运行在实际的ROM(如果不可更新)或RAM(如果可更新)中;NOR闪存成本太高,不适合真正大规模生产的事物。当从ROM中运行时,代码大小很重要,因为ROM并不非常紧凑。当从RAM中运行时,代码大小也很重要,因为SRAM在芯片上也占用了很大的空间。因此,代码密度对这些用例很重要。由于不期望进行太多数学运算,诸如硬件除法器(甚至乘法器)之类的东西可以被丢弃。在这种单用途情况下,也不需要特权分离——不期望有外部不可信代码被取回。 “但是,”你可能会说,“你刚描述了RV32IC(或RV32EC)!”因此,在这种嵌入式核心唯一的基本用途上,RISC-V明显不如现有领先竞争对手。实际上,情况稍微接近,除非你需要RV32I_Zicsr来声称这一点。没有Zicsr,就没有符合规范的方式来处理中断,因为没有临时的地方来放置一个寄存器以允许你存放其余的寄存器。MIPS为此保留了两个寄存器($k0和$k1)。没有它们,RISC-V需要mscratch/sscratch。没有Zicsr,你就没有这些,只能用其他奇怪的方法来处理。因此,我们又回到了8051的领域——它专注于以奇特的方式做事情。小型嵌入式核心并不是超出顺序的怪物。如果你能从它们那里获取每个周期一条指令,你就觉得自己幸运了。鉴于此,让我们乐观地计算中断处理程序存放ABI所需的寄存器并调用用C语言编写的处理程序所需的周期数。首先,我们将使用CSRRW来存放一个寄存器(为了方便解释,我们假设是t0),并获取一个可以存放其余寄存器的基地址。然后,我们需要存放ra、sp、gp、tp、t1到t6和a0到a7。接下来,我们需要使用另一个CSSRW来取回旧的t0值并存放。至少需要21个周期。在退出的过程中,数学是相似的:一个CSRRW来读取存放的寄存器的地址,以及19个载入来加载它们。至少又需要20个周期。但是这还不是全部。由于这需要用汇编语言完成,我们还需要实际计算JAL到我们的C处理程序以及从那里返回的RET。我们欣然假设这两个都是两个周期。因此,每个中断在C处理程序中实际工作之前的成本至少是44个周期。竞争对手的廉价32位内核Cortex-M0在15个周期内进入中断,12个周期退出,由于硬件处理ABI被破坏的寄存器,h。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡