gpt4 book ai didi

assembly - 为什么 RISC-V S-B 和 U-J 指令类型以这种方式编码?

转载 作者:行者123 更新时间:2023-12-04 14:21:58 24 4
gpt4 key购买 nike

我正在阅读一本书“计算机组织和设计 RISC-V 版”,并且遇到了 S-B 和 U-J 指令类型的编码。

我上面提到的那些类型有奇怪的编码立即字段。

S-B 类型将立即字段分为 2 部分。这是有道理的,因为所有指令编码都必须相似。但我不明白为什么下面的直接字段以这种方式编码。

imm[12, 10:5], imm[4:1, 11]

代替
imm[11:5], imm[4:0]

U-J 类型也有这个奇怪的编码立即字段
imm[20,10:1,11,19:12]

代替
imm[19:0]

谁能解释一下?

最佳答案

所选择的编码与其他编码非常吻合,以牺牲必须生成指令的软件、必须解码指令的软件以及学习或使用 RISC V 的程序员为代价来简化硬件;)。

S 格式将立即数分解为 imm[11:5]imm[4:0] .这个立即数被分解的原因是为了保留其他字段,即寄存器字段,rs2rs1 , 与 R-Type 指令中的两个源寄存器字段的位置相同。 (与 MIPS 相比,它的功能相似但不完全,这避免了寄存器名称宽度(例如 5 位宽)多路复用器和一些额外的布线,以及控制信号。)

S 格式允许 12 位立即数。

而分支的 (S)B 类型使用 13 位立即数,尽管 13 位立即数的最后一个(最低有效位)始终为零,因此不会存储!因此,它实际上需要像 S-Format 一样编码 12 位,但是因为它们在实际使用中移位(左移 1,例如 *2),与 S- 相比,所有位基本上都偏离 1 位位置立即格式化。 (移位不难也不慢,但会消耗硅片空间。通常,通过简单地将输入位连接到偏移输出位位置,而不是使用我们在 ALU 中看到的专用移位器,即可完成这种恒定量的移位;然而,这仍然是直接的和数据路径大小的布线,所以大约有 12 到 32+ 条额外的电线。)

为了不必移动(尽可能多地)存储的立即数部分,并且为了与 S 格式中的立即数很好地对齐,使用了未存储的 LSB 位置(来自 S 格式)存储 SB 格式立即数的第 11 位。这样位 10:1 与 S 格式立即对齐。

但是为什么不直接将分支的第 12 位放在那里,这样可以使多一位与 S 格式保持对齐(即 11:1)?因为指令的立即数中编码的最高位用于将立即数符号扩展为 32 位(对于 RV32,或 64 位对于 RV64,128 位对于 RV128,很多线!)。因此,通过将符号位保持在与 S 格式 12 位立即数相同的位置,可以共享相同的符号扩展硬件(具有相同的上述优点和缺点;-)。因此,选择将第 11 位(SB 类型立即数的下一个最高有效位)存储在 0 位位置(相对于 S 格式)。

SB(已经给定 S)的成本只有两根左右(1 位)线和一个 1 位多路复用器和一个 1 位控制信号——与替代方案相比,这是最低的。

见以下presentation ,幻灯片 46,标题为“RISC-V 立即编码”,副标题是:“为什么这么困惑?!?!”

UJ-Type 做类似的事情,将符号位保持在与其他指令的符号位相同的位位置,同时将尽可能多的其他位与其他格式对齐。

请参阅同一演示文稿的幻灯片 60。

关于assembly - 为什么 RISC-V S-B 和 U-J 指令类型以这种方式编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58414772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com