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

الإسناد الحاجب

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

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

يستخدم التعيين الحاجب (Blocking assignment) المعامل =. ويُطلق عليه اسم "حاجب" لأنه يحجب تنفيذ العبارة التالية حتى يكتمل التعيين الحالي. يتم تشغيل الكود خطوة بخطوة، وبالترتيب.

الصيغة:

variable = expression;

متى يتم استخدام التعيين المحجوب (Blocking Assignment)

يُستخدم التعيين المحجوب (=) من أجل المنطق التوافقي (combinational logic) — وهي الدوائر التي تتغير مخرجاتها فوراً عند تغير المدخلات، مع عدم وجود ساعة (clock) وعدم وجود ذاكرة.

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

  • بوابات AND / OR / XOR
  • الجامعات والطوارح
  • المجمعات (Multiplexers)
  • أجهزة فك التشفير (Decoders)

مثال Verilog:

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

التعيين المتسلسل (Blocking) في كتل Always (المنطق التوافقي)

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

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

Blocking مقابل Non-Blocking

 Blocking (=)Non-blocking (<=)
التنفيذواحد تلو الآخرالكل في وقت واحد
هل ينتظر السطر التالي؟نعملا
الاستخداماتالمنطق التوافقي (Combinational logic)المنطق التسلسلي (Sequential logic) (flip-flops)

هام: لا تستخدم الإسناد الحاجب (Blocking) مع القلابات (Flip-Flops)

challenge icon

التحدي

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

ما يجب فعله:

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

ورقة مرجعية

الإسناد الحاجب (=) يُنفذ بالتسلسل — تكتمل كل جملة قبل أن تبدأ الجملة التالية. يُستخدم لـ المنطق التوافقي داخل كتل always @(*).

always @(*) begin
  temp = a & b;    // الخطوة 1
  out = temp | c;  // الخطوة 2 (يستخدم temp المحدثة)
end
الحاجب (=) غير الحاجب (<=)
التنفيذ واحدة تلو الأخرى الكل في وقت واحد
يُستخدم لـ المنطق التوافقي المنطق التتابعي (flip-flops)

جرّب بنفسك

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

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

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