Menu
Coddy logo textTech

Case 문

Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 55번째.

case 문을 사용하면 단일 표현식의 값을 기반으로 여러 다른 동작 중에서 선택할 수 있습니다. 동일한 변수를 여러 다른 값과 비교할 때 여러 개의 if-else 문을 사용하는 것보다 훨씬 깔끔한 대안입니다.

case 문은 식(expression)을 값 목록과 비교하여 일치하는 블록을 실행합니다. 다방향 분기(multi-way branch)와 같습니다.

구문:

case (expression)
  value1: statement1;
  value2: statement2;
  default: default_statement;
endcase

조합 논리 <strong>case</strong> 문에는 <strong>default</strong>를 항상 포함하는 것이 강력히 권장됩니다. default가 없으면, sel이 예상치 못한 값(예: X 또는 Z)을 가질 때 out에 값이 할당되지 않아 이전 값을 래치(latch)하게 됩니다. 이는 순수 조합 논리 대신 의도치 않은 메모리(래치)를 생성하게 됩니다.

간단한 예제

case (sel)
  2'b00: out = a;
  2'b01: out = b;
  2'b10: out = c;
  default: out = 0;
endcase

sel00이면 outa를 받습니다. sel01이면 outb를 받습니다. sel10이면 outc를 받습니다.

그렇지 않으면, out0을 얻습니다.

Case당 여러 문장 실행

여러 문장을 실행하려면 beginend를 사용합니다:

case (state)
  2'b00: begin
    out = a;
    flag = 1;
  end
  2'b01: begin
    out = b;
    flag = 0;
  end
  default: out = 0;
endcase

중요 규칙

규칙설명
Case 값은 고유해야 합니다중복되는 경우 첫 번째로 일치하는 분기만 실행됩니다
값은 비트 너비와 일치해야 합니다1'b1이 아닌 2'b01
default는 선택 사항이지만 권장됩니다매핑되지 않은 값을 처리합니다
default가 없으면 매핑되지 않은 값으로 인해 래치가 발생합니다조합 논리에서

Case vs If-Else

 CaseIf-Else
적합한 용도단일 변수, 다양한 값복잡한 조건
가독성매우 명확함지저분해질 수 있음
예시멀티플렉서, 디코더비교기, 범위 검사
challenge icon

챌린지

Case 문 완료하기

작업 내용:

이 멀티플렉서가 작동하도록 누락된 case 문을 추가하세요.

작동 방식:

  • select = 2'b00일 때, result = in0
  • select = 2'b01일 때, result = in1
  • select = 2'b10일 때, result = in2
  • select = 2'b11일 때, result = in3

직접 해보기

module mux4 (
  input [1:0] select,
  input in0, in1, in2, in3,
  output reg result
);
  
  always @(*) begin
    // TODO: case 문 추가
    // select=00 -> result = in0
    // select=01 -> result = in1
    // select=10 -> result = in2
    // select=11 -> result = in3
    // default -> result = 0
  end
  
endmodule
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨