我应该如何设计我的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
答案 0 :(得分:3)
答案 1 :(得分:1)
如果你想在一个周期中移动它,那么你可以这样做:example
这将合成,但您应该检查它是否符合您的时间要求。如果需要扩展shamt端口,则需要编写另一个shift函数。无论如何,如果你不需要在一个周期内移位,那么你应该在每次调用shift函数之间添加寄存器以获得更好的时序。