mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	bmuctrl checks for illegal zbs-style instructions
This commit is contained in:
		
							parent
							
								
									370ff54875
								
							
						
					
					
						commit
						a1570a88c9
					
				@ -63,18 +63,39 @@ module bmuctrl(
 | 
				
			|||||||
  // Main Instruction Decoder
 | 
					  // Main Instruction Decoder
 | 
				
			||||||
  always_comb
 | 
					  always_comb
 | 
				
			||||||
    casez({OpD, Funct7D, Funct3D})
 | 
					    casez({OpD, Funct7D, Funct3D})
 | 
				
			||||||
    // ALUSelect_zbsD
 | 
					    // ALUSelect_BSelect
 | 
				
			||||||
      17'b0010011_010010?_001: BMUControlsD = `BMUCTRLW'b111_0001;    // bclri
 | 
					      17'b0010011_0100100_001:   BMUControlsD = `BMUCTRLW'b111_0001;  // bclri
 | 
				
			||||||
      17'b0010011_010010?_101: BMUControlsD = `BMUCTRLW'b101_0001;    // bexti
 | 
					      17'b0010011_0100101_001: if (`XLEN == 64)
 | 
				
			||||||
      17'b0010011_011010?_001: BMUControlsD = `BMUCTRLW'b100_0001;    // binvi
 | 
					                                 BMUControlsD = `BMUCTRLW'b111_0001;  // bclri (rv64)
 | 
				
			||||||
      17'b0010011_001010?_001: BMUControlsD = `BMUCTRLW'b110_0001;    // bseti
 | 
					                               else
 | 
				
			||||||
      17'b0110011_010010?_001: BMUControlsD = `BMUCTRLW'b111_0001;    // bclr
 | 
					                                 BMUControlsD = `BMUCTRLW'b000_0000;  // illegal instruction
 | 
				
			||||||
      17'b0110011_010010?_101: BMUControlsD = `BMUCTRLW'b101_0001;    // bext
 | 
					      17'b0010011_0100100_101:   BMUControlsD = `BMUCTRLW'b101_0001;  // bexti
 | 
				
			||||||
      17'b0110011_011010?_001: BMUControlsD = `BMUCTRLW'b100_0001;    // binv
 | 
					      17'b0010011_0100101_101: if (`XLEN == 64)
 | 
				
			||||||
      17'b0110011_001010?_001: BMUControlsD = `BMUCTRLW'b110_0001;    // bset
 | 
					                                 BMUControlsD = `BMUCTRLW'b101_0001;  // bexti (rv64)
 | 
				
			||||||
      17'b0?1?011_0?0000?_?01: BMUControlsD = `BMUCTRLW'b001_0000;    // sra, srai, srl, srli, sll, slli
 | 
					                               else
 | 
				
			||||||
      17'b0110011_0000101_???: BMUControlsD = `BMUCTRLW'b001_0010;    // ZBC instruction
 | 
					                                 BMUControlsD = `BMUCTRLW'b000_0000;  // illegal instruction
 | 
				
			||||||
      default:                 BMUControlsD = {Funct3D, {4'b0}};      // not B instruction or shift
 | 
					      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
 | 
					    endcase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Unpack Control Signals
 | 
					  // Unpack Control Signals
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user