-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathalu.v
75 lines (67 loc) · 1.26 KB
/
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
module alu ( out,z,
a,b,
alu_op
);
output reg [15:0] out;
output reg z;
input wire [15:0] a,b;
input wire [2:0] alu_op;
parameter ADD = 3'b000 ;
parameter SUB = 3'b001 ;
parameter SHR = 3'b010 ;// shift right a by b bits
parameter SHL = 3'b011 ;// shift left a by b bits
parameter NAND = 3'b100 ;
parameter OR = 3'b101 ;
parameter DIR = 3'b110 ;
parameter SAR = 3'b111 ;// shift arithmetic right
always@(*)
begin
case(alu_op)
ADD : begin
out <= a+b;
z <= (out==0);
end
SUB : begin
out <= a-b;
z <= (out==0);
end
SHR : begin
out <= a>>b;
z <= (out==0);
end
SHL : begin
out <= a<<b;
z <= (out==0);
end
NAND: begin
out <= ~(a&b);
z <= (out==0);
end
OR : begin
out <= a|b;
z <= (out==0);
end
DIR : begin
out <= a;
z <= (out==0);
end
SAR : begin
out <= a>>>b;
z <= (out==0);
end
default:begin
out <= 16'd0;
z <= 1'bz;
end
endcase
end
endmodule
module ALUOut(ALUOUT_OUT, ALUOUT_IN, clk);
output reg [15:0] ALUOUT_OUT;
input wire [15:0] ALUOUT_IN;
input wire clk;
always@(posedge clk)
begin
ALUOUT_OUT <= ALUOUT_IN;
end
endmodule