Verilog Code For Alu
Verilog Code For Alu
module arithmetic(d_out,A,B,cout,arithmetic_unit,s0,s1,c0,M);
inout [3:0] d_out;
output cout;
input s0,s1,c0,M,arithmetic_unit;
input [3:0] A,B;
wire [3:0] d_out;
reg cout;
wire s0,s1,c0,M,arithmetic_unit;
wire [3:0] A,B;
wire [3:0]D1;
wire D0;
wire [3:0]L1;
wire L0;
wire [3:0]K1;
wire K0;
reg [3:0] d_out2;
reg [3:0] temp;
reg en;
assign {D0,D1} = A + B;
assign {L0,L1} = (A + (~B));
assign {K0,K1} = ((~A) + B);
assign d_out = d_out2;
always @(s0,s1,c0,arithmetic_unit)
begin
if(arithmetic_unit)
begin
if(s1 == 1'b0 & s0 == 1'b0 & c0 == 1'b0)
begin
d_out2 = A;
end
else if(s1 == 1'b0 & s0 == 1'b0 & c0 == 1'b1)
begin
d_out2 = A + 1'b1;
end
else if(s1 == 1'b0 & s0 == 1'b1 & c0 == 1'b0)
begin
d_out2 = D1;
cout = D0;
end
else if(s1 == 1'b0 & s0 == 1'b1 & c0 == 1'b1)
begin
d_out2 = D1 + 1'b1;
cout = D0;
end
else if(s1 == 1'b1 & s0 == 1'b0 & c0 == 1'b0)
begin
d_out2 = L1;
cout = L0;
end
else if(s1 == 1'b1 & s0 == 1'b0 & c0 == 1'b1)
begin
d_out2 = L1 + 1'b1;
cout = L0;
end
else if(s1 == 1'b1 & s0 == 1'b1 & c0 == 1'b0)
begin
d_out2 = K1;
cout = K0;
end
else
begin
d_out2 = K1 + 1'b1;
cout = K0;
end
end
else
begin
d_out2 = 4'b0000;
end
end
endmodule