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

If Statement

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

عبارة if هي كتلة لاتخاذ القرار تقوم بـ executes التعليمات البرمجية فقط عندما يكون condition true. تتحقق عبارة if من condition.

إذا كان condition هو true (1)، فإن الشيفرة الموجودة بداخله executes. وإذا كان condition هو false (0)، فسيتم تخطي الشيفرة.

البنية النحوية:

if (condition) begin
  // يُنفَّذ الكود عندما يكون condition هو true
end

مثال بسيط

if (reset) begin
  count = 0;
end

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

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

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

عبارة if داخل كتلة always

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

ملاحظة: بالنسبة إلى statement واحدة، فإن 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، تتبع عبارة واحدة فقطالسطر التالي فقط
challenge icon

التحدي

ما يجب فعله:

  1. Add عبارة if المفقودة لإنجاز ذلك.
  • when تكون enable مساويةً لـ 1، يجب أن تساوي out القيمة a & b
  • when تكون 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 & 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 عبر الإنترنت