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

Forever Loop

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

تكرر حلقة forever كتلة من التعليمات البرمجية باستمرار، 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

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

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

forever مقابل الحلقات الأخرى

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

قواعد مهمة

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

التحدي

ما يجب فعله:

Add حلقة forever من نوع loop المفقودة لإنشاء ساعة تبدّل حالتها every 10 time units.

جرّب بنفسك

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

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

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

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