Menu
Coddy logo textTech

Case Statement

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

case 문을 사용하면 단일 expression의 값에 따라 여러 가지 작업 중에서 선택할 수 있습니다. 동일한 변수를 여러 값과 비교할 때 여러 if-else 문을 사용하는 것보다 더 깔끔한 대안입니다.

case statement는 expression을 값 목록과 비교하고 일치하는 블록을 실행합니다. 다중 분기와 같습니다.

구문:

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

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

간단한 예제

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

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

그렇지 않으면 out에는 0이 할당됩니다.

case당 여러 statement

여러 statement에는 beginend를 사용합니다:

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

중요한 규칙

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

Case와 If-Else 비교

 CaseIf-Else
적합한 경우하나의 변수, 여러 값복잡한 조건
가독성매우 명확함복잡해질 수 있음
예시멀티플렉서, 디코더비교기, 범위 확인
challenge icon

챌린지

case Statement 완성

해야 할 일:

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

작동 방식:

  • 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실력 점검

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

기초의 모든 레슨

직접 연습해 보세요: 온라인 Verilog 컴파일러