-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathALU_Ctrl.v
More file actions
83 lines (57 loc) · 1.45 KB
/
ALU_Ctrl.v
File metadata and controls
83 lines (57 loc) · 1.45 KB
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Author:0711282 邱頎霖
module ALU_Ctrl(
funct_i,
ALUOp_i,
ALUCtrl_o,
);
//I/O ports
input [6-1:0] funct_i; //function code
input [3-1:0] ALUOp_i; // aluop
output [4-1:0] ALUCtrl_o; // 4 bit alu_controi to alu
//Internal Signals
reg [4-1:0] ALUCtrl_o;
//Select exact operation
always @( * ) begin
if(ALUOp_i==3'b000)begin
if(funct_i==6'b100001)begin //addu // ok
ALUCtrl_o <= 4'b0010; //ADD
end
else if(funct_i==6'b100011)begin //subu
ALUCtrl_o <= 4'b0110; //SUB
end
else if(funct_i==6'b100100)begin //and
ALUCtrl_o <= 4'b0000; //AND
end
else if(funct_i==6'b100101)begin //or
ALUCtrl_o <= 4'b0001; //OR
end
else if(funct_i==6'b101010)begin //slt
ALUCtrl_o <= 4'b0111; //SLT
end
else if(funct_i==6'b000011)begin //sra // ok
ALUCtrl_o <= 4'b1110;
end
else if(funct_i==6'b000111)begin //srav // ok
ALUCtrl_o <= 4'b1111;
end
end
else if(ALUOp_i==3'b001)begin //addi
ALUCtrl_o <= 4'b0010; //ADD
end
else if(ALUOp_i==3'b010)begin
ALUCtrl_o <= 4'b0101; //sltiu
end
else if(ALUOp_i==3'b110)begin
ALUCtrl_o <= 4'b1001; //bne
end
else if(ALUOp_i==3'b100)begin
ALUCtrl_o <= 4'b0011; //beq
end
else if(ALUOp_i==3'b011)begin
ALUCtrl_o <= 4'b1011; //LUI //ok
end
else if(ALUOp_i==3'b111)begin
ALUCtrl_o <= 4'b0001; //ori //ok
end
end
endmodule