이번에는 Full Adder를 Verilog HDL로 만들어보겠습니다.
하프 애더 (Half Adder)
하프 애더는 두 개의 1비트 입력을 받아 덧셈을 수행하고, 결과로 합(Sum)과 올림(Carry) 두 출력을 생성합니다. 이는 가장 기본적인 산술 논리 회로로, 두 비트의 가장 낮은 자릿수를 더할 때 사용됩니다. 하프 애더에는 이전 덧셈에서 발생한 올림을 고려하지 않기 때문에 단순한 덧셈에 적합합니다. 하프 애더는 XOR 게이트와 AND 게이트를 사용하여 두 입력 비트의 합과 올림을 계산합니다.
풀 애더 (Full Adder)
풀 애더는 하프 애더를 확장하여 세 개의 입력(두 개의 비트와 이전 덧셈에서의 올림)을 받아 덧셈을 수행합니다. 이는 더 복잡한 덧셈 연산에 사용되며, 합과 새로운 올림을 출력으로 제공합니다. 풀 애더는 멀티 비트 덧셈이나 산술 논리 장치(ALU)에서 널리 사용됩니다. 풀 애더는 두 개의 XOR 게이트, 두 개의 AND 게이트, 그리고 하나의 OR 게이트를 사용하여 세 입력의 합과 올림을 계산합니다.
특징
입력 터미널: 하프 애더는 두 개의 입력을 받는 반면, 풀 애더는 세 개의 입력(두 비트 입력과 이전 올림)을 받습니다.
올림 전파: 하프 애더는 이전의 올림을 고려하지 않지만, 풀 애더는 이전의 올림도 함께 더합니다.
응용 프로그램: 하프 애더는 간단한 디지털 회로에서 사용되며 풀 애더를 구현하는 데도 사용됩니다. 풀 애더는 컴퓨터, 디지털 계산기, 통신 시스템 등 보다 복잡한 디지털 시스템에서 사용됩니다.
- 하프 애더의 진리표는 A와 B 입력에 따라 S (합)와 C (올림)가 각각 00, 01, 10, 11일 때의 결과를 보여줍니다.
- 풀 애더의 진리표는 A, B 입력과 이전 올림 (Cin)을 포함하여 가능한 모든 입력 조합과 그 결과를 보여줍니다.
Verilog HDL로 Full adder 구현
1) Half Adder & Testbench
2) Full adder
`timescale 1ns / 1ps
module my_fadder(
input A,
input B,
input Cin,
output S,
output Co
);
wire ab_xor;
wire ab_and;
wire ci_and;
assign S = ab_xor ^ Cin;
assign Co = ci_and | ab_and;
assign ab_xor = A ^ B;
assign ci_and = ab_xor & Cin;
assign ab_and = A & B;
endmodule
3) Full adder
`timescale 1ns / 1ps
module my_fadder(
input A,
input B,
input Ci,
output S,
output Co
);
wire ha0_s, ha0_c;
wire ha1_s, ha1_c;
assign S = ha1_s;
assign Co = ha0_c | ha1_c;
my_hadder ha0( .A(A), .B(B), .S(ha0_s), .C(ha0_c));
my_hadder ha1( .A(ha0_s), .B(Ci), .S(ha1_s), .C(ha1_c));
endmodule
두 개의 1비트 입력(A, B)과 하나의 캐리 입력(Ci)을 받아, 덧셈 결과를 합(S)과 캐리 출력(Co)으로 반환합니다.
테스트벤치에서 10ns 간격으로 A, B, Ci의 값을 변경해줍니다.
3)의 Full Adder는 Half Adder 2개를 하위 모듈로 만든 코드입니다.
A, B, Ci: 입력 신호들
S: 결과 합(Sum)
Co: 올림(Carry-out)
Simulation 결과
초기 상태
- A, B, Ci 모두 0으로 시작합니다.
- S와 Co 역시 0입니다.
첫 번째 변화
- Ci가 1로 변경됩니다 (약 20ns).
- S는 1로 변화하고 Co는 여전히 0입니다. 이것은 입력이 001일 때, 합이 1이고 올림이 없음을 의미합니다.
두 번째 변화
- B가 1로 변경됩니다 (약 40ns).
- S는 다시 0으로 변하고 Co는 1로 변합니다. 입력이 011일 때, 합은 0이고 올림은 1입니다. 이는 1 + 1 = 10(2진수)의 계산 결과를 보여줍니다.
세 번째 변화
- A가 1로 변경됩니다 (약 60ns).
- S와 Co 모두 1입니다. 입력이 111일 때, 합은 1이고 올림도 1입니다. 이는 1 + 1 + 1 = 11(2진수)의 계산 결과입니다.
네 번째 변화
- Ci가 0으로 변경됩니다 (약 80ns).
- S는 1로 변하고 Co는 0으로 변합니다. 입력이 110일 때, 합은 1이고 올림은 없습니다.
각 입력 변화 시에 합과 올림 신호가 기대한 대로 바뀌고 있어, 풀 애더의 설계가 정확함을 확인할 수 있습니다. 이는 디지털 회로 설계에서 덧셈 연산을 처리하는 기본적인 방법으로, 컴퓨터의 산술 논리 장치(ALU) 구성에 필수적인 요소입니다.
'하만 세미콘 아카데미 > Verilog HDL' 카테고리의 다른 글
Verilog HDL 실습 (Counter) (0) | 2024.05.31 |
---|---|
Verilog HDL 실습 (1sec_LED) (0) | 2024.05.31 |
Verilog HDL 실습 (Parity_bit) (0) | 2024.05.31 |
Vivado 사용법 및 간단한 실습 Part2 (D Flip Flop) (0) | 2024.05.27 |
Vivado 사용법 및 간단한 실습 Part1 (And Gate) (0) | 2024.05.27 |