-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathALU.v
31 lines (27 loc) · 804 Bytes
/
ALU.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
`timescale 1ns / 1ps
module ALU (
input [31:0] in1,in2,
input[3:0] alu_control_signal, // generated by control unit
output reg [31:0] alu_result,
output reg zero_flag
);
always @(*)
begin
// Operating based on control signal
case(alu_control_signal)
4'b0000: alu_result = in1&in2;
4'b0001: alu_result = in1|in2;
4'b0010: alu_result = in1+in2;
4'b0100: alu_result = in1-in2;
4'b0011: alu_result = in1<<in2;
4'b0101: alu_result = in1>>in2;
4'b0110: alu_result = in1*in2;
4'b0111: alu_result = in1^in2;
endcase
// Setting Zero_flag if ALU_result is zero
if (alu_result == 0)
zero_flag = 1'b1;
else
zero_flag = 1'b0;
end
endmodule