使用动态生成语句:generate—for,实现重复例化;

`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, p;
    wire [3:0] c_temp, pc_temp;
    genvar i;
    generate
        for(i=0;i<4;i=i+1)
            begin:some
                xor p_gate (p[i], A_in[i], B_in[i]);
                and g_gate (g[i], A_in[i], B_in[i]);
                
                if(i == 0) begin
                    and pc_gate (pc_temp[i], p[i], C_1);
                    xor s_gate (S[i], p[i], C_1);
                end
                else begin
                    and pc_gate (pc_temp[i], p[i], c_temp[i-1]);
                    xor s_gate (S[i], p[i], c_temp[i-1]);
                end
                
                or c_gate (c_temp[i], g[i], pc_temp[i]);
                
            end
    endgenerate
    
    assign CO = c_temp[3];
    
endmodule