blob: 439df083b058375d7aa1330448e79ae22863cf79 (
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
27
28
29
|
module alu(
input wire [3:0] op,
input wire [63:0] in_x,
input wire [63:0] in_y,
output reg [63:0] out
);
always @* begin
case (op)
4'b0000: out = in_x & in_y; // and
4'b0001: out = in_x | in_y; // or
4'b0010: out = in_x + in_y; // add
4'b0011: out = in_x - in_y; // sub
4'b0100: out = $signed(in_x) >>> $signed(in_y); // sra signed
4'b0101: out = in_x < in_y; // stlu
4'b0110: out = in_x ^ in_y; // xor
4'b0111: out = in_x >> in_y; // srl
4'b1000: out = $signed(in_x) < $signed(in_y); // slt signed
4'b1001: out = in_x << in_y; // sll
4'b1010: out = ~(in_x | in_y); // nor
4'b1011: out = $signed(in_x) >= $signed(in_y); // sge
4'b1100: out = in_x >= in_y; // sgeu
4'b1101: out = in_x == in_y; // seq
4'b1110: out = in_x != in_y; // sne
4'b1111: out = 0; // invalid
endcase
end // always @ *
endmodule // alu
|