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

حلقة While

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

تكرر حلقة while كتلة من الكود طالما أن الشرط صحيح. وعلى عكس حلقة for، فهي لا تحتوي على عداد مدمج — يجب عليك تحديث متغير الحلقة بنفسك.

تقوم حلقة while بفحص شرط قبل كل تكرار. إذا كان الشرط صحيحاً، يتم تنفيذ الحلقة. أما إذا كان خاطئاً، فتتوقف الحلقة.

الصيغة:

while (condition) begin
  // الكود المراد تكراره
end

مثال بسيط

integer i = 0;

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

المخرجات:

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

تعمل الحلقة طالما أن i < 5.

حلقة While مقابل حلقة For

 حلقة Forحلقة While
العدادمدمجأنت من يديره
متى يُستخدمعدد معروف من التكراراتغير معروف متى ستتوقف الحلقة
الصيغة البرمجيةfor (i=0; i<5; i=i+1)while (i < 5)

حلقة While في منصات الاختبار (Testbenches)

تعد حلقات While مفيدة عندما لا تعرف بالضبط عدد التكرارات التي تحتاجها:

integer i = 0;

while (i < 16) begin
  $display("Testing value %d", i);
  i = i + 1;
end

البحث عن قيمة محددة

integer i = 0;
reg [7:0] data;

while (data[i] != 1) begin
  i = i + 1;
end
$display("First 1 found at position %d", i);

قواعد هامة

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

التحدي

ماذا تفعل:

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

ورقة مرجعية

تكرر حلقة while كتلة من الكود طالما أن الشرط صحيح. يجب عليك تحديث متغير الحلقة يدوياً.

integer i = 0;

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

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

  • يجب أن يكون متغير الحلقة من نوع integer (وليس reg)
  • قم دائماً بتحديث متغير الحلقة داخل الحلقة لتجنب الحلقات اللانهائية
  • استخدم begin/end للبيانات المتعددة

While مقابل For: استخدم for عندما يكون عدد التكرارات معروفاً؛ واستخدم while عندما يكون شرط التوقف ديناميكياً (على سبيل المثال، البحث عن قيمة).

// البحث عن أول بت مضبوط (set bit)
while (data[i] != 1) begin
  i = i + 1;
end

جرّب بنفسك

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

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

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