如何为 SRA 指令综合硬件

How to synthesize hardware for SRA instruction

我应该如何设计我的 SRA MIPS R3000 指令,它按移位量对 Reg[rt] 进行算术移位。偏移量始终是变量而不是常量,所以我只关心如何在代码中指定它以使其在 Systemverilog 中编写时可综合。因为一个变量不能合成,除非它的值是已知的。如果我的问题不对请指正。

右移字运算 SRA: 寄存器 rt 右移 shamt 位,符号扩展 高位。 结果放在寄存器 rd.

module ALU_SRA(
        input logic signed [31:0] rs,
        input logic signed [31:0] instr,
        input logic signed [31:0] rt,
        input logic signed [4:0] shamt,
        output logic signed [31:0] out);

        assign out = {`shamt{rt[31]}, rt >> shamt};

endmodule

如果你想在一个周期内移动它,那么你可以这样做:example

这将进行综合,但您应该检查它是否符合您的时序要求。如果您需要扩展 shamt 端口,那么您需要编写另一个移位函数。无论如何,如果你不需要在一个周期内移位,那么你应该在每次调用移位函数之间添加寄存器以获得更好的时间。

使用算术右移:

assign out = rt >>> shamt;

这记录在 IEEE 1800-2012 Specification

11.4.10 移位运算符 部分