Menu
Coddy logo textTech

Forループ

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 58/90。

Verilogのループを使用すると、コードブロックを複数回実行できます。これらは、繰り返しのテストパターンの生成、メモリの初期化、配列の反復処理など、テストベンチで特に役立ちます。並列に実行されるハードウェア記述とは異なり、ループは順次実行されるため、シミュレーションやテストに最適です。

最も一般的に使用されるループは、<strong>for</strong>ループで、特定の回数繰り返されます。forループは、各反復ごとに変化するループ変数を使用して、コードのブロックを繰り返し実行します。実行される回数を正確に制御できます。

構文:

for (initialization; condition; increment) begin
  // 繰り返すコード
end
項目役割
initialization開始値を設定するi = 0
condition終了条件i < 10
increment各ループでの更新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ループは、すべての入力の組み合わせをテストするために一般的に使用されます:

reg [3:0] 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個のメモリ位置を初期化します。

重要なルール

ルール説明
ループ変数は integer または reg である必要があります wire にすることはできません
複数のステートメントには begin/end を使用してください2行以上の場合に必要です
無限ループを避けてください条件が最終的に偽(false)になるようにしてください
テストベンチでの使用に最適ですほとんどのループは合成可能ではありません
challenge icon

チャレンジ

やること:

0 to 3 の数字を表示するために、不足している for ループを追加してください。

チートシート

Verilogのforループは、コードブロックを特定の回数繰り返します:

for (initialization; condition; increment) begin
  // 繰り返すコード
end

0から4までを表示する例:

integer i;

for (i = 0; i < 5; i = i + 1) begin
  $display("i = %d", i);
end

主なルール:

  • ループ変数はintegerまたはregである必要があります(wireは不可)
  • 複数のステートメントにはbegin/endを使用します
  • 無限ループを避けるため、条件がいずれ偽(false)になるようにしてください
  • ループは主にテストベンチで使用されます(ほとんどの場合、論理合成は不可能です)

自分で試してみよう

module for_challenge;
  integer i;
  
  initial begin
    $display("Printing 0 to 3:");
    
    // TODO: forループを追加
    // i = 0 で初期化
    // i < 4 の間ループ
    // i = i + 1 でインクリメント
    // 内部で i を表示
    
    $finish;
  end
endmodule
quiz icon腕試し

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

基礎のすべてのレッスン