bmuctrl checks for illegal zbs-style instructions

This commit is contained in:
Kevin Kim 2023-02-17 12:54:08 -08:00
parent 0bab3bec3d
commit 9bf11471aa

View File

@ -63,18 +63,39 @@ module bmuctrl(
// Main Instruction Decoder
always_comb
casez({OpD, Funct7D, Funct3D})
// ALUSelect_zbsD
17'b0010011_010010?_001: BMUControlsD = `BMUCTRLW'b111_0001; // bclri
17'b0010011_010010?_101: BMUControlsD = `BMUCTRLW'b101_0001; // bexti
17'b0010011_011010?_001: BMUControlsD = `BMUCTRLW'b100_0001; // binvi
17'b0010011_001010?_001: BMUControlsD = `BMUCTRLW'b110_0001; // bseti
17'b0110011_010010?_001: BMUControlsD = `BMUCTRLW'b111_0001; // bclr
17'b0110011_010010?_101: BMUControlsD = `BMUCTRLW'b101_0001; // bext
17'b0110011_011010?_001: BMUControlsD = `BMUCTRLW'b100_0001; // binv
17'b0110011_001010?_001: BMUControlsD = `BMUCTRLW'b110_0001; // bset
17'b0?1?011_0?0000?_?01: BMUControlsD = `BMUCTRLW'b001_0000; // sra, srai, srl, srli, sll, slli
17'b0110011_0000101_???: BMUControlsD = `BMUCTRLW'b001_0010; // ZBC instruction
default: BMUControlsD = {Funct3D, {4'b0}}; // not B instruction or shift
// ALUSelect_BSelect
17'b0010011_0100100_001: BMUControlsD = `BMUCTRLW'b111_0001; // bclri
17'b0010011_0100101_001: if (`XLEN == 64)
BMUControlsD = `BMUCTRLW'b111_0001; // bclri (rv64)
else
BMUControlsD = `BMUCTRLW'b000_0000; // illegal instruction
17'b0010011_0100100_101: BMUControlsD = `BMUCTRLW'b101_0001; // bexti
17'b0010011_0100101_101: if (`XLEN == 64)
BMUControlsD = `BMUCTRLW'b101_0001; // bexti (rv64)
else
BMUControlsD = `BMUCTRLW'b000_0000; // illegal instruction
17'b0010011_0110100_001: BMUControlsD = `BMUCTRLW'b100_0001; // binvi
17'b0010011_0110101_001: if (`XLEN == 64)
BMUControlsD = `BMUCTRLW'b100_0001; // binvi (rv64)
else
BMUControlsD = `BMUCTRLW'b000_0000; // illegal instruction
17'b0010011_0010100_001: BMUControlsD = `BMUCTRLW'b110_0001; // bseti
17'b0010011_0010101_001: if (`XLEN == 64)
BMUControlsD = `BMUCTRLW'b110_0001; // bseti
else
BMUControlsD = `BMUCTRLW'b000_0000; // illegal instruction
17'b0110011_0100100_001: BMUControlsD = `BMUCTRLW'b111_0001; // bclr
17'b0110011_0100100_101: BMUControlsD = `BMUCTRLW'b101_0001; // bext
17'b0110011_0110100_001: BMUControlsD = `BMUCTRLW'b100_0001; // binv
17'b0110011_0010100_001: BMUControlsD = `BMUCTRLW'b110_0001; // bset
17'b0?1?011_0?0000?_?01: BMUControlsD = `BMUCTRLW'b001_0000; // sra, srai, srl, srli, sll, slli
17'b0110011_0000101_0??: BMUControlsD = `BMUCTRLW'b000_0010; // ZBC instruction
17'b0110011_0010000_?01: BMUControlsD = `BMUCTRLW'b001_1000; // slli.uw
17'b0110011_0010000_010: BMUControlsD = `BMUCTRLW'b000_1000; // sh1add
17'b0110011_0010000_100: BMUControlsD = `BMUCTRLW'b000_1000; // sh2add
17'b0110011_0010000_110: BMUControlsD = `BMUCTRLW'b000_1000; // sh3add
17'b0110011_0000100_000: BMUControlsD = `BMUCTRLW'b000_1000; // sh3add
default: BMUControlsD = {Funct3D, {4'b0}}; // not B instruction or shift
endcase
// Unpack Control Signals