-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathControlUnit.v
98 lines (98 loc) · 1.78 KB
/
ControlUnit.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
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
module control_unit(OpCode, RegWrite, RegDst, AluSrc, AluOp, branch, MemWrite, MemRead, MemToReg, jump, arith);
input [5:0]OpCode;
output RegWrite, jump, branch, MemRead, MemWrite, AluSrc, arith;
output [1:0]RegDst;
output [2:0]AluOp;
output [1:0]MemToReg;
reg RegWrite, jump, branch, MemRead, MemWrite, AluSrc, arith;
reg [1:0]RegDst;
reg [2:0]AluOp;
reg [1:0]MemToReg;
always @(OpCode)
case(OpCode)
6'b000000 : begin//Rtype
RegWrite=1;
RegDst=2'b01;
AluSrc=0;
AluOp=3'b100;
branch=0;
MemWrite=0;
MemRead=0;
MemToReg=2'b00;
jump=0;
arith = 1'bx;
end
6'b001000 : begin//addi
RegWrite=1;
RegDst=2'b00;
AluSrc=1;
AluOp=3'b000;
branch=0;
MemWrite=0;
MemRead=0;
MemToReg=2'b00;
jump=0;
arith = 1;
end
6'b001100: begin//andi
RegWrite=1;
RegDst=2'b00;
AluSrc=1;
AluOp=3'b011;
branch=0;
MemWrite=0;
MemRead=0;
MemToReg=2'b00;
jump=0;
arith = 0;
end
6'b000100 : begin//beq
RegWrite=0;
RegDst=2'bxx;
AluSrc=0;
AluOp=3'b001;
branch=1;
MemWrite=0;
MemRead=0;
MemToReg=2'bxx;
jump=0;
arith = 1'b0;
end
6'b000011 : begin//jal
RegWrite=1;
RegDst=2'b10;
AluSrc=1'bx;
AluOp=3'bxxx;
branch=0;
MemWrite=0;
MemRead=0;
MemToReg=2'b10;
jump=1;
arith = 1'bx;
end
6'b100011 : begin//lw
RegWrite=1;
RegDst=2'b00;
AluSrc=1;
AluOp=3'b000;
branch=0;
MemWrite=0;
MemRead=1;
MemToReg=2'b01;
jump=0;
arith = 1'b1;
end
6'b101011 : begin//sw
RegWrite=0;
RegDst=2'b00;
AluSrc=1;
AluOp=3'b000;
branch=0;
MemWrite=1;
MemRead=0;
MemToReg=2'bxx;
jump=0;
arith = 1'b1;
end
endcase
endmodule