Menu
Coddy logo textTech

Forever Loop

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

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

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

構文:

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 とその他の Loop

Loop停止する?使用するタイミング
forはい(固定回数の反復後)repeats の回数が既知の場合
whileはい(条件が false のとき)停止条件が不明な場合
repeatはい(固定回数の反復後)repeats の回数が既知の場合
foreverいいえ(決して停止しない)連続的な信号(クロック)

重要なルール

ルール説明
遅延を含める必要がある#10 または @(posedge clk)
遅延がないと、シミュレーションが停止する時間の進行がない無限ループ
disable と併用して停止するそうしないとシミュレーションが決して終了しない
テストベンチで使用するのが最適合成できない
challenge icon

チャレンジ

行うこと:

10 time units ごとに切り替わるクロックを生成するため、不足している forever loop を追加します。

自分で試してみよう

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

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

基礎のすべてのレッスン

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