Verilog를 이용한 2x4 Decoder 구현 예제

황윤성·2024년 7월 3일
0

Verilog HDL

목록 보기
6/9

오늘은 Verilog를 사용하여 2x4 디코더를 구현하는 방법을 소개하겠습니다. 디코더는 입력된 이진 코드를 특정 출력을 활성화하여 변환하는 장치입니다. 이 글에서는 동작적 모델링과 데이터 플로우 모델링을 사용하여 디코더를 구현하는 방법을 다루겠습니다.

1. 동작적 모델링을 이용한 2x4 Decoder

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

module decoder_2x4_b(
    input [1:0] code,
    output reg [3:0] signal
);
        
    always @(code) begin
        case(code)
            2'b00 : signal = 4'b0001;
            2'b01 : signal = 4'b0010;
            2'b10 : signal = 4'b0100;
            2'b11 : signal = 4'b1000;
            default : signal = 4'b0001;  // 기본값 설정
        endcase
    end
                 
endmodule


코드에 00이 들어가면 signal에는 0001, 01이 들어가면 0010, 10이 들어가면 0100, 11이 들어가면 1000이 출력되는 모습을 확인할 수 있습니다.

이 코드는 always 블록을 사용하여 입력 신호 code의 값에 따라 출력 신호 signal을 설정합니다. case 문을 사용하여 2비트 입력 code를 4비트 출력 signal로 변환합니다.

2. 데이터 플로우 모델링을 이용한 2x4 Decoder

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

module decoder_2x4_d(
    input [1:0] code,
    output [3:0] signal
);
        
    assign signal = (code == 2'b00) ? 4'b0001 :
                    (code == 2'b01) ? 4'b0010 : 
                    (code == 2'b10) ? 4'b0100 : 
                    4'b1000;
                    
endmodule

이 코드는 assign 문을 사용하여 삼항 연산자로 입력 신호 code를 평가하고, 이에 따라 출력 신호 signal을 설정합니다. 조건에 따라 데이터를 직접 할당하는 방식으로 간결하게 구현되었습니다.

동작적 모델링과 데이터 플로우 모델링 비교

동작적 모델링:
always 블록과 case 문을 사용하여 입력 신호의 변화에 따라 동작을 정의합니다.
코드가 명확하고 가독성이 좋습니다.
상태나 조건에 따라 복잡한 동작을 구현할 수 있습니다.

데이터 플로우 모델링:
assign 문과 삼항 연산자를 사용하여 데이터의 흐름을 정의합니다.
코드가 간결하고 실행 효율이 높습니다.
간단한 데이터 변환에 적합합니다.

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

0개의 댓글