Reusing full_adder module
module ripple_carry_adder(
input [3:0] A, B,
input Cin,
output [3:0] Sum,
output Cout
);
wire c1, c2, c3;
// Chain of Full Adders
full_adder fa0 (.A(A[0]), .B(B[0]), .Cin(Cin), .Sum(Sum[0]), .Carry(c1));
full_adder fa1 (.A(A[1]), .B(B[1]), .Cin(c1), .Sum(Sum[1]), .Carry(c2));
full_adder fa2 (.A(A[2]), .B(B[2]), .Cin(c2), .Sum(Sum[2]), .Carry(c3));
full_adder fa3 (.A(A[3]), .B(B[3]), .Cin(c3), .Sum(Sum[3]), .Carry(Cout));
endmodule
Test Bench
module ripple_carry_adder_tb;
reg [3:0] A, B;
reg Cin;
wire [3:0] Sum;
wire Cout;
ripple_carry_adder uut (
.A(A), .B(B), .Cin(Cin),
.Sum(Sum), .Cout(Cout)
);
initial begin
$monitor("A=%b B=%b Cin=%b | Sum=%b Cout=%b",
A, B, Cin, Sum, Cout);
// Test cases
A=4'b0000; B=4'b0000; Cin=0; #10;
A=4'b0011; B=4'b0101; Cin=0; #10;
A=4'b1111; B=4'b0001; Cin=0; #10;
A=4'b1010; B=4'b0101; Cin=1; #10;
A=4'b1111; B=4'b1111; Cin=0; #10;
$finish;
end
endmodule