Menu
CoddyTech

Case 문

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

case 문은 하나의 표현식 값에 따라 여러 가지 동작 중 하나를 선택할 수 있게 해 줍니다. 같은 변수를 여러 값과 비교할 때 여러 개의 if-else 문을 사용하는 것보다 더 깔끔한 대안입니다.

case 문은 표현식을 값 목록과 비교하고 일치하는 블록을 실행합니다. 여러 갈래로 분기하는 것과 같습니다.

구문:

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

조합 case 문에는 항상 default를 포함하는 것이 좋습니다. default가 없으면 sel이 어떤 case 항목에도 나열되지 않은 값을 갖는 경우 out이 할당되지 않고 이전 값을 유지합니다. 0과 1 비트만으로 이루어진 sel 값에 해당하는 분기가 없으면, 합성 과정에서 순수 조합 논리 대신 의도하지 않은 메모리(래치)가 만들어집니다. sel에 X 또는 Z가 있어도 시뮬레이션에서 out은 변하지 않지만, 래치가 만들어지지는 않습니다.

간단한 예제

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

sel이 00이면 out에는 a가 들어갑니다. sel이 01이면 out에는 b가 들어갑니다. sel이 10이면 out에는 c가 들어갑니다.

그렇지 않으면 out은 0이 됩니다.

case별 여러 문장

여러 문장에는 begin과 end를 사용하세요.

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을 작성합니다(더 짧은 값은 0으로 채워집니다)
default는 선택 사항이지만 권장됩니다매핑되지 않은 값을 처리합니다
default가 없으면 매핑되지 않은 값으로 인해 래치가 발생합니다조합 논리에서

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

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

기초의 모든 레슨

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