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)になるようにしてください |
| テストベンチでの使用に最適です | ほとんどのループは合成可能ではありません |
チャレンジ
やること:
0 to 3 の数字を表示するために、不足している for ループを追加してください。
チートシート
Verilogのforループは、コードブロックを特定の回数繰り返します:
for (initialization; condition; increment) begin
// 繰り返すコード
end0から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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。