الإسناد الحاجب
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 49 من 90.
تحتوي Verilog على نوعين من procedural assignments: blocking (=) و non-blocking (<=). في هذا الدرس، نركز على blocking assignment.
يستخدم التعيين من نوع Blocking المعامل =. ويُطلق عليه اسم "blocking" لأنه يحجب تنفيذ العبارة التالية حتى يكتمل التعيين الحالي. يتم تشغيل الكود خطوة بخطوة، بالترتيب.
الصياغة (Syntax):
variable = expression;متى تستخدم Blocking assignment
يُستخدم Blocking assignment (=) للـ combinational logic — الدوائر التي تتغير مخرجاتها فورًا عند تغير المدخلات، مع عدم وجود clock وعدم وجود ذاكرة.
أمثلة على المنطق التجميعي (Combinational logic):
- بوابات AND / OR / XOR
- الجامعات والطوارح (Adders and subtractors)
- المُجمِّعات (Multiplexers)
- فكاك الشفرات (Decoders)
مثال Verilog:
always @(*) begin
sum = a + b; // إسناد حاجز
carry = a & b; // إسناد حاجز
endBlocking في Always Blocks (المنطق التجميعي)
always @(*) begin
temp = a & b; // الخطوة 1
out = temp | c; // الخطوة 2 (تستخدم temp من الخطوة 1)
endالترتيب مهم. هذا ممتاز بالنسبة للمنطق التجميعي (combinational logic).
المانع (Blocking) مقابل غير المانع (Non-Blocking)
Blocking (=) | Non-blocking (<=) | |
|---|---|---|
| التنفيذ | واحدًا تلو الآخر | دفعة واحدة |
| هل ينتظر السطر التالي؟ | نعم | لا |
| الاستخدامات (Uses) | المنطق التجميعي (Combinational logic) | المنطق التتابعي (Sequential logic - قلابات) |
هام: لا تستخدم Blocking لـ Flip-Flops
التحدي
أضف تخصيصات blocking المفقودة لتبادل قيم x و y باستخدام متغير مؤقت.
ما يجب فعله:
- قم بتعيين قيمة
xإلىtemp(احفظ x في temp) - قم بتعيين قيمة
yإلىx(انقل y إلى x) - قم بتعيين قيمة
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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة التحسسالإسناد الحاجبالإسناد غير الحاجبمراجعة - Always مقابل Initial