-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcontroller.sv
29 lines (23 loc) · 1009 Bytes
/
controller.sv
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
module controller(input logic clk,
input logic reset,
input logic [6:0] op,
input logic [2:0] funct3,
input logic funct7b5,
input logic zero, cout, overflow, sign,
output logic [2:0] immsrc,
output logic [1:0] alusrca, alusrcb,
output logic [1:0] resultsrc,
output logic adrsrc,
output logic [3:0] alucontrol,
output logic irwrite, pcwrite,
output logic regwrite, memwrite);
logic beq, bne, blt, bge, bltu, bgeu, branch, pcupdate;
logic [1:0] aluop;
fsm MainFSM(clk, reset, op, branch, pcupdate, regwrite,
memwrite, irwrite, resultsrc, alusrcb, alusrca, adrsrc, aluop);
aluDec AluDecoder(aluop, op[5], funct7b5, funct3, alucontrol);
instrDec InstrDecoder(op, immsrc);
branchDec BranchDecoder(op, funct3, branch, beq, bne, blt, bge, bltu, bgeu);
assign pcwrite = (beq & zero) | (bne & ~zero) | (bgeu & cout) | (bltu & ~cout)
| (bge & (sign == overflow)) | (blt & (sign != overflow)) | pcupdate;
endmodule