Menu
CoddyTech

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 = 4

i < 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を使う複数行の場合に必要
challenge icon

チャレンジ

やること:

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
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ