mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	more comprehensive illegal b instr. check
This commit is contained in:
		
							parent
							
								
									5853854f52
								
							
						
					
					
						commit
						6ee15c6e2c
					
				| @ -80,68 +80,103 @@ module bmuctrl( | ||||
|     casez({OpD, Funct7D, Funct3D}) | ||||
|     // ALUSelect_BSelect_ZBBSelect_BRegWrite_BALUSrcB_BW64_BALUOp_BSubArithD_RotateD_MaskD_PreShiftD_IllegalBitmanipInstrD
 | ||||
|       // ZBS
 | ||||
|       17'b0010011_0100100_001:   BMUControlsD = `BMUCTRLW'b111_01_000_1_1_0_1_1_0_1_0_0;  // bclri
 | ||||
|       17'b0010011_0100101_001: if (`XLEN == 64) | ||||
|       17'b0010011_0100100_001: if (`ZBS_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b111_01_000_1_1_0_1_1_0_1_0_0;  // bclri
 | ||||
|       17'b0010011_0100101_001: if (`XLEN == 64 & `ZBS_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b111_01_000_1_1_0_1_1_0_1_0_0;  // bclri (rv64)
 | ||||
|       17'b0010011_0100100_101:   BMUControlsD = `BMUCTRLW'b101_01_000_1_1_0_1_1_0_1_0_0;  // bexti
 | ||||
|       17'b0010011_0100101_101: if (`XLEN == 64) | ||||
|       17'b0010011_0100100_101: if (`ZBS_SUPPORTED & `ZBS_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b101_01_000_1_1_0_1_1_0_1_0_0;  // bexti
 | ||||
|       17'b0010011_0100101_101: if (`XLEN == 64 & `ZBS_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b101_01_000_1_1_0_1_1_0_1_0_0;  // bexti (rv64)
 | ||||
|       17'b0010011_0110100_001:   BMUControlsD = `BMUCTRLW'b100_01_000_1_1_0_1_0_0_1_0_0;  // binvi
 | ||||
|       17'b0010011_0110101_001: if (`XLEN == 64) | ||||
|       17'b0010011_0110100_001: if (`ZBS_SUPPORTED & `ZBS_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b100_01_000_1_1_0_1_0_0_1_0_0;  // binvi
 | ||||
|       17'b0010011_0110101_001: if (`XLEN == 64 & `ZBS_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b100_01_000_1_1_0_1_0_0_1_0_0;  // binvi (rv64)
 | ||||
|       17'b0010011_0010100_001:   BMUControlsD = `BMUCTRLW'b110_01_000_1_1_0_1_0_0_1_0_0;  // bseti
 | ||||
|       17'b0010011_0010101_001: if (`XLEN == 64)  | ||||
|       17'b0010011_0010100_001: if (`ZBS_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b110_01_000_1_1_0_1_0_0_1_0_0;  // bseti
 | ||||
|       17'b0010011_0010101_001: if (`XLEN == 64 & `ZBS_SUPPORTED)  | ||||
|                                  BMUControlsD = `BMUCTRLW'b110_01_000_1_1_0_1_0_0_1_0_0;  // bseti (rv64)
 | ||||
|       17'b0110011_0100100_001:   BMUControlsD = `BMUCTRLW'b111_01_000_1_0_0_1_1_0_1_0_0;  // bclr
 | ||||
|       17'b0110011_0100100_101:   BMUControlsD = `BMUCTRLW'b101_01_000_1_0_0_1_1_0_1_0_0;  // bext
 | ||||
|       17'b0110011_0110100_001:   BMUControlsD = `BMUCTRLW'b100_01_000_1_0_0_1_0_0_1_0_0;  // binv
 | ||||
|       17'b0110011_0010100_001:   BMUControlsD = `BMUCTRLW'b110_01_000_1_0_0_1_0_0_1_0_0;  // bset
 | ||||
|       17'b0110011_0?0000?_?01:   BMUControlsD = `BMUCTRLW'b001_00_000_1_0_0_1_0_0_0_0_0;  // sra, srl, sll
 | ||||
|       17'b0010011_0?0000?_?01:   BMUControlsD = `BMUCTRLW'b001_00_000_1_1_0_1_0_0_0_0_0;  // srai, srli, slli
 | ||||
|       17'b0111011_0?0000?_?01:   BMUControlsD = `BMUCTRLW'b001_00_000_1_0_1_1_0_0_0_0_0;  // sraw, srlw, sllw
 | ||||
|       17'b0011011_0?0000?_?01:   BMUControlsD = `BMUCTRLW'b001_00_000_1_1_1_1_0_0_0_0_0;  // sraiw, srliw, slliw
 | ||||
|       17'b0110011_0100100_001: if (`ZBS_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b111_01_000_1_0_0_1_1_0_1_0_0;  // bclr
 | ||||
|       17'b0110011_0100100_101: if (`ZBS_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b101_01_000_1_0_0_1_1_0_1_0_0;  // bext
 | ||||
|       17'b0110011_0110100_001: if (`ZBS_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b100_01_000_1_0_0_1_0_0_1_0_0;  // binv
 | ||||
|       17'b0110011_0010100_001: if (`ZBS_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b110_01_000_1_0_0_1_0_0_1_0_0;  // bset
 | ||||
|       17'b0110011_0?0000?_?01: if (`ZBS_SUPPORTED | `ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b001_00_000_1_0_0_1_0_0_0_0_0;  // sra, srl, sll
 | ||||
|       17'b0010011_0?0000?_?01: if (`ZBS_SUPPORTED | `ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b001_00_000_1_1_0_1_0_0_0_0_0;  // srai, srli, slli
 | ||||
|       17'b0111011_0?0000?_?01: if (`ZBS_SUPPORTED | `ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b001_00_000_1_0_1_1_0_0_0_0_0;  // sraw, srlw, sllw
 | ||||
|       17'b0011011_0?0000?_?01: if (`ZBS_SUPPORTED | `ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b001_00_000_1_1_1_1_0_0_0_0_0;  // sraiw, srliw, slliw
 | ||||
|       // ZBC
 | ||||
|       17'b0110011_0000101_0??:   BMUControlsD = `BMUCTRLW'b000_11_000_1_0_0_1_0_0_0_0_0;  // ZBC instruction
 | ||||
|       17'b0110011_0000101_0??: if (`ZBC_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_11_000_1_0_0_1_0_0_0_0_0;  // ZBC instruction
 | ||||
|       // ZBA
 | ||||
|       17'b0110011_0010000_010:   BMUControlsD = `BMUCTRLW'b000_01_000_1_0_0_1_0_0_0_1_0;  // sh1add
 | ||||
|       17'b0110011_0010000_100:   BMUControlsD = `BMUCTRLW'b000_01_000_1_0_0_1_0_0_0_1_0;  // sh2add
 | ||||
|       17'b0110011_0010000_110:   BMUControlsD = `BMUCTRLW'b000_01_000_1_0_0_1_0_0_0_1_0;  // sh3add
 | ||||
|       17'b0111011_0010000_010:   BMUControlsD = `BMUCTRLW'b000_01_000_1_0_1_1_0_0_0_1_0;  // sh1add.uw
 | ||||
|       17'b0111011_0010000_100:   BMUControlsD = `BMUCTRLW'b000_01_000_1_0_1_1_0_0_0_1_0;  // sh2add.uw
 | ||||
|       17'b0111011_0010000_110:   BMUControlsD = `BMUCTRLW'b000_01_000_1_0_1_1_0_0_0_1_0;  // sh3add.uw
 | ||||
|       17'b0111011_0000100_000:   BMUControlsD = `BMUCTRLW'b000_01_000_1_0_1_1_0_0_0_0_0;  // add.uw
 | ||||
|       17'b0011011_000010?_001:   BMUControlsD = `BMUCTRLW'b001_01_000_1_1_1_1_0_0_0_0_0;  // slli.uw
 | ||||
|       17'b0110011_0010000_010: if (`ZBA_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_01_000_1_0_0_1_0_0_0_1_0;  // sh1add
 | ||||
|       17'b0110011_0010000_100: if (`ZBA_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_01_000_1_0_0_1_0_0_0_1_0;  // sh2add
 | ||||
|       17'b0110011_0010000_110: if (`ZBA_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_01_000_1_0_0_1_0_0_0_1_0;  // sh3add
 | ||||
|       17'b0111011_0010000_010: if (`XLEN == 64 & `ZBA_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_01_000_1_0_1_1_0_0_0_1_0;  // sh1add.uw
 | ||||
|       17'b0111011_0010000_100: if (`XLEN == 64 & `ZBA_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_01_000_1_0_1_1_0_0_0_1_0;  // sh2add.uw
 | ||||
|       17'b0111011_0010000_110: if (`XLEN == 64 & `ZBA_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_01_000_1_0_1_1_0_0_0_1_0;  // sh3add.uw
 | ||||
|       17'b0111011_0000100_000: if (`XLEN == 64 & `ZBA_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_01_000_1_0_1_1_0_0_0_0_0;  // add.uw
 | ||||
|       17'b0011011_000010?_001: if (`XLEN == 64 & `ZBA_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b001_01_000_1_1_1_1_0_0_0_0_0;  // slli.uw
 | ||||
|       // ZBB
 | ||||
|       17'b0110011_0110000_001:   BMUControlsD = `BMUCTRLW'b001_01_111_1_0_0_1_0_1_0_0_0;  // rol
 | ||||
|       17'b0111011_0110000_001:   BMUControlsD = `BMUCTRLW'b001_00_111_1_0_1_1_0_1_0_0_0;  // rolw
 | ||||
|       17'b0110011_0110000_101:   BMUControlsD = `BMUCTRLW'b001_01_111_1_0_0_1_0_1_0_0_0;  // ror
 | ||||
|       17'b0111011_0110000_101:   BMUControlsD = `BMUCTRLW'b001_00_111_1_0_1_1_0_1_0_0_0;  // rorw
 | ||||
|       17'b0010011_0110000_101:   BMUControlsD = `BMUCTRLW'b001_00_111_1_1_0_1_0_1_0_0_0;  // rori (rv32)
 | ||||
|       17'b0010011_0110001_101: if (`XLEN == 64)  | ||||
|       17'b0110011_0110000_001: if (`ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b001_01_111_1_0_0_1_0_1_0_0_0;  // rol
 | ||||
|       17'b0111011_0110000_001: if (`XLEN == 64 & `ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b001_00_111_1_0_1_1_0_1_0_0_0;  // rolw
 | ||||
|       17'b0110011_0110000_101: if (`ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b001_01_111_1_0_0_1_0_1_0_0_0;  // ror
 | ||||
|       17'b0111011_0110000_101: if (`XLEN == 64 & `ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b001_00_111_1_0_1_1_0_1_0_0_0;  // rorw
 | ||||
|       17'b0010011_0110000_101: if (`ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b001_00_111_1_1_0_1_0_1_0_0_0;  // rori (rv32)
 | ||||
|       17'b0010011_0110001_101: if (`XLEN == 64 & `ZBB_SUPPORTED)  | ||||
|                                  BMUControlsD = `BMUCTRLW'b001_00_111_1_1_0_1_0_1_0_0_0;  // rori (rv64)
 | ||||
|       17'b0011011_0110000_101: if (`XLEN == 64)  | ||||
|       17'b0011011_0110000_101: if (`XLEN == 64 & `ZBB_SUPPORTED)  | ||||
|                                  BMUControlsD = `BMUCTRLW'b001_00_111_1_1_1_1_0_1_0_0_0;  // roriw 
 | ||||
|       17'b0010011_0110000_001: if (Rs2D[2]) | ||||
|       17'b0010011_0110000_001: if (Rs2D[2] & `ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_10_001_1_1_0_1_0_0_0_0_0;  // sign extend instruction
 | ||||
|                                else  | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_10_000_1_1_0_1_0_0_0_0_0;  // count instruction
 | ||||
|       17'b0011011_0110000_001:   BMUControlsD = `BMUCTRLW'b000_10_000_1_1_1_1_0_0_0_0_0;  // count word instruction
 | ||||
|       17'b0111011_0000100_100: if (`XLEN == 64) | ||||
|       17'b0011011_0110000_001: if (`XLEN == 64 & `ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_10_000_1_1_1_1_0_0_0_0_0;  // count word instruction
 | ||||
|       17'b0111011_0000100_100: if (`XLEN == 64 & `ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_10_001_1_0_0_1_0_0_0_0_0;  // zexth (rv64)
 | ||||
|       17'b0110011_0000100_100: if (`XLEN == 32) | ||||
|       17'b0110011_0000100_100: if (`XLEN == 32 & `ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_10_001_1_1_0_1_0_0_0_0_0;  // zexth (rv32)
 | ||||
|       17'b0110011_0100000_111:   BMUControlsD = `BMUCTRLW'b111_01_111_1_0_0_1_1_0_0_0_0;  // andn
 | ||||
|       17'b0110011_0100000_110:   BMUControlsD = `BMUCTRLW'b110_01_111_1_0_0_1_1_0_0_0_0;  // orn
 | ||||
|       17'b0110011_0100000_100:   BMUControlsD = `BMUCTRLW'b100_01_111_1_0_0_1_1_0_0_0_0;  // xnor
 | ||||
|       17'b0010011_0110101_101: if (`XLEN == 64)  | ||||
|       17'b0110011_0100000_111: if (`ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b111_01_111_1_0_0_1_1_0_0_0_0;  // andn
 | ||||
|       17'b0110011_0100000_110: if (`ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b110_01_111_1_0_0_1_1_0_0_0_0;  // orn
 | ||||
|       17'b0110011_0100000_100: if (`ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b100_01_111_1_0_0_1_1_0_0_0_0;  // xnor
 | ||||
|       17'b0010011_0110101_101: if (`XLEN == 64 & `ZBB_SUPPORTED)  | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_10_010_1_1_0_1_0_0_0_0_0;  // rev8 (rv64)
 | ||||
|       17'b0010011_0110100_101: if (`XLEN == 32)  | ||||
|       17'b0010011_0110100_101: if (`XLEN == 32 & `ZBB_SUPPORTED)  | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_10_010_1_1_0_1_0_0_0_0_0;  // rev8 (rv32)
 | ||||
|       17'b0010011_0010100_101:   BMUControlsD = `BMUCTRLW'b000_10_010_1_1_0_1_0_0_0_0_0;  // orc.b
 | ||||
|       17'b0110011_0000101_110:   BMUControlsD = `BMUCTRLW'b000_10_100_1_0_0_1_0_0_0_0_0;  // max
 | ||||
|       17'b0110011_0000101_111:   BMUControlsD = `BMUCTRLW'b000_10_100_1_0_0_1_0_0_0_0_0;  // maxu
 | ||||
|       17'b0110011_0000101_100:   BMUControlsD = `BMUCTRLW'b000_10_011_1_0_0_1_0_0_0_0_0;  // min
 | ||||
|       17'b0110011_0000101_101:   BMUControlsD = `BMUCTRLW'b000_10_011_1_0_0_1_0_0_0_0_0;  // minu
 | ||||
|       17'b0010011_0010100_101: if (`ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_10_010_1_1_0_1_0_0_0_0_0;  // orc.b
 | ||||
|       17'b0110011_0000101_110: if (`ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_10_100_1_0_0_1_0_0_0_0_0;  // max
 | ||||
|       17'b0110011_0000101_111: if (`ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_10_100_1_0_0_1_0_0_0_0_0;  // maxu
 | ||||
|       17'b0110011_0000101_100: if (`ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_10_011_1_0_0_1_0_0_0_0_0;  // min
 | ||||
|       17'b0110011_0000101_101: if (`ZBB_SUPPORTED) | ||||
|                                  BMUControlsD = `BMUCTRLW'b000_10_011_1_0_0_1_0_0_0_0_0;  // minu
 | ||||
|     endcase | ||||
|   end | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user