Skip to content

Commit

Permalink
fix up image of cpu-design-part1-riscv-instruction.md
Browse files Browse the repository at this point in the history
Signed-off-by: Zhangjin Wu <falcon@tinylab.org>
  • Loading branch information
lzufalcon committed Jul 11, 2023
1 parent f0731c9 commit 401ada9
Showing 1 changed file with 1 addition and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ RISC-V 指令集是一个精简指令集,也就意味着其所有的指令都

* 关于**旋转**的补充说明:

* 在 RISC-V 的指令集中,为了保持所有指令格式在寄存器字段位置上的一致性,设计出的 S 型指令将 12 位的立即数(imm[11:0])进行了拆分,使得 12 位立即数变成了两部分(imm[11:5] 和 imm[4:0])。如下图所示:![Snipaste_2022-07-01_12-50-36](https://gitee.com/tinylab/riscv-linux/blob/master/articles/wp-content/uploads/2022/03/riscv-linux/images/riscv_cpu_design/part1/Snipaste_2022-07-01_12-50-36.png)
* 在 RISC-V 的指令集中,为了保持所有指令格式在寄存器字段位置上的一致性,设计出的 S 型指令将 12 位的立即数(imm[11:0])进行了拆分,使得 12 位立即数变成了两部分(imm[11:5] 和 imm[4:0])。如下图所示:![Snipaste_2022-07-01_12-50-36](/wp-content/uploads/2022/03/riscv-linux/images/riscv_cpu_design/part1/Snipaste_2022-07-01_12-50-36.png)

但是在 B 型分支跳转指令中,我们实际需要的是一个 13 位的立即数,而这个立即数的 LSB(Least Significant Bit)总是为 0(本质上就是需要 12 位立即数左移 1 位)。所以从编码的角度上说,B 型指令和 S 型指令一样,只需要 12 位的立即数(将末位的 0 省略)。但是,如果 B 型指令只存储 12 位立即数,则指令执行的过程中将必须进行 12 位立即数的左移操作。左移操作对于硬件来说并不复杂或缓慢,但是却要实实在在的消耗 CPU 硬件资源;通常来说,常数量级的左移操作在芯片内并不会去使用像 ALU 模块中那样的专用移位器,而是将输入硬连线至偏移 1 位的输出线上。这样的操作虽然在时间消耗上可以忽略,但是却需要使用 CPU 硬件层面 12~32 根甚至更多的额外硬连线资源。

Expand Down

0 comments on commit 401ada9

Please sign in to comment.