[VerilogHDL] 05_조건문과 반복문_casez

05_조건문과 반복문_2_casez

verilogHDL

[VerilogHDL] 05_조건문과 반복문_casez

1. casez

Verilog HDL에서 casez 문은 다중 조건을 처리하는 조건문 중 하나 입니다. casez 문은 선택 식(expression)을 사용하여 여러 가지 경우(case)를 처리하고, 해당하는 경우에 특정 동작을 수행합니다. casez 문은 와일드카드를 사용하여 비교하는데, 와일드카드는 ‘x’, ‘z’, 또는 'x’와 'z’로 구성된 비트를 의미합니다.

  1. 선택 식: casez 문은 선택 식(expression)을 사용하여 조건을 평가합니다. 선택 식은 casez 키워드 다음에 오며, 일반적으로 변수나 신호를 가리킵니다. 선택 식의 값에 따라 여러 개의 경우(case)를 검사하고 처리합니다.

  2. 경우 목록: casez 문은 여러 개의 경우(case)를 가질 수 있습니다. 각각의 경우는 casez 키워드와 일치하는 값을 가집니다. 경우 값은 ‘x’, ‘z’, 또는 'x’와 'z’로 구성된 비트 값으로 구성됩니다. 해당 비트에 대해 일치 여부를 확인하지 않는다는 의미입니다.

  3. 동작 블록: 각 경우(case)에는 해당 경우가 일치할 때 실행될 동작 블록이 포함됩니다.

  4. 기본(case default): case 문은 선택 식의 값과 일치하는 경우를 찾지 못했을 때 선택할 수 있는 기본(case default)을 가질 수 있습니다. 기본은 선택 식의 값과 일치하는 경우가 없을 때 실행되는 동작 블록을 정의합니다. 기본은 선택적으로 사용할 수 있으며, 생략할 수도 있습니다.(반드시 추가하는 것을 추천)

2. 예제 코드

module CasezExample;
    reg [3:0] sel;
    reg [7:0] data;
    
    always @* begin
        casez (sel)
            4'b000?: data = 8'b00000000;
            4'b0??1: data = 8'b11110000;
            4'b1?10: data = 8'b00111100;
            4'b??11: data = 8'b00001111;
            default: data = 8'b00000000;
        endcase
    end
    
    initial begin
        sel = 4'b1?10;
        #10;
        
        sel = 4'b0??1;
        #10;
        
        sel = 4'b??11;
        #10;
        
        $finish;
    end
endmodule

위의 예제 코드에서는 CasezExample 모듈을 선언하고, seldata라는 reg 변수를 정의합니다.

always 블록에서는 casez 문을 사용하여 sel의 값을 기반으로 data 값을 설정합니다. casez 키워드 다음에는 경우의 값과 ‘x’, ‘z’, 또는 'x’와 'z’로 구성된 비트를 비교하여 해당하는 동작 블록이 옵니다.

initial 블록에서는 sel 값을 변경하고 일정 시간이 경과한 후에 $finish를 호출하여 시뮬레이션을 종료합니다.

이를 통해 casez 문을 사용하여 선택 식의 값에 따라 다양한 경우를 처리하고, 각 경우에 따른 동작을 수행할 수 있습니다.

댓글 쓰기

0 댓글