-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathControl.v
More file actions
124 lines (75 loc) · 1.53 KB
/
Control.v
File metadata and controls
124 lines (75 loc) · 1.53 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
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
module ControlPath(
instrWord,
RegDest,
RegWrite,
ALUSrc,
ALUOp1,
ALUOp0,
MemRead,
MemWrite,
MemToReg,
Branch
);
//Input
input wire[31:0] instrWord; // input being seen by module is 32 bits
//Output
output reg RegDest;
output reg RegWrite;
output reg ALUSrc;
output reg ALUOp1;
output reg ALUOp0;
output reg MemRead;
output reg MemWrite;
output reg MemToReg;
output reg Branch;
always @ (instrWord)
begin
// Rformat
if(instrWord[31:26] == 6'b000000 )begin // opcode for r format
RegDest = 1;
RegWrite = 1;
ALUSrc = 0;
ALUOp1 = 1;
ALUOp0 = 0;
MemRead = 0;
MemWrite = 0;
MemToReg = 0;
Branch = 0;
end
//lw
else if(instrWord[31:26] == 6'b100011 )begin //opcode for lw
RegDest = 0;
ALUSrc = 1;
MemToReg = 1;
RegWrite = 1;
MemRead = 1;
MemWrite = 0;
Branch = 0;
ALUOp1 = 0;
ALUOp0 = 0;
end
//sw
else if(instrWord[31:26] == 6'b101011)begin // opcode for sw
RegDest = 0; // x
ALUSrc = 1;
MemToReg = 0; //x
RegWrite = 0;
MemRead = 0;
MemWrite = 1;
Branch = 0;
ALUOp1 = 0;
ALUOp0 = 0;
end
else if(instrWord[31:26] !== 6'b000000 | 6'b100011 | 6'b101011) begin // instructions that will give dontcares
RegDest = 0;
ALUSrc = 0;
MemToReg = 0;
RegWrite = 0; //no ops dont write to reg
MemRead = 0;
MemWrite = 0; //no ops dont write to mem
Branch = 0;
ALUOp1 = 0;
ALUOp0 = 0;
end
end
endmodule