Menu
CoddyTech

حلقة لا نهائية

جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 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

ينشئ هذا ساعة تعمل طوال فترة المحاكاة.

إلى الأبد مع التعطيل

يمكنك إيقاف حلقة forever باستخدام عبارة disable:

initial begin : clock_gen   // أُضيف الاسم هنا
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end
initial begin
  #100;
  disable clock_gen;   // الآن يعمل هذا
end

إلى الأبد مقارنةً بالحلقات الأخرى

الحلقةهل تتوقف؟متى تُستخدم
forنعم (بعد عدد ثابت من التكرارات)عدد معروف من التكرارات
whileنعم (عندما يصبح الشرط غير صحيح)شرط توقف غير معروف
repeatنعم (بعد عدد ثابت من التكرارات)عدد معروف من التكرارات
foreverلا (أبدًا)إشارات مستمرة (الساعة)

قواعد مهمة

القاعدةالتوضيح
يجب أن يتضمن تأخيرًا#10 أو @(posedge clk)
من دون تأخير، تتوقف المحاكاةحلقة لا نهائية من دون تقدم زمني
أوقف الحلقة باستخدام disable أو أنهِ المحاكاة باستخدام $finishوإلا فلن تنتهي المحاكاة أبدًا
يُفضّل استخدامه في منصات الاختبارلا يمكن تصنيعه
challenge icon

التحدي

ما المطلوب:

أضف حلقة forever المفقودة لإنشاء ساعة تتبدّل حالتها كل 10 وحدات زمنية.

جرّب بنفسك

module forever_challenge;
  reg clk;
  
  initial begin
    clk = 0;
    // TODO: أضف حلقة forever لتبديل قيمة clk كل 10 وحدات زمنية
  end
endmodule
quiz iconاختبر نفسك

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

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

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