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

Blocking Assignment

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

يحتوي Verilog على نوعين من الإسنادات الإجرائية: الحاجبة (=) وغير الحاجبة (<=). في هذا الدرس، نركّز على الإسناد الحاجب.

يستخدم Blocking assignment عامل =. ويُسمّى «الحجب» لأنه يمنع تنفيذ التعليمة التالية حتى يكتمل assignment الحالي. يُنفَّذ الكود step by step، بالترتيب.

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

variable = expression;

متى تستخدم عملية الإسناد Blocking

تُستخدم عملية الإسناد Blocking (=) في المنطق التوافقي: وهي دوائر تتغير مخرجاتها فورًا عند تغير المدخلات، من دون ساعة ومن دون ذاكرة.

أمثلة على المنطق التوافقي:

  • بوابات AND / OR / XOR
  • دوائر الجمع والطرح
  • المُبدِّلات
  • فكّاك الشيفرة

مثال على Verilog:

always @(*) begin
  sum = a + b;      // تعيين حاجز
  carry = a & b;    // تعيين حاجز
end

Blocking في كتل always (المنطق التوافقي)

always @(*) begin
  temp = a & b;    // الخطوة 1
  out = temp | c;  // الخطوة 2 (تستخدم temp من الخطوة 1)
end

الترتيب مهم. هذا مناسب للمنطق التوافقي.

Blocking مقابل غير حاجب

 Blocking (=)غير حاجب (<=)
التنفيذواحدًا تلو الآخركلها في الوقت نفسه
هل ينتظر السطر التالي؟نعملا
Usesالمنطق التوافقيالمنطق التسلسلي (القلابات)

مهم: لا تستخدم Blocking مع القلابات

challenge icon

التحدي

أضف تعيينات blocking المفقودة لمبادلة قيم x وy باستخدام متغير مؤقت.

ما يجب فعله:

  1. Assign قيمة x إلى temp (احفظ x في temp)
  2. Assign قيمة y إلى x (انقل y إلى x)
  3. Assign قيمة temp إلى y (انقل قيمة x المحفوظة إلى y)

جرّب بنفسك

module swap;
  reg x, y;
  reg temp;
  
  initial begin
    x = 1;
    y = 0;
    
    $display("Before swap: x=%d, y=%d", x, y);
    
    // TODO: الخطوة 1 - أسند x إلى temp
    
    // TODO: الخطوة 2 - أسند y إلى x
    
    // TODO: الخطوة 3 - أسند temp إلى y
    
    $display("After swap: x=%d, y=%d", x, y);
    $finish;
  end
endmodule
quiz iconاختبر نفسك

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

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

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