Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

Disable Statement

جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 62 من 90.

توقف عبارة disable تنفيذ named block (مثل حلقة forever أو كتلة begin-end أو مهمة). وهي مفيدة للخروج من الحلقات التي كانت ستستمر إلى الأبد لولا ذلك.

البنية النحوية:

disable block_name;

يجب تسمية الكتلة باسم.

Disable باستخدام حلقة forever

initial begin : counter // counter يعطي الكتلة الاسم counter.
  forever begin
    #10 count = count + 1;
    if (count == 5) begin
      disable counter;   // disable counter يوقف تلك الكتلة المسماة بأكملها.
    end
  end
end

حلقة forever موجودة داخل named block مُسمّى counter. توجد العبارة disable counter داخل الحلقة. عندما تصل قيمة count إلى 5، تُنفَّذ disable counter وتوقف entire block counter، مما يؤدي فورًا إلى أن stops حلقة forever أيضًا.

Disable في كتلة منفصلة

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 من outside.

قواعد مهمة

القاعدةالشرح
يجب تسمية blockbegin : block_name
Disable يوقف التنفيذ فورًايتوقف الكود في تلك اللحظة
يمكن استخدامه من أي مكانمن أي block في module
مفيد لإيقاف حلقات foreverوإلا فلن تتوقف أبدًا
challenge icon

التحدي

لديك module مع counter يعمل forever. 

ما يجب فعله:

أكمل block الفارغ باستبدال كل تعليق بالكود الصحيح:

  1. أضف #50; للانتظار لمدة 50 من time units
  2. أضف disable counter; لإيقاف counter block
  3. أضف $display("Counter stopped"); لطباعة الرسالة
  4. أضف $finish; لإنهاء simulation

جرّب بنفسك

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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: مترجم Verilog عبر الإنترنت