Whileループ
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 59/90。
whileループは、条件が真である限りコードのブロックを繰り返します。forループとは異なり、組み込みのカウンターはありません。ループ変数は自分で更新する必要があります。
whileループは各反復の前に条件を確認します。条件が真の場合、ループを実行します。偽の場合、ループは停止します。
構文:
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 = 4i < 5である限り、ループは実行されます。
whileループと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);重要なルール
| ルール | 説明 |
|---|---|
| 条件が偽になる必要がある | そうでないと無限ループになる |
| ループ変数をループ内で更新する | そうしないとループが終了しない |
ループ変数はintegerまたはregでなければならない | wireにはできない |
複数の文にはbegin/endを使う | 複数行の場合に必要 |
チャレンジ
やること:
0から2までの数字を出力するために、欠けているwhileループを追加してください。
自分で試してみよう
module while_challenge;
integer i;
initial begin
i = 0;
$display("Printing 0 to 2:");
// TODO: whileループを追加する
// i < 3 の間、ループする
// ループ内で i を表示する
// i を 1 増やす
$finish;
end
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ