-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathALUCU.v
34 lines (21 loc) · 1.16 KB
/
ALUCU.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
module ALUCU(ALUOp, func, ALUCtr);
input [2:0] ALUOp;
input [5:0] func;
output wire [2:0] ALUCtr;
wire [2:0] ALUCtr_temp;
wire [2:0] ALUCtr_sll;
wire [2:0] ALUCtr_adu;
wire [2:0] ALUCtemp;
wire [2:0] ALUCtremp;
wire Ffunc;
wire self;
assign Ffunc = (func[5] || func[4] || func[3] || func[2] || func[1] || func[0] || (~ALUOp[2]));
assign ALUCtr_sll = 3'b101;
assign self = (func[5] && (~func[4]) && (~func[3]) && (~func[2]) && (~func[1]) && func[0] && ALUOp[2]);
assign ALUCtr_adu = 3'b010;
assign ALUCtr_temp[2] = (((~ALUOp[2]) && ALUOp[0]) || (ALUOp[2] && (~func[2]) && func[1] && (~func[0])));
assign ALUCtr_temp[1] = (((~ALUOp[2]) && (~(ALUOp[1] && ALUOp[0]))) | (ALUOp[2] && (~func[2]) & (~func[0])));
assign ALUCtr_temp[0] = ((ALUOp[2] && (~func[3]) && func[2] && (~func[1]) && func[0]) || (ALUOp[2] && func[3] && (~func[2]) && func[1] && (~func[0])));
mux_n #(.n(3)) mux_map_0(.sel(Ffunc), .src0(ALUCtr_sll), .src1(ALUCtr_temp), .z(ALUCtremp));
mux_n #(.n(3)) mux_map_1(.sel(self), .src0(ALUCtremp), .src1(ALUCtr_adu), .z(ALUCtr));
endmodule