module rca3( a, b, cin, cout, sum); input [2:0] a, b; input cin; output [2:0] sum; output cout; wire [1:0] m; fa g1 (.cout(m[0]), .sum(sum[0]), .a(a[0]), .b(b[0]), .cin(cin)); fa g2 (.cout(m[1]), .sum(sum[1]), .a(a[1]), .b(b[1]), .cin(m[0]) ); fa g3 (.cout(cout), .sum(sum[2]), .a(a[2]), .b(b[2]), .cin(m[1]) ); endmodule `timescale 1ns / 1ns module rca3_tb; reg[2:0] a, b; reg cin; wire [2:0] sum; wire cout; wire [3:0] res; assign res = { cout, sum }; rca3 uu ( a, b, cin, cout, sum ); initial begin a = 2; b= 4; cin = 0; #10 a = 3; b = 3; cin = 1; #10 a= 5; b =6; cin = 1; #10 a= 7; b = 7; cin = 1; #10 $stop; end initial $monitor($time, "ns, a=%d, b=%d, cin = %d, addition result = %d", a, b, cin, res); endmodule