이번에서는 베릴로그로 가산기(반가산기, 전가산기, 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 파일을 만들어 가산기를 설계해보겠습니다.
먼저 반가산기를 베릴로그로 작성하면 다음과 같이 작성할 수 있습니다.
// 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는 다음과 같이 구할 수 있습니다.
전가산기를 논리 게이트를 사용하여 나타내면 아래와 같이 나오고 반가산기 2개와 OR 게이트 1개를 사용하여 설계할 수 있는 것을 확인할 수 있습니다.
그렇다면 위에서 설계한 half_adder 모듈을 사용해 베릴로그로 전가산기를 설계해보겠습니다. 설계한 반가산기를 인스턴스화 하여 전가산기를 설계할 수 있습니다.