Case Statement
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 55/90。
case statementを使うと、1つのexpressionの値に基づいて、さまざまなアクションの中から選択できます。同じ変数をさまざまな値と比較する場合、複数のif-else statementを使うよりもすっきりした方法です。
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 になります。
1つの 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 の値は一意である必要があります | 重複がある場合、最初に一致した分岐のみが実行されます |
| 値はビット幅と一致している必要があります | 2'b01 であり、1'b1 ではありません |
default は省略可能ですが、推奨されます | マッピングされていない値を捕捉します |
default がない場合、マッピングされていない値によってラッチが発生します | 組み合わせ論理の場合 |
Case と If-Else の比較
| Case | If-Else | |
|---|---|---|
| 最適な用途 | 1つの変数に多数の値 | 複雑な条件 |
| 可読性 | 非常に明快 | 複雑になりやすい |
| 例 | マルチプレクサ、デコーダ | 比較器、範囲チェック |
チャレンジ
case ステートメントを完成させる
すること:
このマルチプレクサが動作するように、不足している case ステートメントを Add します。
仕組み:
select = 2'b00のとき、result = in0-
select = 2'b01のとき、result = in1 select = 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オンラインコンパイラ