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

جملة If

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

تُعد جملة if بمثابة كتلة لاتخاذ القرار، حيث تقوم بتنفيذ الكود فقط عندما يكون الشرط صحيحاً (true). تتحقق جملة if من صحة الشرط.

إذا كان الشرط صحيحاً (1)، يتم تنفيذ الكود الموجود بالداخل. إذا كان الشرط خاطئاً (0)، يتم تخطي الكود.

الصيغة:

if (condition) begin
  // يتم تنفيذ الكود عندما يكون الشرط صحيحاً
end

مثال بسيط

if (reset) begin
  count = 0;
end

في هذا المثال:

  • تُستخدم begin و end لتمييز بداية و نهاية كتلة الكود
  • إذا كان reset هو 1 (صحيح)، يتم تنفيذ الكود الموجود داخل begin و endcount يصبح 0
  • إذا كان reset هو 0 (خطأ)، يتم تخطي الكود الموجود بالداخل ← لا يحدث شيء

تعمل begin و end مثل الأقواس المتعرجة { } في لغات البرمجة الأخرى. فهما يقومان بتجميع العبارات معاً حتى يعرف Verilog أي كود ينتمي إلى شرط if. على الرغم من وجود عبارة واحدة فقط هنا، إلا أن استخدام begin و end لا يزال ممارسة جيدة من أجل الاتساق.

جملة If في كتلة Always

always @(posedge clk) begin
  if (reset)
    count <= 0;
end

ملاحظة: بالنسبة لجملة برمجية واحدة، فإن begin و end اختياريان. على سبيل المثال، في كتلة always أعلاه، لا يلزم استخدام begin/end بعد if لأنها تحتوي على جملة واحدة فقط.

يمكن أن يكون الشرط أي تعبير

if (a > b) begin
  max = a;
end

if (a && b) begin
  out = 1;
end

if (data == 8'hFF) begin
  match = 1;
end

قواعد هامة

القاعدةالشرح
يجب أن يكون الشرط بت واحد فقطأو تعبير يتم تقييمه إلى 0 أو 1
begin / end مطلوبة لعدة عبارات برمجيةمثل { } في اللغات الأخرى
بدون begin/end، تتبعها عبارة برمجية واحدة فقطالسطر التالي فقط
challenge icon

التحدي

ماذا تفعل:

  1. أضف جملة if المفقودة لجعل هذا يعمل.
  • عندما يكون enable هو 1، يجب أن يساوي out القيمة a & b
  • عندما يكون enable هو 0، يجب أن يظل out بقيمة 0 (لا يتغير)

يقوم كود البداية بتهيئة out = 0 ويختبر كلتا الحالتين.

ورقة مرجعية

تقوم جملة if بتنفيذ الكود فقط عندما يكون الشرط صحيحاً (1)، وتتجاهله عندما يكون خاطئاً (0).

if (condition) begin
  // executes when condition is true
end

بالنسبة لـ جملة واحدة، تعتبر begin/end اختيارية:

always @(posedge clk) begin
  if (reset)
    count <= 0;
end

يمكن أن تكون الشروط أي تعبير يتم تقييمه إلى 0 أو 1:

if (a > b) begin max = a; end
if (a && b) begin out = 1; end
if (data == 8'hFF) begin match = 1; end

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

  • استخدم begin/end لتجميع جمل متعددة (مثل { } في اللغات الأخرى)
  • بدون begin/end، ينتمي السطر التالي مباشرة فقط إلى جملة if

جرّب بنفسك

module if_challenge;
  reg a, b, enable;
  reg out = 0;
  
  initial begin
    a = 1;
    b = 1;
    
    // حالة الاختبار 1: enable = 1
    enable = 1;
    // TODO: أضف جملة if (out = a & b)
    $display("enable=1: out = %d (should be 1)", out);
    
    // حالة الاختبار 2: enable = 0
    enable = 0;
    out = 0; 
    // TODO: يجب أن تبقى out مساوية لـ 0
    $display("enable=0: out = %d (should be 0)", out);
    
    $finish;
  end
endmodule
quiz iconاختبر نفسك

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

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