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

사용자 삽입 이미지

You may also like...

댓글 남기기