修改后的代码如下所示:
module Controller(
input logic [6:0] iOpcode,
input logic [2:0] iFunct3,
input logic [6:0] iFunct7,
/*- TODO:扩充指令时在这里增加端口 -*/
output logic MemWrite,
output logic MemToReg,
output logic oImmToAlu,
output logic [3:0] oALUop,
output logic oRegWrite,
output logic [4:0] oImm_type //对应五种类型:{J,U,B,S,I}
);
always_comb begin
/*- TODO:扩充指令时需修改 ...... -*/
//I型指令
if (iOpcode == 7'b0010011) begin
oImmToAlu = 1'b1;
oImm_type = 5'b00001;
oRegWrite = 1'b1;
if(iFunct3 == 3'b000) oALUop = 4'b0001;
else if(iFunct3 == 3'b001) oALUop = 4'b0111;
else if(iFunct3 == 3'b100) oALUop = 4'b0101;
else if(iFunct3 == 3'b101 && iFunct7[5] == 1'b0) oALUop = 4'b1000;
else if(iFunct3 == 3'b101 && iFunct7[5] == 1'b1) oALUop = 4'b0110;
else if(iFunct3 == 3'b110) oALUop = 4'b0100;
else if(iFunct3 == 3'b111) oALUop = 4'b0011;
end
//R型指令
else if (iOpcode==7'b0110011) begin
oImmToAlu = 1'b0;
oImm_type = 5'b00000;
oRegWrite = 1'b1;
if(iFunct3 == 3'b000 && iFunct7[5] == 1'b0) oALUop = 4'b0001;
else if(iFunct3 == 3'b000 && iFunct7[5] == 1'b1) oALUop = 4'b0010;
else if(iFunct3 == 3'b001) oALUop = 4'b0111;
else if(iFunct3 == 3'b100) oALUop = 4'b0101;
else if(iFunct3 == 3'b101 && iFunct7[5] == 1'b0) oALUop = 4'b1000;
else if(iFunct3 == 3'b101 && iFunct7[5] == 1'b1) oALUop = 4'b0110;
else if(iFunct3 == 3'b110) oALUop = 4'b0100;
else if(iFunct3 == 3'b111) oALUop = 4' b0011 ;
end
// lw
else if( iOpcode==7 'b00000111 && i F unct31==31 ) begin
MemWrite= lb - ,
MemToReg= 1'b1 ;
oImm_type= 5'b00001 ;
oRegWrite= 1'b1 ;
oALUop= 4'b0001 ;
end
// sw
else if( iOpcode==7 'b01000111 && i F unct31==31 ) begin
MemWrite= lb - ,
MemToReg= lb - ,
oImm_type = lb - ,
oRegWrite = lb - ,
oALUop = lb - ,
end
else begin
oALUop = 5'b00000;
oImm_type = 5'b00000;
oRegWrite = 1'b0;
end
end
endmodule
我在代码中添加了对lw和sw指令的处理。请根据具体需求进一步修改,确认是否满足你的要求。
内容由零声教学AI助手提供,问题来源于学员提问




