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

حلقة For

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

تسمح الحلقات التكرارية (Loops) في Verilog بتنفيذ كتلة من الكود عدة مرات. وهي مفيدة بشكل خاص في منصات الاختبار (testbenches) لتوليد أنماط اختبار متكررة، وتهيئة الذاكرة، والتكرار عبر المصفوفات. وعلى عكس أوصاف الأجهزة (hardware descriptions) التي تعمل بالتوازي، يتم تنفيذ الحلقات التكرارية بشكل تسلسلي، مما يجعلها مثالية للمحاكاة والاختبار.

الحلقة الأكثر استخدامًا هي حلقة <strong>for</strong>، والتي تتكرر لعدد محدد من المرات. تقوم حلقة 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 في منصات الاختبار (Testbenches)

تُستخدم حلقات For بشكل شائع لاختبار جميع تركيبات المدخلات:

reg [3:0] 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 لعدة جمل برمجيةمطلوب لأكثر من سطر واحد
تجنب الحلقات اللانهائيةتأكد من أن الشرط سيصبح خاطئاً في النهاية
يفضل استخدامه في منصات الاختبار (testbenches)معظم الحلقات غير قابلة للتصنيع (not synthesizable)
challenge icon

التحدي

ماذا تفعل:

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

ورقة مرجعية

تكرر حلقة for في Verilog كتلة من الكود لعدد محدد من المرات:

for (initialization; condition; increment) begin
  // الكود المراد تكراره
end

مثال لطباعة الأرقام من 0 إلى 4:

integer i;

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

القواعد الأساسية:

  • يجب أن يكون متغير الحلقة من نوع integer أو reg (ليس wire)
  • استخدم begin/end للجمل المتعددة
  • تأكد من أن الشرط سيصبح خاطئاً في النهاية لتجنب الحلقات اللانهائية
  • يُفضل استخدام الحلقات في منصات الاختبار (testbenches) (غالباً لا تكون قابلة للتصنيع/التركيب - synthesizable)

جرّب بنفسك

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

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

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