حلقة لا نهائية
جزء من قسم الأساسيات في رحلة 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
endinitial begin
#100;
disable clock_gen; // الآن يعمل هذا
endإلى الأبد مقارنةً بالحلقات الأخرى
| الحلقة | هل تتوقف؟ | متى تُستخدم |
|---|---|---|
for | نعم (بعد عدد ثابت من التكرارات) | عدد معروف من التكرارات |
while | نعم (عندما يصبح الشرط غير صحيح) | شرط توقف غير معروف |
repeat | نعم (بعد عدد ثابت من التكرارات) | عدد معروف من التكرارات |
forever | لا (أبدًا) | إشارات مستمرة (الساعة) |
قواعد مهمة
| القاعدة | التوضيح |
|---|---|
| يجب أن يتضمن تأخيرًا | #10 أو @(posedge clk) |
| من دون تأخير، تتوقف المحاكاة | حلقة لا نهائية من دون تقدم زمني |
أوقف الحلقة باستخدام disable أو أنهِ المحاكاة باستخدام $finish | وإلا فلن تنتهي المحاكاة أبدًا |
| يُفضّل استخدامه في منصات الاختبار | لا يمكن تصنيعه |
التحدي
ما المطلوب:
أضف حلقة forever المفقودة لإنشاء ساعة تتبدّل حالتها كل 10 وحدات زمنية.
جرّب بنفسك
module forever_challenge;
reg clk;
initial begin
clk = 0;
// TODO: أضف حلقة forever لتبديل قيمة clk كل 10 وحدات زمنية
end
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4العوامل الجزء 1
العوامل الحسابيةعامل باقي القسمةعوامل المقارنةمراجعة - الرياضيات البسيطةالعوامل على مستوى البتات7التعيين والبوابات
التعيين المستمرالتعيين باستخدام العواملالعناصر الأساسية المدمجة للبواباتبوابات AND وOR وNOTبوابات XOR وXNORمراجعة - دائرة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الربطالمعامل الشرطيمراجعة - تحدي المعاملات11الحلقات التكرارية
حلقة Forحلقة Whileحلقة التكرارحلقة لا نهائيةتعليمة التعطيلمراجعة - أنماط الحلقات التكرارية3نظام الأعداد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ الإدخال والإخراج ثنائية الاتجاهإنشاء مثيل للوحدةربط المنافذ حسب الاسمربط المنافذ حسب الترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة الحساسيةإسناد حاجزإسناد غير حاجزمراجعة - Always مقابل Initial15متحكّم إشارات المرور
تعريف الحالاتمنطق آلة الحالاتتدرّب بنفسك: مترجم Verilog عبر الإنترنت