`timescale 1ns/1ns module add_half( input A , input B , output wire S , output wire C ); assign S = A ^ B; assign C = A & B; endmodule /***************************************************************/ module add_full( input A , input B , input Ci , output wire S , output wire Co ); // half_add wire C1; wire S1; // full_add wire C_F; wire S_F; add_half u1_add_half( .A (A ), .B (B ), .S (S1 ), // S1 = A ^ B .C (C1 ) // C1 = A & B ); add_half u2_add_half( .A (S1 ), .B (Ci ), .S (S_F ), // S_F = S1 ^ Ci .C (C_F ) // C_F = S1 & Ci ); assign S = S_F; assign Co = C_F + C1; endmodule