`timescale 1ns/1ns
module lca_4(
input [3:0] A_in ,
input [3:0] B_in ,
input C_1 ,
output wire CO ,
output wire [3:0] S
);
wire [3:0] G;
wire [3:0] P;
wire [3:0] C;
genvar i;
generate
for(i = 0; i < 4; i = i + 1) begin
assign G[i] = A_in[i] & B_in[i];
assign P[i] = A_in[i] ^ B_in[i];
assign C[i] = (i == 0) ? (G[i] | (P[i] & C_1)) : (G[i] | (P[i] & C[i-1]));
assign S[i] = (i == 0) ? (P[i] ^ C_1) : (P[i] ^ C[i-1]);
end
endgenerate
assign CO = C[3];
endmodule