Menu
Coddy logo textTech

Disableステートメント

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

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

構文:

disable block_name;

ブロックには名前のラベルが付いている必要があります。

Forever ループによる Disable

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

forever ループは counter という名前の付いた block 内にあります。disable counter ステートメントはループの内側に配置されています。count が 5 に達すると、disable counter が実行され、counter block 全体が停止します。これにより、forever ループも直ちに停止します。

Disable in a Separate Block

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

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

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

重要なルール

ルール説明
block に名前をつける必要があるbegin : block_name
disable は実行を直ちに停止するコードはその瞬間に停止する
どこからでも使用可能module 内の任意の block から
forever ループの停止に便利そうしないと絶対に停止しない
challenge icon

チャレンジ

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

作業内容:

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

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

自分で試してみよう

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

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

基礎のすべてのレッスン