Verilog를 이용한 Full Adder 구현 예제

황윤성·2024년 6월 27일
0

Verilog HDL

목록 보기
3/9
post-thumbnail

Verilog를 사용하여 Full Adder를 구현하는 여러 가지 방법을 소개하겠습니다. 각각의 방법은 구조적 모델링, 동작적 모델링, 데이터 플로우 모델링을 사용하며, 이를 통해 Verilog의 다양한 모델링 기법을 이해할 수 있습니다.

1. 구조적 모델링을 이용한 Full Adder

구조적 모델링은 기본적인 논리 게이트와 모듈을 사용하여 회로를 구성하는 방식입니다. 아래는 구조적 모델링을 사용한 Full Adder의 Verilog 코드입니다.

module full_adder_structural(
    input a, b, c,
    output sum, carry
);
 
    wire sum_0, carry_0, carry_1;
  
    half_adder_structural ha0(.a(a), .b(b), .s(sum_0), .c(carry_0));
    half_adder_structural ha1(.a(sum_0), .b(c), .s(sum), .c(carry_1));
  
    or (carry, carry_0, carry_1);
 
endmodule

이 코드는 두 개의 Half Adder와 OR 게이트를 사용하여 Full Adder를 구현합니다. half_adder_structural 모듈을 두 번 사용하여 첫 번째 단계에서 sum_0과 carry_0를 계산하고, 두 번째 단계에서 sum과 carry_1를 계산한 후, 최종적으로 OR 게이트를 사용하여 carry 출력을 생성합니다.

2. 동작적 모델링을 이용한 Full Adder

동작적 모델링은 특정 조건이나 이벤트에 따라 동작을 정의하는 방식입니다. 아래는 동작적 모델링을 사용한 Full Adder의 Verilog 코드입니다.

module full_adder_behavioral(
    input a, b, c,
    output reg sum, carry
);

    always @(*) begin
        case ({a, b, c})
            3'b000: begin sum = 0; carry = 0; end
            3'b001: begin sum = 1; carry = 0; end
            3'b010: begin sum = 1; carry = 0; end
            3'b011: begin sum = 0; carry = 1; end
            3'b100: begin sum = 1; carry = 0; end
            3'b101: begin sum = 0; carry = 1; end
            3'b110: begin sum = 0; carry = 1; end
            3'b111: begin sum = 1; carry = 1; end
            default: begin sum = 0; carry = 0; end
        endcase
    end

endmodule

이 코드는 입력 신호 a, b, c의 조합에 따라 sum과 carry 출력을 결정하는 동작을 정의합니다. 각 경우에 대해 sum과 carry 값을 설정합니다.

3. 데이터 플로우 모델링을 이용한 Full Adder

데이터 플로우 모델링은 데이터의 흐름을 수식으로 표현하는 방식입니다. 아래는 데이터 플로우 모델링을 사용한 Full Adder의 Verilog 코드입니다.

module full_adder_dataflow(
    input a, b, c,
    output sum, carry
);
 
    wire [1:0] sum_value;
 
    assign sum_value = a + b + c;
    assign sum = sum_value[0];
    assign carry = sum_value[1];
 
endmodule

이 코드는 a, b, c의 합을 sum_value로 계산하고, 그 결과의 하위 비트(sum_value[0])를 sum으로, 상위 비트(sum_value[1])를 carry로 할당합니다. 이 방식은 데이터의 흐름을 수식으로 간단히 표현할 수 있습니다.

시뮬레이션 결과 a,b,c의 값이 입력됨에 따라 carry와 sum의 출력이 제대로 나온는 것을 확인할 수 있습니다.

profile
하드웨어 엔지니어 꿈나무

0개의 댓글