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
endinitial begin
#100;
disable clock_gen; // الآن هذا يعمل
endforever مقابل الحلقات الأخرى
| الحلقة | هل تتوقف؟ | متى تُستخدم |
|---|---|---|
for | نعم (بعد عدد ثابت من التكرارات) | عدد معروف من التكرارات |
while | نعم (عندما يصبح الشرط خاطئًا) | شرط توقف غير معروف |
repeat | نعم (بعد عدد ثابت من التكرارات) | عدد معروف من التكرارات |
forever | لا (أبدًا) | إشارات مستمرة (الساعة) |
قواعد مهمة
| القاعدة | الشرح |
|---|---|
| يجب أن يتضمن تأخيرًا | #10 أو @(posedge clk) |
| من دون تأخير، تتوقف المحاكاة | حلقة لا نهائية من دون تقدم زمني |
استخدمه مع disable للإيقاف | وإلا فلن تنتهي المحاكاة |
| يُفضّل استخدامه في بيئات الاختبار | غير قابل للتوليف |
التحدي
ما يجب فعله:
Add حلقة forever من نوع loop المفقودة لإنشاء ساعة تبدّل حالتها every 10 time units.
جرّب بنفسك
module forever_challenge;
reg clk;
initial begin
clk = 0;
// TODO: أضف حلقة forever لتبديل clk كل 10 وحدات زمنية
end
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logicتدرّب بنفسك: مترجم Verilog عبر الإنترنت