`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] CO_REG ;

    lca_1 lca_1_0(
    . A  (A_in[0]) ,
	. B   (B_in[0]),
	. c_1 (C_1),
	. CO  (CO_REG[0]),
	. S   (S[0])
);
    lca_1 lca_1_1(
    . A  (A_in[1]) ,
	. B   (B_in[1]),
	. c_1 (CO_REG[0]),
	. CO  (CO_REG[1]),
	. S   (S[1])
);
    lca_1 lca_1_2(
    . A  (A_in[2]) ,
	. B   (B_in[2]),
	. c_1 (CO_REG[1]),
	. CO  (CO_REG[2]),
	. S   (S[2])
);
    lca_1 lca_1_3(
    . A  (A_in[3]) ,
	. B   (B_in[3]),
	. c_1 (CO_REG[2]),
	. CO  (CO_REG[3]),
	. S   (S[3])
);

assign CO = CO_REG[3];

endmodule

module lca_1(
    input     A   ,
	input     B   ,
	input     c_1 ,
	output    CO  ,
	output    S   

);

wire    P ;
wire    G ;

assign   P = A ^ B   ;
assign   G = A & B   ;

assign   CO= G | (P & c_1) ;
assign   S = P ^ c_1       ;

endmodule

超前进位加法器 和普通加法器写法的不同之处在于,单bit加法器是如何构造的,不管多少位 ,例化方式都是一样的。