开发者生态
morning
RISC-V:他们应该更了解
摘要
RISC-V: They Should Have Known Better Table of Contents Everything for Everyone Optionality Missing Obvious Pieces Ridiculous encoding Alleged Fixes How Did We Get Here and Where to Now? Does This Mea...
and
the
RISC
all
for
will
are
that
use
but
2026-08-15
1 阅读
约6分钟阅读
kaycebasques
字号:
RISC-V:他们应该更好地了解目录 为每个人提供一切 可选性 缺少明显的部分 荒谬的编码 所谓的修复 我们是如何到达这里以及现在去哪里?这是否意味着 RISC-V 注定失败?评论...我经常被要求解释我对 RISC-V 的厌恶,我经常发现自己分段解释它。反应通常是“你只是不明白这一切的辉煌”,这当然是毫无争议的。在被要求解释第 N 次之后,我决定将所有内容都放在一个地方,以便下次被问到时可以简单地链接到它。另外,如果有人希望形成一个连贯的反驳,他们可以通过这篇文章作为参考,清楚而详细地引用我的观点。这里陈述的所有观点都是我的,并不代表我的雇主、任何神灵或我的房东的观点。我的猫们部分同意,部分反对,稍后会发表他们的意见。面向所有人的一切 RISC-V 最终将拥有廉价的一次性微控制器空间。不是因为它的 ISA 设计,但尽管如此。第一个也是最容易理解的问题是,不可能对所有用例都是最好的。 RISC-V 粉丝会让你相信 RISC-V 将很快拥有所有超级计算机,同时也拥有所有微型微控制器用例,以及介于两者之间的所有东西。这是不可能的,对于任何 ISA 来说也是同样不可能的。简而言之,高端 CPU 所需的东西与小型节省成本的微控制器内核所需的东西截然相反。设计选择不仅仅是微架构,而且实际上(并且必然)影响 CPU 架构本身。无论如何,我 100% 确信 RISC-V 最终将占据廉价的一次性微控制器领域。不是因为它的 ISA 设计,但尽管如此。它将通过对 8051 的改进来接替 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 个周期。但这还不是全部。由于这需要在汇编中完成,因此我们需要实际考虑 C 处理程序的 JAL 以及从那里的 RET。我们会慷慨地假设这些都是两个周期。因此,在 C 处理程序中完成任何工作之前,每个中断至少有 44 个周期的成本。 Cortex-M0(竞争的廉价 32 位内核)在 15 个周期内进入中断,在 12 个周期内退出,并且由于它将 ABI 破坏的寄存器推送到硬件中,因此 h
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱