Whileループ
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 59/90。
while ループは、条件が真である限りコードブロックを繰り返します。for ループとは異なり、組み込みのカウンタを持たないため、ループ変数は自身で更新する必要があります。
while ループは、各反復の前に condition をチェックします。condition が true の場合、ループを実行します。false の場合、ループは停止します。
構文:
while (condition) begin
// 繰り返すコード
end簡単な例
integer i = 0;
while (i < 5) begin
$display("i = %d", i);
i = i + 1;
end出力:
i = 0
i = 1
i = 2
i = 3
i = 4この loop は i < 5 である限り実行されます。
While ループ vs For ループ
| For ループ | While ループ | |
|---|---|---|
| カウンタ | 組み込み | 自分で管理する |
| 使用するタイミング | 反復回数が分かっている場合 | いつループが停止するか不明な場合 |
| 構文 | for (i=0; i<5; i=i+1) | while (i < 5) |
テストベンチにおける While ループ
While ループは、必要な反復処理の回数が正確には分からない場合に便利です:
integer i = 0;
while (i < 16) begin
$display("Testing value %d", i);
i = i + 1;
endFinding 特定の値
integer i = 0;
reg [7:0] data;
while (data[i] != 1) begin
i = i + 1;
end
$display("First 1 found at position %d", i);重要なルール
| ルール | 説明 |
|---|---|
condition は偽(false)になる必要があります | そうでない場合、無限 loop になります |
Inside で loop 変数を更新します | そうしないと loop が終了しません |
Loop 変数は integer または reg である必要があります | wire にすることはできません |
複数のステートメントには begin/end を使用します | 複数行必要な場合に必須です |
チャレンジ
作業内容:
不足している while ループを追加して、0 から 2 までの数字を出力してください。
自分で試してみよう
module while_challenge;
integer i;
initial begin
i = 0;
$display("Printing 0 to 2:");
// TODO: whileループを追加
// i < 3 の間ループ
// 中で i を表示
// i を1増やす
$finish;
end
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。