Menu
Coddy logo textTech

Foreverループ

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 61/90。

forever ループは、コードブロックを永久に継続して繰り返します。自然に停止することはありません。

forever ループは、終わりなく繰り返し実行されます。テストベンチでクロックやその他の連続信号を生成するのに役立ちます。

構文:

forever begin
  // 永遠に繰り返すコード
end

簡単な例

forever begin
  $display("This prints forever");
end

これは無限に出力され、シミュレーションをクラッシュさせます。常に遅延または停止条件を追加してください。

クロックの生成(一般的な用途)

forever の最も一般的な用途はクロックを生成することです:

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;   // 5タイムユニットごとにトグル
  end
end

これにより、シミュレーション全体を通して実行されるクロックが作成されます。

Disable を伴う Forever

disable ステートメントを使用すると、forever ループを停止できます:

initial begin : clock_gen   // ここに名前を追加
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end
initial begin
  #100;
  disable clock_gen;   // これで動作します
end

Forever とその他のループ

ループ停止するか?使用するタイミング
forはい(固定回数の反復後)繰り返す回数が分かっている場合
whileはい(条件が偽になったとき)停止条件が不明な場合
repeatはい(固定回数の反復後)繰り返す回数が分かっている場合
foreverいいえ(停止しない)継続的な信号(クロック)

重要なルール

ルール説明
遅延を含める必要があります#10 または @(posedge clk)
遅延がないとシミュレーションがフリーズします時間の経過がない無限ループ
停止するには disable と共に使用しますそうしないとシミュレーションが終了しません
テストベンチでの使用が最適です論理合成は不可です
challenge icon

チャレンジ

作業内容:

不足している forever ループを追加して、10 タイムユニットごとにトグルするクロックを生成してください。

自分で試してみよう

module forever_challenge;
  reg clk;
  
  initial begin
    clk = 0;
    // TODO: clkを10時間単位ごとにトグルするforeverループを追加
  end
endmodule
quiz icon腕試し

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

基礎のすべてのレッスン