forked from Github_Repos/cvw
bmuctrl checks for illegal zbs-style instructions
This commit is contained in:
parent
0bab3bec3d
commit
9bf11471aa
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user