为什么RISC-V ISA中有很多零目标指令不影响硬件?

问题描述 投票:0回答:2

第一个寄存器是 RISC-V ISA 中的硬件零。它用于许多情况,例如将零调用到另一个寄存器,以及跳转但不存储地址等。 然而,当目标寄存器为零时,有许多可能性不会改变硬件,并且我们不需要这些可能的指令,因为它们不用于任何用途。我觉得它浪费了其他功能指令的位。 我在这个问题上遗漏了什么?为什么会这样? 据我所知,ISA 中的位非常昂贵,因此 ISA 开发人员尝试使它们尽可能简单和压缩,以涵盖许多不同的功能。然而,这让我有相反的感觉,因为许多指令使用第一个寄存器的目标,该寄存器硬连线为零。

我不知道它们是否保留供将来使用,或者第一个寄存器(x0)是否可以在没有硬接线零的情况下使用。

cpu-architecture riscv instruction-set
2个回答
2
投票

最初设计者关心回答的一个问题是:对于小型嵌入式系统来说,什么可以降低硬件成本?有无用的指令,如 add x0、x0、x0 甚至 add x0、a0、a1?或者用那些原本无用的编码做一些有用的事情?对于什么需要更少硬件的问题,答案是前者。

另一个问题是:如何让最常见(也是有用)的指令尽快执行。解码并添加 x0、x0、x0,或者添加 x0、a0、a1,以便它将执行不同的操作(与无操作)可以减慢有用的添加指令,如下所示:虽然其中一些解码可以并行发生(使用添加的硬件)最终,解码 add x0、a0、a1 和解码正常 add a0、a0、a1 这两条路径必须合并,这通常发生在多路复用器中。引入的多路复用器越多,周期就越长,因此这样做会减慢整个处理器的速度。


与 MIPS 相比,RISC V 的设计者竭尽全力从解码阶段删除了一个多路复用器,将 R 型和 I 型指令的目标寄存器字段保持在固定位置。


0
投票

作为问题的另一个答案(当我发布这个问题时,我不知道规范是否是这样的),

选择此 HINT 编码是为了简单的实现可以忽略 HINTs alto- 一起,而是将 HINT 作为常规计算指令执行,但碰巧不 改变建筑状态。例如,如果目标寄存器为 x0,则 ADD 为 HINT;否则,ADD 为 HINT。这 五位 rs1 和 rs2 字段将参数编码为 HINT。然而,一个简单的实现可以 只需将 HINT 作为 rs1 和 rs2 的 ADD 执行,写入 x0,这在架构上没有 效果看得见。

来自 RISC-V 规范

据我了解,其中许多建议用于复杂系统中的其他目的。

之前的答案实际上解释了这一点,但我想将规范中的解释放在这里

© www.soinside.com 2019 - 2024. All rights reserved.