Menu
Coddy logo textTech

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 は合成できない
challenge icon

チャレンジ

行うこと:

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
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ