-
Notifications
You must be signed in to change notification settings - Fork 0
/
ALU_Decoder.v
26 lines (23 loc) · 1.4 KB
/
ALU_Decoder.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
module ALU_Decoder(ALUOp,funct3,funct7,op,ALUControl);
input [1:0]ALUOp;
input [2:0]funct3;
input [6:0]funct7,op;
output [2:0]ALUControl;
// Method 1
// assign ALUControl = (ALUOp == 2'b00) ? 3'b000 :
// (ALUOp == 2'b01) ? 3'b001 :
// (ALUOp == 2'b10) ? ((funct3 == 3'b000) ? ((({op[5],funct7[5]} == 2'b00) | ({op[5],funct7[5]} == 2'b01) | ({op[5],funct7[5]} == 2'b10)) ? 3'b000 : 3'b001) :
// (funct3 == 3'b010) ? 3'b101 :
// (funct3 == 3'b110) ? 3'b011 :
// (funct3 == 3'b111) ? 3'b010 : 3'b000) :
// 3'b000;
// Method 2
assign ALUControl = (ALUOp == 2'b00) ? 3'b000 :
(ALUOp == 2'b01) ? 3'b001 :
((ALUOp == 2'b10) & (funct3 == 3'b000) & ({op[5],funct7[5]} == 2'b11)) ? 3'b001 :
((ALUOp == 2'b10) & (funct3 == 3'b000) & ({op[5],funct7[5]} != 2'b11)) ? 3'b000 :
((ALUOp == 2'b10) & (funct3 == 3'b010)) ? 3'b101 :
((ALUOp == 2'b10) & (funct3 == 3'b110)) ? 3'b011 :
((ALUOp == 2'b10) & (funct3 == 3'b111)) ? 3'b010 :
3'b000 ;
endmodule