RISC-V:实施SLLI,SRLI和SRAI

Amm*_*urd 2 cpu-architecture riscv

在RISC-V指令集手册中,shift立即指示:

  1. SLLI(立即左移逻辑).
  2. SRLI(右移逻辑立即).
  3. SRAI(右移算术立即).

它在手册中提到

按常数移位被编码为I类型格式的特化.要移位的操作数在rs1中,移位量在I-immediate字段的低5位中编码.右移类型在I-immediate的高位编码.SLLI是逻辑左移(零被移位到低位); SRLI是逻辑右移(零被移入高位); SRAI是算术右移(原始符号位被复制到空出的高位).

什么时候说的

移位量在I-immediate字段的低5位中编码.

它将如何编码?

另一件事是否意味着需要多个时钟周期才能按照I-immediate的低5位指定移位?或者这可以在一个时钟周期内完成? 在此输入图像描述

Mar*_*oom 6

您可以直接在RISC-V规范中找到答案.

编码SARI,SLLI和SRLI

 imm[11:5]    imm[4:0]   rs1    func3   rd   opcode    inst
------------------------------------------------------------
 0000000      shamt      rs1    001     rd   0010011   SLLI
 0000000      shamt      rs1    101     rd   0010011   SRLI
 0100000      shamt      rs1    101     rd   0010011   SRAI
Run Code Online (Sandbox Code Playgroud)

至于延迟,ISA只处理架构而不是微架构.
这意味着两个符合RISC-V标准的CPU可以在不同数量的时钟周期内执行移位.

  • 似乎OP主要询问shamt是如何编码的.所以答案是:作为一个5位二进制整数. (2认同)
  • 桶形移位器将需要 5 个阶段来执行基于描述移位数的 5 位的移位。这意味着与几乎任何其他 ISA 指令相比,移位将花费更长的时间来传播答案。因此,您可以在单个周期内完成此操作,但这会导致时钟频率变慢以确保完成。或者,您可以在发生移位时将 CPU 停顿多个周期,以便它有机会在不限制其他指令速度的情况下完成。它成为一种设计权衡。 (2认同)