For Loop
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 58/90。
Verilogのloopを使用すると、コードブロックを複数回実行できます。loopは、反復的なテストパターンの生成、memoryの初期化、配列の反復処理を行うテストベンチで特に役立ちます。並列に実行されるハードウェア記述とは異なり、loopは順番に実行されるため、シミュレーションやテストに最適です。
最も一般的に使用されるループは、特定の回数だけ繰り返す <strong>for</strong> ループです。for ループは、反復ごとに変化するループ変数を使って、コードのブロックを繰り返し実行します。実行回数を正確に制御できます。
構文:
for (initialization; condition; increment) begin
// 繰り返すコード
end| 部分 | 動作 | 例 |
|---|---|---|
initialization | 開始値を設定します | i = 0 |
condition | 停止するタイミング | i < 10 |
increment | 各loopで変更します | i = i + 1 |
簡単な例
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
end出力:
i = 0
i = 1
i = 2
i = 3
i = 4ループは5回実行されます(i = 0、1、2、3、4)。
テストベンチでの For ループ
For ループは、すべての入力の組み合わせをテストするためによく使用されます。
integer test_value;
for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
$display("test_value = %d", test_value);
endこれにより、4ビット信号で可能な16個すべての値をテストします。
配列を使ったForループ
reg [7:0] memory [0:9];
integer i;
initial begin
for (i = 0; i < 10; i = i + 1) begin
memory[i] = i * 8;
end
endこれは10個のメモリ位置を初期化します。
重要なルール
| ルール | 説明 |
|---|---|
Loop 変数は integer または reg でなければならない | wire にすることはできない |
複数の文には begin/end を使用する | 1 行を超える場合に必要 |
| 無限 Loop を避ける | condition が最終的に false になることを確認する |
| testbench で使用するのが最適 | ほとんどの Loop は合成できない |
チャレンジ
行うこと:
0 から 3 までの数値を出力するために、欠けている for ループを追加してください。
自分で試してみよう
module for_challenge;
integer i;
initial begin
$display("Printing 0 to 3:");
// TODO: forループを追加
// i = 0 で初期化
// i < 4 の間ループ
// i = i + 1 でインクリメント
// 内部で次のように出力: $display("i = %d", i);
$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オンラインコンパイラ