Menu
Coddy logo textTech

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行以上の場合は必須です
challenge icon

チャレンジ

やること:

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

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

基礎のすべてのレッスン