为什么用这种方式对RISC-V S-B和U-J指令类型进行编码?

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

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

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

S-B类型将立即数字段分为两部分。这是有道理的,因为所有指令的编码必须相似。但是我不明白为什么下面用这种方式对立即数字段进行编码。

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]

任何人都可以解释吗?

encoding riscv instruction-set
2个回答
3
投票

[选择的编码与其他编码非常吻合,简化了硬件,但要付出代价的是必须生成指令的软件,必须对指令进行解码的软件以及程序员学习或使用RISC V的软件;]。

S格式将立即数分解为imm [11:5]和imm [4:0]。该立即数被拆分的原因是将其他字段(即寄存器字段rs2和rs1)保持在与R-Type指令中的两个源寄存器字段相同的位置。 (与MIPS相比,MIPS的功能相似但不完全相同,从而消除了寄存器名称宽度(例如5位宽)的多路复用器和几条额外的布线以及控制信号。)

S格式允许立即使用12位。

尽管分支的(S)B-Type使用13位立即数,尽管13位立即数的最后一个(最低有效位)始终为零因此不存储!因此,它实际上需要像S格式一样对12位进行编码,但是由于它们在实际使用中发生了移位(左移一位,例如* 2),因此与S-相比,所有位实际上都偏离了1位位置。立即格式化。移位并不困难或缓慢,但会花费不动产的费用。通常,仅需将输入位连接到偏移输出位的位置,而不是使用我们在ALU中看到的专用移位器,即可完成恒定量的移位;但是,这仍然是即时且数据路径大小的布线,因此需要大约12至32+额外的布线。)

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

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

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

请参见下面的presentation,幻灯片46,标题为“ RISC-V立即编码”,副标题为:“为什么如此令人困惑?!?!”

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

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


0
投票

official RISC-V spec完成了excellent

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