module full_adder(a, b, cin, s, cout); input a, b, cin; output s, cout; assign s = a^b^cin; assign cout = (a&b) | (b&cin) | (a&cin); endmodule module RCA(p, q, ci, r); input [3:0] p, q; input ci; output [4:0] r; wire [2:0] carry; full_adder fa0(p[0], q[0], ci, r[0], carry[0]); full_adder fa1(p[1], q[1], carry[0], r[1], carry[1]); full_adder fa2(p[2], q[2], carry[1], r[2], carry[2]); full_adder fa3(p[3], q[3], carry[2], r[3], r[4]); endmodule