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

جملة If

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

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

إذا كانت الـ condition true (1)، فسيتم تنفيذ الكود الموجود بالداخل. وإذا كانت الـ condition false (0)، فسيتم تجاوز الكود.

الصياغة (Syntax):

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

مثال بسيط

if (reset) begin
  count = 0;
end

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

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

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

If Statement في Always Block

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

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

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

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

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

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

قواعد مهمة

القاعدةالشرح
يمكن أن تكون condition أي تعبيرتُعامل القيم غير الصفرية (والمعروفة) على أنها true، والصفر على أنه false
يلزم استخدام begin / end للجمل البرمجية المتعددةمثل { } في اللغات الأخرى
بدون begin/end، تتبعها statement واحدة فقطالسطر التالي فقط
challenge icon

التحدي

ما يجب فعله:

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

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

جرّب بنفسك

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اختبر نفسك

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

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