module adder(A,B,Cin,S,Cout); input A,B; input Cin; wire A,B,Cin; wire S,Cout; output S; output Cout; assign S = (A ^ B) ^ Cin; assign Cout = Cin & (A ^ B) | (A & B); endmodule module ripple_adder(a,b,cin,sum,cout); input [3:0] a,b; input cin; output [3:0] sum; output cout; wire [3:0] a,b; wire cin; wire [3:0] sum; wire cout; wire [3:0] c; assign cout = c[3]; adder a0(.A(a[0]), .B(b[0]), .Cin(cin), .S(sum[0]), .Cout(c[0])); adder a1(.A(a[1]), .B(b[1]), .Cin(c[0]), .S(sum[1]), .Cout(c[1])); adder a2(.A(a[2]), .B(b[2]), .Cin(c[1]), .S(sum[2]), .Cout(c[2])); adder a3(.A(a[3]), .B(b[3]), .Cin(c[2]), .S(sum[3]), .Cout(c[3])); endmodule