Language/Verilog

Vivado : 4bit 가산기

짱도르딘 2024. 6. 16. 15:52
728x90

이번에는 전가산기 4개를 이어 붙인 4bit 가산기를 구현해보려고 한다.

 

전가산기에 관한 내용은 아래 글을 참고하여 확인할 수 있다.

 

2024.06.13 - [Language/Verilog] - Vivado : 전가산기(Full-adder) 구현

 

Vivado : 전가산기(Full-adder) 구현

가산기가산기란, 덧셈 연산을 수행하는 논리회로를 의미한다. 가산기는 디지털 회로, 조합 회로의 하나이며, 대부분의 가산기는 2진수의 합을 나타내는 특징을 가진다. 전가산기전가산기는 두

jangdong.tistory.com


4bit adder

4비트 가산기를 구현하기 위해서는 두 개의 입력을 받을 a, b 입력단자와 올림수를 표현할 Cin(carry in) 입력 단자를 필요로 한다. 

 

아래는 Structural 기법을 사용하여 4bit 가산기를 구현한 것이다.

4bit 가산기이기 때문에 입력단자 a, b를 ' [3:0] '을 통해 4비트를 선언해 주었다.

4개의 전가산기를 연결해 주며, carry 값을 전달해 줄 carry wire는 ' carry_w ' 로 3개를 선언해 주었다.

가장 먼저 Cin으로 초기 carry 값을 받고, carry_w(carry_wire)를 통하여 옆 가산기로 carry 값을 넘겨주는 방식으로 동작이 구현된다.

 

구현한 코드는 아래와 같다.

module fadderr_4bits_s(
    input [3:0] a, b,
    input cin, // carry in
    output [3:0] sum,
    output carry);
    
    wire [2:0] carry_w;
    
    full_adder_structural fa0(.a(a[0]), .b(b[0]), .c(cin), .sum(sum[0]), .carry(carry_w[0]));
    full_adder_structural fa1(.a(a[1]), .b(b[1]), .c(carry_w[0]), .sum(sum[1]), .carry(carry_w[1]));
    full_adder_structural fa2(.a(a[2]), .b(b[2]), .c(carry_w[1]), .sum(sum[2]), .carry(carry_w[2]));
    full_adder_structural fa3(.a(a[3]), .b(b[3]), .c(carry_w[2]), .sum(sum[3]), .carry(carry));
        
endmodule

 

아래는 위의 코드를 동작시킨 출력 파형을 나타낸다.

 

출력 파형을 보면 Cin 값이 0과 1로 되어있는 것을 확인할 수 있는데, Cin(carry in)을 0과 1로 준 이유는 4비트 병렬 가산기를 바탕으로 8비트 가산기를 구현하려고 0과 1을 대입해 준 것이다.

4bit adder_structural

 

4bit adder_structural(2)

 


다음은 Dataflow 기법을 활용하여 4bit 가산기를 구현한 코드와 출력 파형을 나타낸다.

 

Structural 기법과는 달리, Dataflow 기법을 활용하여 구현을 할 때에는 sum_value 값으로만 구현 된다는 특징을 지닌다.

 

동작을 구현할 코드는 아래와 같다.

module full_4bits_dataflow(
    input [3:0]a, b, 
    input cin,
    output [3:0] sum, 
    output carry);
    
    wire [4:0] sum_value;
    
    assign sum_value = a + b + cin;
    assign sum = sum_value[3:0];
    assign carry = sum_value[4];
    
endmodule

 

위 코드로 구현된 출력 파형은 아래와 같다.

 

4bit adder_dataflow
4bit adder_dataflow(2)

 

728x90