If - Else
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 53/90。
if-else文は、条件に基づいて2つの異なるアクションから選択できます。条件がtrueの場合は、一方のブロックが実行されます。falseの場合は、もう一方のブロックが実行されます。
if-else文は、コードに判断の分岐点を与えます。condition が true の場合はある処理を行い、condition が false の場合は別の処理を行います。
構文:
if (condition) begin
// 条件が true (1) のときに実行される
end else begin
// 条件が false (0) のときに実行される
end簡単な例
if (reset) begin
count = 0;
end else begin
count = count + 1;
endresetが 1 の場合 →countは 0 になるresetが 0 の場合 →countは 1 増加する
複数のステートメント
複数のステートメントがある場合は、begin と end を使用します。
if (enable) begin
out = data_in;
valid = 1;
end else begin
out = 0;
valid = 0;
end複数の条件を使用した If-Else
if-else文を連結できます。
if (a > b) begin
max = a;
end else if (b > a) begin
max = b;
end else begin
max = a; // a と b は等しい
end重要なルール
| ルール | 説明 |
|---|---|
else は省略可能 | else なしで if を使用できます |
else は最も近い if に属する | ネストに注意してください |
複数のステートメントには begin/end を使用する | 1行を超える場合に必要です |
チャレンジ
行うこと:
- 不足している
if-else文を Add して、これが動作するようにします。 enableが 1 のとき、outshould equala & b。enableが 0 のとき、outshould equala | b。
自分で試してみよう
module ifelse_challenge;
reg a, b, enable;
reg out;
initial begin
a = 1;
b = 0;
enable = 1;
// TODO: if-else文を追加
// enableが1の場合: out = a & b
// それ以外: out = a | b
$display("out = %d (should be 0 because 1&0=0)", out);
$finish;
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オンラインコンパイラ