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

For Loop

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

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

الحلقة الأكثر استخدامًا هي حلقة <strong>for</strong>، التي تتكرر عددًا محددًا من المرات. تنفّذ حلقة for كتلةً من التعليمات البرمجية بشكل متكرر، مع متغير حلقة يتغير في كل تكرار. يمكنك التحكم بدقة في عدد مرات تشغيلها.

البنية النحوية:

for (initialization; condition; increment) begin
  // الكود المراد تكراره
end
الجزءما الذي يفعلهمثال
initializationيحدد قيمة البدايةi = 0
conditionمتى يتوقفi < 10
incrementيتغير في كل loopi = 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

يعمل loop 5 مرات (i = 0, 1, 2, 3, 4).

For Loop في Testbenches

تُستخدم For loops عادةً لاختبار جميع تركيبات الإدخال:

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 مواقع في الذاكرة.

قواعد مهمة

القاعدةالشرح
يجب أن يكون متغير loop من النوع integer أو reg لا يمكن أن يكون wire
استخدم begin/end للعبارات المتعددةمطلوب لأكثر من سطر واحد
تجنب loop اللانهائيةتأكد من أن condition تصبح false في النهاية
يُفضَّل استخدامها في testbenchesمعظم loop غير قابلة للتوليف
challenge icon

التحدي

ما يجب فعله:

Add the missing for loop to print numbers from 0 to 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 عبر الإنترنت