Menu
CoddyTech

عبارة If

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

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

إذا كان الشرط صحيحًا (1)، يُنفَّذ الرمز الموجود بداخله. وإذا كان الشرط خطأ (0)، يتم تخطي الرمز.

الصياغة:

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

مثال بسيط

if (reset) begin
  count = 0;
end

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

  • يُستخدم begin وend لتحديد بداية كتلة التعليمات البرمجية ونهايتها
  • إذا كانت reset تساوي 1 (صحيح)، فسيُنفَّذ الكود الموجود بين begin وend → تصبح count مساويةً لـ 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

قواعد مهمة

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

التحدي

ما يجب فعله:

  1. أضف عبارة if الناقصة لجعل هذا يعمل.
  • عندما تكون قيمة enable هي 1، يجب أن تساوي قيمة out a & b
  • عندما تكون قيمة enable هي 0، يجب أن تبقى قيمة 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 &amp; 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اختبر نفسك

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

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

تدرّب بنفسك: مترجم Verilog عبر الإنترنت