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;
endcasesel이 00이면 out은 a를 받습니다. sel이 01이면 out은 b를 받습니다. sel이 10이면 out은 c를 받습니다.
그렇지 않으면 out에는 0이 할당됩니다.
case당 여러 statement
여러 statement에는 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 값은 고유해야 합니다 | 중복된 경우 처음 일치하는 분기만 실행됩니다 |
| 값은 비트 너비와 일치해야 합니다 | 2'b01이며 1'b1이 아닙니다 |
default는 선택 사항이지만 권장됩니다 | 매핑되지 않은 값을 처리합니다 |
default가 없으면 매핑되지 않은 값으로 인해 래치가 발생합니다 | 조합 논리에서 |
Case와 If-Else 비교
| Case | If-Else | |
|---|---|---|
| 적합한 경우 | 하나의 변수, 여러 값 | 복잡한 조건 |
| 가독성 | 매우 명확함 | 복잡해질 수 있음 |
| 예시 | 멀티플렉서, 디코더 | 비교기, 범위 확인 |
챌린지
case Statement 완성
해야 할 일:
이 멀티플렉서가 작동하도록 누락된 case statement를 추가하세요.
작동 방식:
select = 2'b00일 때,result = in0select = 2'b01일 때,result = in1select = 2'b10일 때,result = in2select = 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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic직접 연습해 보세요: 온라인 Verilog 컴파일러