-
Notifications
You must be signed in to change notification settings - Fork 0
/
alu.sv
26 lines (24 loc) · 882 Bytes
/
alu.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
module alu
(
input logic [ 3:0] aluop,
input logic [31:0] opr_a,
input logic [31:0] opr_b,
output logic [31:0] opr_res
);
always_comb
begin
case(aluop)
4'b0000: opr_res = opr_a + opr_b;
4'b0001: opr_res = opr_a - opr_b;
4'b0010: opr_res = opr_a << opr_b;
4'b0011: opr_res = opr_a < opr_b;
4'b0100: opr_res = $unsigned(opr_a) < $unsigned(opr_b);
4'b0101: opr_res = opr_a ^ opr_b;
4'b0110: opr_res = opr_a >> opr_b;
// 4'b0111: opr_res = opr_a + opr_b; // SRA to be discussed
4'b1000: opr_res = opr_a | opr_b;
4'b1001: opr_res = opr_a & opr_b;
4'b1010: opr_res = opr_b; // pass opr_b
endcase
end
endmodule