DownRG

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결과이다.

Exit mobile version