Whileループ
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 59/90。
while loop は、condition が true である限りコードのブロックを繰り返します。for loop とは異なり、組み込みのカウンターはありません。loop 変数は自分で更新する必要があります。
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 = 4i < 5である限り、ループは実行されます。
While と For loop
| For loop | While loop | |
|---|---|---|
| カウンター | 組み込み | 自分で管理 |
| 使用するタイミング | 反復回数がわかっている場合 | loop がいつ停止するかわからない場合 |
| 構文 | 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);重要なルール
| ルール | 説明 |
|---|---|
| condition は false にならなければならない | そうでないと無限 loop になる |
| loop 変数を内部で更新する | そうしないと loop は決して終了しない |
loop 変数は integer または reg でなければならない | wire にすることはできない |
複数の文には begin/end を使用する | 2 行以上の場合に必要 |
チャレンジ
行うこと:
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オンラインコンパイラ