blob: 4e0603c4ef65b0b9ee989eec3ef354abfbddde84 (
plain)
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
|
`timescale 1ns / 1ps
/**
ALU Unit
*/
module alu ( input [4:0] alu_ctl,
input [31:0] a_in, b_in,
output reg [31:0] result,
output zero_flag );
assign zero_flag = (result == 0);
always @(alu_ctl, a_in, b_in) begin // reevaluate if these change
case (alu_ctl)
0: result = a_in & b_in; // bitwise and
1: result = a_in | b_in; // bitwise or
2: result = a_in + b_in; // addition
6: result = a_in - b_in; // substraction
7: result = a_in < b_in ? 1 : 0; // set on less than
8: result = ~(a_in | b_in); // bitwise nor
9: result = a_in ^ b_in; // bitwise xor
default: result = 0;
endcase
end
endmodule
|