Menu
CoddyTech

حلقة For

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

تتيح لك الحلقات في Verilog تنفيذ كتلة من التعليمات البرمجية عدة مرات. وهي مفيدة بشكل خاص في منصات الاختبار لتوليد أنماط اختبار متكررة، وتهيئة الذاكرة، والتكرار على المصفوفات. وعلى عكس أوصاف العتاد التي تعمل بالتوازي، تُنفَّذ الحلقات بالتتابع، مما يجعلها مثالية للمحاكاة والاختبار.

الحلقة الأكثر استخدامًا هي for حلقة، وهي تكرر التنفيذ عددًا محددًا من المرات. تنفذ حلقة for كتلةً من التعليمات البرمجية مرارًا، مع متغير حلقة تتغير قيمته في كل تكرار. أنت تحدد بالضبط عدد مرات تشغيلها.

الصياغة:

for (initialization; condition; increment) begin
  // التعليمات البرمجية المراد تكرارها
end
الجزءما الذي يفعلهمثال
initializationيحدد قيمة البدايةi = 0
conditionمتى يتوقفi < 10
incrementيتغير في كل تكرارi = i + 1

مثال بسيط

integer i;

for (i = 0; i < 5; i = i + 1) begin
  $display("i = %d", i);
end

المخرجات:

i = 0
i = 1
i = 2
i = 3
i = 4

تتكرر الحلقة 5 مرات (i = 0, 1, 2, 3, 4).

حلقة for في بيئات الاختبار

تُستخدم حلقات for عادةً لاختبار جميع تركيبات المدخلات:

integer test_value;

for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
  $display("test_value = %d", test_value);
end

يختبر هذا جميع القيم الـ16 الممكنة لإشارة ذات 4 بتات.

حلقة for مع المصفوفات

reg [7:0] memory [0:9];
integer i;

initial begin
  for (i = 0; i < 10; i = i + 1) begin
    memory[i] = i * 8;
  end
end

يهيّئ هذا 10 مواقع في الذاكرة.

قواعد مهمة

القاعدةالشرح
يجب أن يكون متغير الحلقة integer أو reg لا يمكن أن يكون wire
استخدم begin/end لعدة عباراتهذا مطلوب لأكثر من سطر واحد
تجنب الحلقات اللانهائيةتأكد من أن الشرط يصبح خطأ في نهاية المطاف
استخدم حدودًا ثابتة في الشيفرة القابلة للتوليفتقوم عملية التوليف بفك الحلقة إلى نسخة واحدة من المنطق لكل تكرار
challenge icon

التحدي

ما يجب فعله:

أضف حلقة for الناقصة لطباعة الأرقام من 0 إلى 3.

جرّب بنفسك

module for_challenge;
  integer i;
  
  initial begin
    $display("Printing 0 to 3:");
    
    // TODO: أضف حلقة for
    // هيّئ i = 0
    // كرّر ما دام i < 4
    // زِد i = i + 1
    // داخل الحلقة، اطبع باستخدام: $display("i = %d", i);
    
    $finish;
  end
endmodule
quiz iconاختبر نفسك

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

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

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