4-Bit Ripple Carry Adder
[code]
`timescale 1ns / 1ps
// 4Bit Ripple Carry Adder
// 4bit Ripple Carry Adder module
module FBit_RCA(i_a, i_b, c_in, o_sum, c_out);
// Inputs
input [3:0] i_a, i_b;
input c_in;
// Outputs
output [3:0] o_sum;
output c_out;
// inside carry
wire [2:0] c_temp;
// Full Adder Module
FA fa1(.i_a(i_a[0]), .i_b(i_b[0]), .c_in(c_in),
.o_sum(o_sum[0]), .c_out(c_temp[0]));
FA fa2(.i_a(i_a[1]), .i_b(i_b[1]), .c_in(c_temp[0]),
.o_sum(o_sum[1]), .c_out(c_temp[1]));
FA fa3(.i_a(i_a[2]), .i_b(i_b[2]), .c_in(c_temp[1]),
.o_sum(o_sum[2]), .c_out(c_temp[2]));
FA fa4(.i_a(i_a[3]), .i_b(i_b[3]), .c_in(c_temp[2]),
.o_sum(o_sum[3]), .c_out(c_out));
endmodule
// Half Adder module
module HA(i_a, i_b, o_sum, c_out);
input i_a, i_b; // input a, b
output o_sum, c_out; // output sum, carry
assign o_sum = i_a^i_b; // sum result
assign c_out = i_a&i_b; // carry result
endmodule
// Full Adder module
module FA(i_a, i_b, c_in, o_sum, c_out);
input i_a, i_b, c_in;// input a, b, carry_in
output o_sum, c_out; // output sum, carry
wire w_out1,w_out2,w_sum1; // inside carry, sum
// Half Adder module
HA ha1(.i_a(i_a), .i_b(i_b), .o_sum(w_sum1), .c_out(w_out1));
HA ha2(.i_a(w_sum1), .i_b(c_in), .o_sum(o_sum), .c_out(w_out2));
assign c_out = w_out2|w_out1; // Final carry out
endmodule
[/code]
반가산기 모듈을 이용해서 전가산기를 만들었다.(2개의 반가산기와 OR gate를 결합)
전가산기 4개를 직렬로 구성하여 4bit Ripple Carry Adder를 만들게 된다.
아래 그림은 Test Bech를 이용한 Simulation결과이다.