-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathControlUnit.v
146 lines (118 loc) · 2.9 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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
module ControlUnit (opcode,RegDst,branch,Memread,MemtoReg,ALUop,MemWrite,AluSrc,RegWrite, reset);
input [5:0] opcode;
input reset;
output reg RegDst,branch,Memread,MemtoReg,MemWrite,AluSrc,RegWrite;
output reg [3:0] ALUop;
parameter R_type=6'b000000;
parameter lw=6'b100011;
parameter sw=6'b101011;
parameter beq=6'b000100;
parameter addi = 6'b001000; //aluop same as sw and lw
parameter andi = 6'b001100; //aluop 0011
parameter ori = 6'b001101;//aluop 0100
parameter slti = 6'b001010;//aluop 0101
always @(posedge reset)
begin
RegDst <= 1'b0;
branch <= 1'b0;
Memread <= 1'b0;
MemtoReg <= 1'b0;
ALUop <= 4'b0000;
MemWrite <= 1'b0;
AluSrc <= 1'b0;
RegWrite <= 1'b0;
end
always@(opcode)
begin
case (opcode)
R_type:
begin
RegDst<=1 ;
branch<=0 ;
Memread<=0 ;
MemtoReg<=0 ;
MemWrite<=0 ;
AluSrc<=0 ;
RegWrite<=1 ;
ALUop<=4'b0010 ;
end
lw:
begin
RegDst<=0 ;
branch<=0 ;
Memread<=1 ;
MemtoReg<=1 ;
MemWrite<=0 ;
AluSrc<=1 ;
RegWrite<=1 ;
ALUop<=4'b0000 ;
end
sw:
begin
//RegDst<=1'bx ;
branch<=0 ;
Memread<=0 ;
MemtoReg<=0 ;
MemWrite<=1 ;
AluSrc<=1 ;
RegWrite<=0 ;
ALUop<=4'b0000 ;
end
beq:
begin
//RegDst<=1'bx ;
branch<= 1;
Memread<=0 ;
MemtoReg<=0 ;
MemWrite<=0 ;
AluSrc<=0 ;
RegWrite<=0 ;
ALUop<=4'b0001 ;
end
addi:
begin
RegDst<=0 ;
branch<=0 ;
Memread<=0 ;
MemtoReg<=0 ;
MemWrite<=0 ;
AluSrc<=1 ;
RegWrite<=1 ;
ALUop<=4'b0000 ;
end
andi:
begin
RegDst<=0 ;
branch<=0 ;
Memread<=0 ;
MemtoReg<=0 ;
MemWrite<=0 ;
AluSrc<=1 ;
RegWrite<=1 ;
ALUop<=4'b0011 ;
end
ori:
begin
RegDst<=0 ;
branch<=0 ;
Memread<=0 ;
MemtoReg<=0 ;
MemWrite<=0 ;
AluSrc<=1 ;
RegWrite<=1 ;
ALUop<=4'b0100 ;
end
slti:
begin
RegDst<=0 ;
branch<=0 ;
Memread<=0 ;
MemtoReg<=0 ;
MemWrite<=0 ;
AluSrc<=1 ;
RegWrite<=1 ;
ALUop<=4'b0101 ;
end
endcase
end
endmodule