Whileループ
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 59/90。
whileループは、条件が真(true)である限り、コードのブロックを繰り返します。forループとは異なり、組み込みのカウンターは持っていないため、ループ変数は自分で更新する必要があります。
whileループは、各反復の前に条件をチェックします。条件が真(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ループは 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;
end特定の値の検索
integer i = 0;
reg [7:0] data;
while (data[i] != 1) begin
i = i + 1;
end
$display("First 1 found at position %d", i);重要なルール
| ルール | 説明 |
|---|---|
| 条件が偽(false)になる必要があります | そうでないと無限ループになります |
| 内部でループ変数を更新します | そうしないとループが終わりません |
ループ変数は integer である必要があります | reg にすることはできません |
複数のステートメントには begin/end を使用します | 2行以上の場合は必須です |
チャレンジ
やること:
0から2までの数字を表示するために、不足している while ループを追加してください。
チートシート
while ループは、条件が真である限りコードブロックを繰り返します。ループ変数は手動で更新する必要があります。
integer i = 0;
while (i < 5) begin
$display("i = %d", i);
i = i + 1;
end主なルール:
- ループ変数は
integerである必要があります(regではありません) - 無限ループを避けるため、常にループ内でループ変数を更新してください
- 複数のステートメントには
begin/endを使用します
While と For の比較: 反復回数がわかっている場合は for を使用し、停止条件が動的な場合(例:値の検索など)は while を使用します。
// Finding first set bit
while (data[i] != 1) begin
i = i + 1;
end自分で試してみよう
module while_challenge;
integer i;
initial begin
i = 0;
$display("Printing 0 to 2:");
// TODO: whileループを追加
// i < 3 の間ループする
// 内部で i を表示する
// i を 1 増やす
$finish;
end
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。