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

حلقة For

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

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

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

الصياغة (Syntax):

for (initialization; condition; increment) begin
  // الكود للتكرار
end
PartWhat It DoesExample
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 عادةً لاختبار جميع مدخلات التراكيب الممكنة:

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 Loop مع المصفوفات

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 مواقع في الـ memory.

قواعد مهمة

القاعدةالشرح
يجب أن يكون متغير الـ Loop من النوع integer أو reg لا يمكن أن يكون wire
استخدم begin/end للعبارات المتعددةمطلوب لأكثر من سطر واحد
تجنب الحلقات اللانهائيةتأكد من أن الـ condition ستصبح خاطئة (false) في النهاية
يفضل استخدامها في منصات الاختبار (testbenches)معظم الحلقات (loops) غير قابلة للتصنيع البرمجي (not synthesizable)
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
    // بالداخل، اطبع i
    
    $finish;
  end
endmodule
quiz iconاختبر نفسك

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

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