Fixed decoder bug that doesn't throw illegal instruction exception for RV32 immediate shifts by more than 31

This commit is contained in:
David Harris 2024-11-27 15:12:11 -08:00
parent 6cee6fed63
commit 37c6879805

View File

@ -152,6 +152,7 @@ module bmuctrl import cvw::*; #(parameter cvw_t P) (
endcase
end
if (P.ZBB_SUPPORTED | P.ZBS_SUPPORTED) // rv32i/64i shift instructions need BMU ALUSelect when BMU shifter is used
if (P.XLEN == 64 | !Funct7D[0]) // rv32i shifts cannot shift by more than 31
casez({OpD, Funct7D, Funct3D})
17'b0110011_0?0000?_?01: BMUControlsD = `BMUCTRLW'b001_0000_0000_1_0_0_0_1_0_0_0_0_0; // sra, srl, sll
17'b0010011_0?0000?_?01: BMUControlsD = `BMUCTRLW'b001_0000_0000_1_1_0_0_1_0_0_0_0_0; // srai, srli, slli