Menu
CoddyTech

Casex 및 Casez

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

때로는 값에서 특정 비트에만 관심이 있고, 다른 비트는 무시해도 됩니다. 예를 들어, 우선순위 인코더에서는 다른 비트와 관계없이 첫 번째 1 비트를 찾고 싶을 수 있습니다.

일반적인 case 문에서는 돈트 케어 비트의 가능한 모든 조합을 나열해야 하므로, 폭이 넓은 버스에서는 불가능합니다.

casez와 casex는 ?, z 또는 x를 사용해 특정 비트를 "상관없음"으로 표시할 수 있도록 하여 이 문제를 해결합니다.

Casez와 Casex 및 일반 Case

문상관없는 비트적합한 용도
case없음정확히 일치하는 경우
casezz 또는 ?우선순위 인코더(권장)
casexx, z 또는 ?사용하지 않기(버그를 숨김)
  • casez는 z 또는 ?인 비트를 무시합니다(권장).
  • casex는 x 비트도 무시하므로 시뮬레이션 오류가 숨겨질 수 있습니다.

항상 casez를 사용하고, casex는 사용하지 마세요. casex는 x 값을 무시하기 때문에 위험합니다(이 값은 초기화되지 않은 레지스터나 시뮬레이션 오류를 나타내는 경우가 많습니다). casez는 x를 상관없는 값으로 취급하지 않으므로 더 안전한 대안입니다.

예제

casez (data)
  4'b???1: out = 0;   // Bit0 must be 1, others don't matter
  4'b??1?: out = 1;   // Bit1 must be 1, others don't matter
  4'b?1??: out = 2;   // Bit2 must be 1, others don't matter
  4'b1???: out = 3;   // Bit3 must be 1, others don't matter
endcase

?는 “상관없음”을 의미합니다. 해당 비트는 0이나 1 또는 어떤 값이든 될 수 있습니다.

challenge icon

챌린지

해야 할 일:

이 디코더가 작동하도록 누락된 casez 문을 추가하세요.

작동 방식:

  • input = 4'b???1 → out = 4'b0001
  • input = 4'b??1? → out = 4'b0010
  • input = 4'b?1?? → out = 4'b0100
  • input = 4'b1??? → out = 4'b1000
  • 기본값 → out = 4'b0000

직접 해보기

module decoder (
  input [3:0] in,
  output reg [3:0] out
);
  
  always @(*) begin
    // TODO: casez 문 추가
    // in = 4'b???1 -> out = 4'b0001
    // in = 4'b??1? -> out = 4'b0010
    // in = 4'b?1?? -> out = 4'b0100
    // in = 4'b1??? -> out = 4'b1000
    // default -> out = 4'b0000
  end
  
endmodule
quiz icon실력 점검

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

기초의 모든 레슨

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