이번에서는 베릴로그로 가산기(반가산기, 전가산기, 4 bit 가산기, 8 bit 가산기)를 설계하고 테스트 벤치를 작성하여 시뮬레이션을 하였습니다. 지금부터 반가산기부터 자세하게 알아보도록 하게습니다.

반가산기는 두 입력을 받아 출력으로 Sum과 Carry가 나오게 됩니다. 반가산기의 진리표를 작성해보면 아래와 같이 작성할 수 있습니다.

A B S C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

Sum은 두 입력 A, B를 XOR 연산한 결과가 Carry는 두 입력을 AND하면 됩니다.

저번 수업에서 한 것과 마찬가지로 Vivado에서 새로운 프로젝트를 생성하고 adder.v 파일을 만들어 가산기를 설계해보겠습니다.

ℹ️ Verilog Code(Half Adder)

먼저 반가산기를 베릴로그로 작성하면 다음과 같이 작성할 수 있습니다.

// 1-bit Half Adder

module half_adder(
    input a,
    input b,
    output s,
    output c
);
    assign s = a ^ b;
    assign c = a & b;
endmodule

두 입력 a, b와 output sum, carry를 먼저 정의하고 sum과 carry를 assign으로 할당해 설계하였습니다.

이번에는 방금 설계한 반가산기를 사용해 두 입력과 Cin까지 입력으로 받는 전가산기를 설계해보려고 합니다.

전가산기의 진리표를 보면 아래와 같습니다.

A B Cin S C
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

진리표를 통해 전가산기의 Sum과 Carry를 구해보면 Sum과 Carry는 다음과 같이 구할 수 있습니다.

image.png

전가산기를 논리 게이트를 사용하여 나타내면 아래와 같이 나오고 반가산기 2개와 OR 게이트 1개를 사용하여 설계할 수 있는 것을 확인할 수 있습니다.

image.png

ℹ️ Verilog Code(Full Adder)

그렇다면 위에서 설계한 half_adder 모듈을 사용해 베릴로그로 전가산기를 설계해보겠습니다. 설계한 반가산기를 인스턴스화 하여 전가산기를 설계할 수 있습니다.