module fa( a, b, cin, cout, sum); input a, b, cin; output cout, sum; wire m, n, p; ha g1 (.cout(n), .sum(m), .a(a), .b(b) ); ha g2 (.cout(p), .sum(sum), .a(cin), .b(m) ); assign cout = p | n; endmodule `timescale 1ns / 1ns module fa_tb; reg a, b, cin; wire cout, sum; fa u1 ( a, b, cin, cout, sum ); initial begin {a, b, cin} = 3'b000; #10 {a, b, cin} = 3'b001; #10 {a, b, cin} = 3'b01_0; #10 {a, b, cin} = 3'b011; #10 {a, b, cin} = 4; #10 {a, b, cin} = 5; #10 {a, b, cin} = 6; #10 {a, b, cin} = 7; #10 $stop; end initial $monitor($time, "ns, a=%b, b=%b, cin = %b, cout=%b, sum=%b", a, b, cin, cout, sum); endmodule