Menu
Coddy logo textTech

Disableステートメント

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

disable 文は、名前付きブロックforever ループ、begin-end ブロック、またはタスクなど)の実行を停止します。これは、通常であれば永久に実行され続けるループから抜け出すのに便利です。

構文:

disable block_name;

ブロックには名前を付ける必要があります。

Foreverループを使用した無効化

begin : counter // counterは、このブロックにcounterという名前を付けます。
  forever begin
    #10 count = count + 1;
    if (count == 5) begin
      disable counter;   // disable counterは、その名前付きブロック全体を停止させます。
    end
  end
end

foreverループは、counterという名前のブロックの中にあります。disable counterステートメントは、ループのに配置されています。countが5に達すると、disable counterが実行され、ブロックcounter全体を停止させます。これにより、foreverループも即座に停止します。

別のブロックで無効化する

begin : counter
  forever begin
    #10 count = count + 1;
  end
end

initial begin
  #50;
  disable counter;   // 外部からcounterブロックを停止します
end

ここでは、forever ループが名前付きブロック counter の中で継続的に実行されます。disable counter ステートメントは、別の initial ブロック内に配置されています。50時間単位後、disable counter が実行されて counter ブロックを停止し、これにより外部から forever ループが終了します。

重要なルール

ルール説明
ブロックには名前を付ける必要がありますbegin : block_name
Disableは即座に実行を停止しますその瞬間にコードが停止します
どこからでも使用できますモジュール内のどのブロックからでも
foreverループを停止するのに便利ですそうしないと、ループは停止しません
challenge icon

チャレンジ

永遠に実行されるカウンタを持つモジュールが与えられています。 

行うべきこと:

各コメントを正しいコードに置き換えて、空のブロックを完成させてください:

  1. 50時間単位待機するために #50; を追加します
  2. counterブロックを停止するために disable counter; を追加します
  3. メッセージを表示するために $display("Counter stopped"); を追加します
  4. シミュレーションを終了するために $finish; を追加します

チートシート

disable 文は、名前付きブロック(例:forever ループ)の実行を停止します。ブロックは、begin : block_name を使用してラベルを付ける必要があります。

ブロック内部からの無効化(Disable):

begin : counter
  forever begin
    #10 count = count + 1;
    if (count == 5) disable counter;
  end
end

別のブロックからの無効化(Disable):

begin : counter
  forever begin
    #10 count = count + 1;
  end
end

initial begin
  #50;
  disable counter; // 外部から名前付きブロックを停止します
end

自分で試してみよう

module disable_challenge;
  integer count;
  
  initial begin
    count = 0;
    fork
      begin : counter
        forever begin
          #10 count = count + 1;
          $display("count = %d", count);
        end
      end
      
      begin
        // ステップ 1: 50時間単位待機する
        
        // ステップ 2: counterブロックを無効にする
        
        // ステップ 3: "Counter stopped" を表示する
        
        // ステップ 4: シミュレーションを終了する
        
      end
    join
  end
endmodule
quiz icon腕試し

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

基礎のすべてのレッスン