如何为SRA指令合成硬件

时间:2016-10-07 07:22:12

标签: mips system-verilog synthesis

我应该如何设计我的SRA MIPS R3000指令,该指令将Reg [rt]的算术移位移位量。移位量始终是变量而不是常量,所以我只关心在Systemverilog中编写时如何在代码中指定它以使其可合成。由于变量无法合成,除非其值已知。如果我的问题不对,请纠正我。

Shift Word Right Arithmetic 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

2 个答案:

答案 0 :(得分:3)

使用算术右移:

assign out = rt >>> shamt;

IEEE 1800-2012 Specification

11.4.10移位运算符部分对此进行了详细说明

答案 1 :(得分:1)

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

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